diff options
author | Chuck Lever <chuck.lever@oracle.com> | 2008-12-17 14:21:10 -0500 |
---|---|---|
committer | Steve Dickson <steved@redhat.com> | 2008-12-17 14:21:10 -0500 |
commit | b5009d23525181846777349f2fc0e4a72b89d24d (patch) | |
tree | 62eb84001cfcd439ee4170e9fffa5597710750f8 /utils/mount/parse_opt.c | |
parent | eb3a145789b9eedd39b56e1d76f412435abaa747 (diff) | |
download | nfs-utils-b5009d23525181846777349f2fc0e4a72b89d24d.tar.gz nfs-utils-b5009d23525181846777349f2fc0e4a72b89d24d.tar.xz nfs-utils-b5009d23525181846777349f2fc0e4a72b89d24d.zip |
text-based mount command: add function to parse numeric mount options
Introduce a function that is especially for parsing keyword mount options
that take a numeric value.
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
Diffstat (limited to 'utils/mount/parse_opt.c')
-rw-r--r-- | utils/mount/parse_opt.c | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/utils/mount/parse_opt.c b/utils/mount/parse_opt.c index cb398bd..f61d0dd 100644 --- a/utils/mount/parse_opt.c +++ b/utils/mount/parse_opt.c @@ -36,6 +36,10 @@ */ +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + #include <ctype.h> #include <unistd.h> #include <stdio.h> @@ -366,6 +370,57 @@ char *po_get(struct mount_options *options, char *keyword) } /** + * po_get_numeric - return numeric value of rightmost instance of keyword option + * @options: pointer to mount options + * @keyword: pointer to a C string containing option keyword for which to search + * @value: OUT: set to the value of the keyword + * + * This is specifically for parsing keyword options that take only a numeric + * value. If multiple instances of the same option are present in a mount + * option list, the rightmost instance is always the effective one. + * + * Returns: + * * PO_FOUND if the keyword was found and the value is numeric; @value is + * set to the keyword's value + * * PO_NOT_FOUND if the keyword was not found + * * PO_BAD_VALUE if the keyword was found, but the value is not numeric + * + * These last two are separate in case the caller wants to warn about bad mount + * options instead of silently using a default. + */ +#ifdef HAVE_STRTOL +po_found_t po_get_numeric(struct mount_options *options, char *keyword, long *value) +{ + char *option, *endptr; + long tmp; + + option = po_get(options, keyword); + if (option == NULL) + return PO_NOT_FOUND; + + errno = 0; + tmp = strtol(option, &endptr, 10); + if (errno == 0 && endptr != option) { + *value = tmp; + return PO_FOUND; + } + return PO_BAD_VALUE; +} +#else /* HAVE_STRTOL */ +po_found_t po_get_numeric(struct mount_options *options, char *keyword, long *value) +{ + char *option; + + option = po_get(options, keyword); + if (option == NULL) + return PO_NOT_FOUND; + + *value = atoi(option); + return PO_FOUND; +} +#endif /* HAVE_STRTOL */ + +/** * po_rightmost - determine the relative position of two options * @options: pointer to mount options * @key1: pointer to a C string containing an option keyword |