From b7ca3dbbc828da26c523533f3f2716e19971c693 Mon Sep 17 00:00:00 2001 From: Xiang Xiao Date: Sat, 31 Jul 2021 22:08:58 +0800 Subject: [PATCH] fs: Save umask to tls_task_s for non kernel mode only since the kernel mode has the dedicated userspace Signed-off-by: Xiang Xiao --- include/nuttx/tls.h | 2 +- libs/libc/misc/lib_umask.c | 19 ++++++++++++++++++- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/include/nuttx/tls.h b/include/nuttx/tls.h index 5e655f742e8..0b342fae35a 100644 --- a/include/nuttx/tls.h +++ b/include/nuttx/tls.h @@ -85,13 +85,13 @@ typedef CODE void (*tls_dtor_t)(FAR void *); struct task_info_s { sem_t ta_sem; - mode_t ta_umask; /* File mode creation mask */ #if CONFIG_TLS_NELEM > 0 tls_ndxset_t ta_tlsset; /* Set of TLS indexes allocated */ tls_dtor_t ta_tlsdtor[CONFIG_TLS_NELEM]; /* List of TLS destructors */ #endif #ifndef CONFIG_BUILD_KERNEL struct getopt_s ta_getopt; /* Globals used by getopt() */ + mode_t ta_umask; /* File mode creation mask */ #endif }; diff --git a/libs/libc/misc/lib_umask.c b/libs/libc/misc/lib_umask.c index 995046c30da..aa8cb03f845 100644 --- a/libs/libc/misc/lib_umask.c +++ b/libs/libc/misc/lib_umask.c @@ -25,6 +25,14 @@ #include #include +/**************************************************************************** + * Private Data + ****************************************************************************/ + +#ifdef CONFIG_BUILD_KERNEL +static mode_t g_umask; +#endif + /**************************************************************************** * Public Functions ****************************************************************************/ @@ -45,12 +53,17 @@ mode_t umask(mode_t mask) { - FAR struct task_info_s *info; mode_t prev; +#ifndef CONFIG_BUILD_KERNEL + FAR struct task_info_s *info; info = task_get_info(); prev = info->ta_umask; info->ta_umask = mask; +#else + prev = g_umask; + g_umask = mask; +#endif return prev; } @@ -61,8 +74,12 @@ mode_t umask(mode_t mask) mode_t getumask(void) { +#ifndef CONFIG_BUILD_KERNEL FAR struct task_info_s *info; info = task_get_info(); return info->ta_umask; +#else + return g_umask; +#endif }