diff options
author | Lennart Poettering <lennart@poettering.net> | 2015-04-10 14:43:06 +0200 |
---|---|---|
committer | Sven Eden <yamakuzure@gmx.net> | 2017-03-14 07:58:15 +0100 |
commit | c85a9a1e8ba80d04a7497f8237b8ddffa50da8c2 (patch) | |
tree | c9bf75bb5e011ddabb356c225f78978cc04de27d /src/shared/util.c | |
parent | 03635567fbc1d916c44e13527454a80e8ee9db6b (diff) |
util: unify how we parse mode_t strings
Diffstat (limited to 'src/shared/util.c')
-rw-r--r-- | src/shared/util.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/src/shared/util.c b/src/shared/util.c index aea5364b5..6f0fb162d 100644 --- a/src/shared/util.c +++ b/src/shared/util.c @@ -8115,3 +8115,24 @@ char *shell_maybe_quote(const char *s) { return r; } + +int parse_mode(const char *s, mode_t *ret) { + char *x; + long l; + + assert(s); + assert(ret); + + errno = 0; + l = strtol(s, &x, 8); + if (errno != 0) + return -errno; + + if (!x || x == s || *x) + return -EINVAL; + if (l < 0 || l > 07777) + return -ERANGE; + + *ret = (mode_t) l; + return 0; +} |