diff options
Diffstat (limited to 'src/basic')
-rw-r--r-- | src/basic/copy.c | 1 | ||||
-rw-r--r-- | src/basic/fileio.c | 1 | ||||
-rw-r--r-- | src/basic/umask-util.h | 48 | ||||
-rw-r--r-- | src/basic/util.h | 19 |
4 files changed, 50 insertions, 19 deletions
diff --git a/src/basic/copy.c b/src/basic/copy.c index f1413f74b0..a3a4099b4d 100644 --- a/src/basic/copy.c +++ b/src/basic/copy.c @@ -32,6 +32,7 @@ #include "io-util.h" #include "string-util.h" #include "strv.h" +#include "umask-util.h" #include "util.h" #include "xattr-util.h" diff --git a/src/basic/fileio.c b/src/basic/fileio.c index 2c4d70aa1c..3dfd3af8af 100644 --- a/src/basic/fileio.c +++ b/src/basic/fileio.c @@ -31,6 +31,7 @@ #include "random-util.h" #include "string-util.h" #include "strv.h" +#include "umask-util.h" #include "utf8.h" #include "util.h" diff --git a/src/basic/umask-util.h b/src/basic/umask-util.h new file mode 100644 index 0000000000..8ed34658b4 --- /dev/null +++ b/src/basic/umask-util.h @@ -0,0 +1,48 @@ +/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/ + +#pragma once + +/*** + This file is part of systemd. + + Copyright 2010 Lennart Poettering + + systemd is free software; you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + systemd is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with systemd; If not, see <http://www.gnu.org/licenses/>. +***/ + +#include <stdbool.h> +#include <sys/stat.h> +#include <sys/types.h> + +#include "macro.h" + +static inline void umaskp(mode_t *u) { + umask(*u); +} + +#define _cleanup_umask_ _cleanup_(umaskp) + +struct _umask_struct_ { + mode_t mask; + bool quit; +}; + +static inline void _reset_umask_(struct _umask_struct_ *s) { + umask(s->mask); +}; + +#define RUN_WITH_UMASK(mask) \ + for (_cleanup_(_reset_umask_) struct _umask_struct_ _saved_umask_ = { umask(mask), false }; \ + !_saved_umask_.quit ; \ + _saved_umask_.quit = true) diff --git a/src/basic/util.h b/src/basic/util.h index 680317909d..e356f59cd5 100644 --- a/src/basic/util.h +++ b/src/basic/util.h @@ -152,12 +152,7 @@ static inline void freep(void *p) { free(*(void**) p); } -static inline void umaskp(mode_t *u) { - umask(*u); -} - #define _cleanup_free_ _cleanup_(freep) -#define _cleanup_umask_ _cleanup_(umaskp) #define _cleanup_globfree_ _cleanup_(globfree) _malloc_ _alloc_(1, 2) static inline void *malloc_multiply(size_t a, size_t b) { @@ -222,20 +217,6 @@ static inline int negative_errno(void) { return -errno; } -struct _umask_struct_ { - mode_t mask; - bool quit; -}; - -static inline void _reset_umask_(struct _umask_struct_ *s) { - umask(s->mask); -}; - -#define RUN_WITH_UMASK(mask) \ - for (_cleanup_(_reset_umask_) struct _umask_struct_ _saved_umask_ = { umask(mask), false }; \ - !_saved_umask_.quit ; \ - _saved_umask_.quit = true) - static inline unsigned u64log2(uint64_t n) { #if __SIZEOF_LONG_LONG__ == 8 return (n > 1) ? (unsigned) __builtin_clzll(n) ^ 63U : 0; |