diff options
Diffstat (limited to 'src/shared')
-rw-r--r-- | src/shared/fstab-util.c | 30 | ||||
-rw-r--r-- | src/shared/fstab-util.h | 2 |
2 files changed, 32 insertions, 0 deletions
diff --git a/src/shared/fstab-util.c b/src/shared/fstab-util.c index cf317e17bd..e231a0ff80 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; diff --git a/src/shared/fstab-util.h b/src/shared/fstab-util.h index 9f6b32eaf4..387c562a96 100644 --- a/src/shared/fstab-util.h +++ b/src/shared/fstab-util.h @@ -28,6 +28,8 @@ int fstab_filter_options(const char *opts, const char *names, const char **namefound, char **value, char **filtered); +int fstab_extract_values(const char *opts, const char *name, char ***values); + static inline bool fstab_test_option(const char *opts, const char *names) { return !!fstab_filter_options(opts, names, NULL, NULL, NULL); } |