diff --git a/include/nuttx/tls.h b/include/nuttx/tls.h index 5e655f742e..0b342fae35 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 995046c30d..aa8cb03f84 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 }