chiark / gitweb /
Prep v220: Apply "Fixes to user and session saving"
[elogind.git] / src / shared / fstab-util.c
index a886f6a5dadd0e3a8a0665e81c3c4289fec750e2..e231a0ff80bdb2b6096f34e3711139b76ebe323e 100644 (file)
@@ -125,6 +125,36 @@ answer:
         return !!n;
 }
 
+int fstab_extract_values(const char *opts, const char *name, char ***values) {
+        _cleanup_strv_free_ char **optsv = NULL, **res = NULL;
+        char **s;
+
+        assert(opts);
+        assert(name);
+        assert(values);
+
+        optsv = strv_split(opts, ",");
+        if (!optsv)
+                return -ENOMEM;
+
+        STRV_FOREACH(s, optsv) {
+                char *arg;
+                int r;
+
+                arg = startswith(*s, name);
+                if (!arg || *arg != '=')
+                        continue;
+                r = strv_extend(&res, arg + 1);
+                if (r < 0)
+                        return r;
+        }
+
+        *values = res;
+        res = NULL;
+
+        return !!*values;
+}
+
 int fstab_find_pri(const char *options, int *ret) {
         _cleanup_free_ char *opt = NULL;
         int r;
@@ -133,8 +163,10 @@ int fstab_find_pri(const char *options, int *ret) {
         assert(ret);
 
         r = fstab_filter_options(options, "pri\0", NULL, &opt, NULL);
-        if (r <= 0)
+        if (r < 0)
                 return r;
+        if (r == 0 || !opt)
+                return 0;
 
         r = safe_atou(opt, &pri);
         if (r < 0)
@@ -143,6 +175,6 @@ int fstab_find_pri(const char *options, int *ret) {
         if ((int) pri < 0)
                 return -ERANGE;
 
-        *ret = (int) r;
+        *ret = (int) pri;
         return 1;
 }