From 0ffc25463b3e6c5a87c14f782a7c1d19b13d318f Mon Sep 17 00:00:00 2001 From: Benjamin Coddington Date: Mon, 8 Dec 2014 15:32:29 -0500 Subject: mount.nfs: parse options - add helper po_contains_prefix The version options (v3,v4,v4.2) may increase in the future, but they have a predictable prefix. Add a parse option helper to locate and return these options by prefix so that a future increment of version does not require the addition of strings to a search table. Signed-off-by: Benjamin Coddington Signed-off-by: Steve Dickson --- utils/mount/parse_opt.c | 24 ++++++++++++++++++++++++ utils/mount/parse_opt.h | 2 ++ 2 files changed, 26 insertions(+) diff --git a/utils/mount/parse_opt.c b/utils/mount/parse_opt.c index 342e210..7ba61c4 100644 --- a/utils/mount/parse_opt.c +++ b/utils/mount/parse_opt.c @@ -409,6 +409,30 @@ po_found_t po_contains(struct mount_options *options, char *keyword) return PO_NOT_FOUND; } +/** + * po_contains_prefix - check for presence of an option matching a prefix + * @options: pointer to mount options + * @prefix: pointer to prefix to match against a keyword + * @keyword: pointer to a C string containing the option keyword if found + * + * On success, *keyword contains the pointer of the matching option's keyword. + */ +po_found_t po_contains_prefix(struct mount_options *options, + const char *prefix, char **keyword) +{ + struct mount_option *option; + + if (options && prefix) { + for (option = options->head; option; option = option->next) + if (strncmp(option->keyword, prefix, strlen(prefix)) == 0) { + *keyword = option->keyword; + return PO_FOUND; + } + } + + return PO_NOT_FOUND; +} + /** * po_get - return the value of the rightmost instance of an option * @options: pointer to mount options diff --git a/utils/mount/parse_opt.h b/utils/mount/parse_opt.h index 5037207..0745e0f 100644 --- a/utils/mount/parse_opt.h +++ b/utils/mount/parse_opt.h @@ -45,6 +45,8 @@ po_return_t po_join(struct mount_options *, char **); po_return_t po_append(struct mount_options *, char *); po_found_t po_contains(struct mount_options *, char *); +po_found_t po_contains_prefix(struct mount_options *options, + const char *prefix, char **keyword); char * po_get(struct mount_options *, char *); po_found_t po_get_numeric(struct mount_options *, char *, long *); -- cgit