From 027e2eed282aa09d1c522c05f81b3ad65b11b7ab Mon Sep 17 00:00:00 2001 From: Xiang Xiao Date: Mon, 14 Sep 2020 14:20:13 +0800 Subject: [PATCH] libc: Implement umask function Here is the spec: https://pubs.opengroup.org/onlinepubs/009695399/functions/umask.html Note: The simple implementaton is enough since NuttX doesn't really support the permission Signed-off-by: Xiang Xiao --- include/sys/stat.h | 2 ++ libs/libc/misc/Make.defs | 2 +- libs/libc/misc/lib_umask.c | 57 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 libs/libc/misc/lib_umask.c diff --git a/include/sys/stat.h b/include/sys/stat.h index 2939189598..891c341639 100644 --- a/include/sys/stat.h +++ b/include/sys/stat.h @@ -168,6 +168,8 @@ int fstat(int fd, FAR struct stat *buf); int chmod(FAR const char *path, mode_t mode); int fchmod(int fd, mode_t mode); +mode_t umask(mode_t mask); + #undef EXTERN #if defined(__cplusplus) } diff --git a/libs/libc/misc/Make.defs b/libs/libc/misc/Make.defs index 1cf29072bf..0f34be1b0f 100644 --- a/libs/libc/misc/Make.defs +++ b/libs/libc/misc/Make.defs @@ -36,7 +36,7 @@ # Add the internal C files to the build -CSRCS += lib_stream.c lib_utsname.c +CSRCS += lib_stream.c lib_umask.c lib_utsname.c CSRCS += lib_xorshift128.c lib_tea_encrypt.c lib_tea_decrypt.c ifneq ($(CONFIG_STDIO_DISABLE_BUFFERING),y) diff --git a/libs/libc/misc/lib_umask.c b/libs/libc/misc/lib_umask.c new file mode 100644 index 0000000000..6cf6214979 --- /dev/null +++ b/libs/libc/misc/lib_umask.c @@ -0,0 +1,57 @@ +/**************************************************************************** + * libs/libc/misc/lib_umask.c + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. The + * ASF licenses this file to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the + * License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + ****************************************************************************/ + +/**************************************************************************** + * Included Files + ****************************************************************************/ + +#include + +/**************************************************************************** + * Private Data + ****************************************************************************/ + +static mode_t g_mask; + +/**************************************************************************** + * Public Functions + ****************************************************************************/ + +/**************************************************************************** + * Name: umask + * + * Description: + * Set and get the file mode creation mask + * + * Input Parameters: + * mask - The process' file mode creation mask + * + * Returned Value: + * The previous value of the mask. + * + ****************************************************************************/ + +mode_t umask(mode_t mask) +{ + mode_t prev = g_mask; + + g_mask = mask & 0777; + return prev; +}