diff options
author | Werner Koch <[email protected]> | 2019-02-08 08:32:55 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 2019-02-11 09:59:34 +0000 |
commit | ee8d1a9e6c09b3ecc4b46f47b79358f78d458916 (patch) | |
tree | a04241c54896acec7aa73ace2a7511dd21f06651 /common/server-help.c | |
parent | scd: Make app_genkey and supporting ISO function more flexible. (diff) | |
download | gnupg-ee8d1a9e6c09b3ecc4b46f47b79358f78d458916.tar.gz gnupg-ee8d1a9e6c09b3ecc4b46f47b79358f78d458916.zip |
common: New functions get_option_value and ascii_strupr.
* common/server-help.c (get_option_value): New.
* common/stringhelp.c (ascii_strupr): New.
--
Signed-off-by: Werner Koch <[email protected]>
(cherry picked from commit e2f18023b3b3b7e55b35218f65e37448d1011172)
This might come handy when we eventually backport other changes.
Diffstat (limited to 'common/server-help.c')
-rw-r--r-- | common/server-help.c | 50 |
1 files changed, 49 insertions, 1 deletions
diff --git a/common/server-help.c b/common/server-help.c index 53a888a86..e5a69e02d 100644 --- a/common/server-help.c +++ b/common/server-help.c @@ -30,8 +30,22 @@ #include <config.h> #include <string.h> -#include "server-help.h" #include "util.h" +#include "server-help.h" + + +static GPGRT_INLINE gpg_error_t +my_error (int e) +{ + return gpg_err_make (default_errsource, (e)); +} + +static GPGRT_INLINE gpg_error_t +my_error_from_syserror (void) +{ + return gpg_err_make (default_errsource, gpg_err_code_from_syserror ()); +} + /* Skip over options in LINE. @@ -114,6 +128,40 @@ has_option_name (const char *line, const char *name) } +/* Parse an option with the format "--NAME=VALUE" which must occur in + * LINE before a double-dash. LINE is written to but not modified by + * this function. If the option is found and has a value the value is + * stored as a malloced string at R_VALUE. If the option was not + * found or an error occurred NULL is stored there. Note that + * currently the value must be a string without any space; we may + * eventually update this function to allow for a quoted value. */ +gpg_error_t +get_option_value (char *line, const char *name, char **r_value) +{ + char *p, *pend; + int c; + + *r_value = NULL; + + p = (char*)has_option_name (line, name); + if (!p || p >= skip_options (line)) + return 0; + + if (*p != '=' || !p[1] || spacep (p+1)) + return my_error (GPG_ERR_INV_ARG); + p++; + for (pend = p; *pend && !spacep (pend); pend++) + ; + c = *pend; + *pend = 0; + *r_value = xtrystrdup (p); + *pend = c; + if (!p) + return my_error_from_syserror (); + return 0; +} + + /* Return a pointer to the argument of the option with NAME. If such an option is not given, NULL is returned. */ char * |