summaryrefslogtreecommitdiff
path: root/src/shared/util.c
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2015-04-10 14:43:06 +0200
committerSven Eden <yamakuzure@gmx.net>2017-03-14 07:58:15 +0100
commitc85a9a1e8ba80d04a7497f8237b8ddffa50da8c2 (patch)
treec9bf75bb5e011ddabb356c225f78978cc04de27d /src/shared/util.c
parent03635567fbc1d916c44e13527454a80e8ee9db6b (diff)
util: unify how we parse mode_t strings
Diffstat (limited to 'src/shared/util.c')
-rw-r--r--src/shared/util.c21
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;
+}