X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fshared%2Ffstab-util.c;h=e231a0ff80bdb2b6096f34e3711139b76ebe323e;hb=30ab6a0fc1bb950c4dcd90dcd3dfe00a810c7fc1;hp=a886f6a5dadd0e3a8a0665e81c3c4289fec750e2;hpb=c5e04d51277994cca29234b33a6b8fc90a183cf3;p=elogind.git diff --git a/src/shared/fstab-util.c b/src/shared/fstab-util.c index a886f6a5d..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,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; }