diff --git a/Makefile.am b/Makefile.am index 56715f6351..dada6cd85f 100644 --- a/Makefile.am +++ b/Makefile.am @@ -821,6 +821,7 @@ libbasic_la_SOURCES = \ src/basic/time-util.h \ src/basic/locale-util.c \ src/basic/locale-util.h \ + src/basic/umask-util.h \ src/basic/signal-util.c \ src/basic/signal-util.h \ src/basic/string-table.c \ 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 . +***/ + +#include +#include +#include + +#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; diff --git a/src/core/machine-id-setup.c b/src/core/machine-id-setup.c index d9611ab7c6..d00d3e94bb 100644 --- a/src/core/machine-id-setup.c +++ b/src/core/machine-id-setup.c @@ -43,6 +43,7 @@ #include "process-util.h" #include "stat-util.h" #include "string-util.h" +#include "umask-util.h" #include "util.h" #include "virt.h" diff --git a/src/core/manager.c b/src/core/manager.c index 83068af77e..bf0cf069ca 100644 --- a/src/core/manager.c +++ b/src/core/manager.c @@ -79,6 +79,7 @@ #include "terminal-util.h" #include "time-util.h" #include "transaction.h" +#include "umask-util.h" #include "unit-name.h" #include "util.h" #include "virt.h" diff --git a/src/core/namespace.c b/src/core/namespace.c index ec7180ebdc..65cf140123 100644 --- a/src/core/namespace.c +++ b/src/core/namespace.c @@ -41,6 +41,7 @@ #include "string-table.h" #include "string-util.h" #include "strv.h" +#include "umask-util.h" #include "util.h" typedef enum MountMode { diff --git a/src/firstboot/firstboot.c b/src/firstboot/firstboot.c index 8faed594c6..30ea942d14 100644 --- a/src/firstboot/firstboot.c +++ b/src/firstboot/firstboot.c @@ -39,6 +39,7 @@ #include "strv.h" #include "terminal-util.h" #include "time-util.h" +#include "umask-util.h" #include "user-util.h" static char *arg_root = NULL; diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c index 152846b8bf..4e9ac04094 100644 --- a/src/nspawn/nspawn.c +++ b/src/nspawn/nspawn.c @@ -95,6 +95,7 @@ #include "strv.h" #include "terminal-util.h" #include "udev-util.h" +#include "umask-util.h" #include "user-util.h" #include "util.h" diff --git a/src/shared/ask-password-api.c b/src/shared/ask-password-api.c index 9e8025d615..b2dbf98b8e 100644 --- a/src/shared/ask-password-api.c +++ b/src/shared/ask-password-api.c @@ -45,6 +45,7 @@ #include "string-util.h" #include "strv.h" #include "terminal-util.h" +#include "umask-util.h" #include "util.h" #define KEYRING_TIMEOUT_USEC ((5 * USEC_PER_MINUTE) / 2) diff --git a/src/shared/base-filesystem.c b/src/shared/base-filesystem.c index 751dfdec45..9ccf26526f 100644 --- a/src/shared/base-filesystem.c +++ b/src/shared/base-filesystem.c @@ -24,12 +24,13 @@ #include #include +#include "base-filesystem.h" +#include "fd-util.h" #include "log.h" #include "macro.h" #include "string-util.h" +#include "umask-util.h" #include "util.h" -#include "base-filesystem.h" -#include "fd-util.h" typedef struct BaseFilesystem { const char *dir; diff --git a/src/tmpfiles/tmpfiles.c b/src/tmpfiles/tmpfiles.c index 9440ce7bb6..9ac10db22a 100644 --- a/src/tmpfiles/tmpfiles.c +++ b/src/tmpfiles/tmpfiles.c @@ -65,6 +65,7 @@ #include "string-table.h" #include "string-util.h" #include "strv.h" +#include "umask-util.h" #include "user-util.h" #include "util.h"