chiark / gitweb /
util: unify how we parse mode_t strings
[elogind.git] / src / shared / util.c
index aea5364b585633f9eb08ffb78f0eb8541dd08532..6f0fb162deb137df474219ae41f89b322b2c165f 100644 (file)
@@ -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;
+}