aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>2019-02-08 08:32:55 +0000
committerWerner Koch <[email protected]>2019-02-11 09:59:34 +0000
commitee8d1a9e6c09b3ecc4b46f47b79358f78d458916 (patch)
treea04241c54896acec7aa73ace2a7511dd21f06651
parentscd: Make app_genkey and supporting ISO function more flexible. (diff)
downloadgnupg-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.
-rw-r--r--common/server-help.c50
-rw-r--r--common/server-help.h8
-rw-r--r--common/stringhelp.c13
-rw-r--r--common/stringhelp.h1
4 files changed, 71 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 *
diff --git a/common/server-help.h b/common/server-help.h
index 9e3d7ada1..9d2f4cfba 100644
--- a/common/server-help.h
+++ b/common/server-help.h
@@ -55,6 +55,14 @@ int has_leading_option (const char *line, const char *name);
or a space. */
const char *has_option_name (const char *line, const char *name);
+/* Same as has_option_name but ignores all options after a "--" and
+ * does not return a const char ptr. */
+char *has_leading_option_name (char *line, const char *name);
+
+/* Parse an option with the format "--NAME=VALUE" and return the value
+ * as a malloced string. */
+gpg_error_t get_option_value (char *line, const char *name, char **r_value);
+
/* Return a pointer to the argument of the option with NAME. If such
an option is not given, NULL is returned. */
char *option_value (const char *line, const char *name);
diff --git a/common/stringhelp.c b/common/stringhelp.c
index 0abac8ae5..68fe99796 100644
--- a/common/stringhelp.c
+++ b/common/stringhelp.c
@@ -810,6 +810,19 @@ ascii_strlwr (char *s)
return s;
}
+/* Upcase all ASCII characters in S. */
+char *
+ascii_strupr (char *s)
+{
+ char *p = s;
+
+ for (p=s; *p; p++ )
+ if (isascii (*p) && *p >= 'a' && *p <= 'z')
+ *p &= ~0x20;
+
+ return s;
+}
+
int
ascii_strcasecmp( const char *a, const char *b )
{
diff --git a/common/stringhelp.h b/common/stringhelp.h
index 5b07af95e..7df6c7656 100644
--- a/common/stringhelp.h
+++ b/common/stringhelp.h
@@ -76,6 +76,7 @@ int ascii_islower (int c);
int ascii_toupper (int c);
int ascii_tolower (int c);
char *ascii_strlwr (char *s);
+char *ascii_strupr (char *s);
int ascii_strcasecmp( const char *a, const char *b );
int ascii_strncasecmp (const char *a, const char *b, size_t n);
int ascii_memcasecmp( const void *a, const void *b, size_t n );