chiark / gitweb /
util-lib: introduce parse_percent() for parsing percent specifications
[elogind.git] / src / basic / parse-util.c
index d0208e93f01a028c6e5880afcb1fb8d79e3b02a4..90bae7149559ee6001bf25b69341fd1da765b583 100644 (file)
@@ -536,3 +536,22 @@ int parse_fractional_part_u(const char **p, size_t digits, unsigned *res) {
 
         return 0;
 }
+
+int parse_percent(const char *p) {
+        const char *pc, *n;
+        unsigned v;
+        int r;
+
+        pc = endswith(p, "%");
+        if (!pc)
+                return -EINVAL;
+
+        n = strndupa(p, pc - p);
+        r = safe_atou(n, &v);
+        if (r < 0)
+                return r;
+        if (v > 100)
+                return -ERANGE;
+
+        return (int) v;
+}