diff options
Diffstat (limited to 'common/compliance.c')
-rw-r--r-- | common/compliance.c | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/common/compliance.c b/common/compliance.c index 14ba0970d..d81a50385 100644 --- a/common/compliance.c +++ b/common/compliance.c @@ -33,6 +33,7 @@ #include "openpgpdefs.h" #include "logging.h" #include "util.h" +#include "i18n.h" #include "compliance.h" /* Return true if ALGO with a key of KEYLENGTH is compliant to the @@ -210,3 +211,35 @@ gnupg_status_compliance_flag (enum gnupg_compliance_mode compliance) } log_assert (!"invalid compliance mode"); } + + +/* Parse the value of --compliance. Returns the value corresponding + * to the given STRING according to OPTIONS of size LENGTH, or -1 + * indicating that the lookup was unsuccessful, or the list of options + * was printed. If quiet is false, an additional hint to use 'help' + * is printed on unsuccessful lookups. */ +int +gnupg_parse_compliance_option (const char *string, + struct gnupg_compliance_option options[], + size_t length, + int quiet) +{ + size_t i; + + if (! ascii_strcasecmp (string, "help")) + { + log_info (_ ("valid values for option '%s':\n"), "--compliance"); + for (i = 0; i < length; i++) + log_info (" %s\n", options[i].keyword); + return -1; + } + + for (i = 0; i < length; i++) + if (! ascii_strcasecmp (string, options[i].keyword)) + return options[i].value; + + log_error (_ ("invalid value for option '%s'\n"), "--compliance"); + if (! quiet) + log_info (_ ("(use \"help\" to list choices)\n")); + return -1; +} |