X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fshared%2Ffstab-util.c;h=e231a0ff80bdb2b6096f34e3711139b76ebe323e;hb=86e97d599f8b1ca379dce64fadac9b8f6b002ac5;hp=546c81b80ff68bb4c9057ce8e71c4f143f3cfeb2;hpb=d15d0333be6a1ca7fdd99a1881d967b6be8f387a;p=elogind.git diff --git a/src/shared/fstab-util.c b/src/shared/fstab-util.c index 546c81b80..e231a0ff8 100644 --- a/src/shared/fstab-util.c +++ b/src/shared/fstab-util.c @@ -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,13 +163,18 @@ 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) return r; - *ret = (int) r; + if ((int) pri < 0) + return -ERANGE; + + *ret = (int) pri; return 1; }