aboutsummaryrefslogtreecommitdiffstats
path: root/src/conversion.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/conversion.c')
-rw-r--r--src/conversion.c47
1 files changed, 47 insertions, 0 deletions
diff --git a/src/conversion.c b/src/conversion.c
index 0992225b..c2b27a16 100644
--- a/src/conversion.c
+++ b/src/conversion.c
@@ -317,6 +317,53 @@ _gpgme_encode_percent_string (const char *src, char **destp, size_t len)
}
+/* Split a string into space delimited fields and remove leading and
+ * trailing spaces from each field. A pointer to the each field is
+ * stored in ARRAY. Stop splitting at ARRAYSIZE fields. The function
+ * modifies STRING. The number of parsed fields is returned.
+ */
+int
+_gpgme_split_fields (char *string, char **array, int arraysize)
+{
+ int n = 0;
+ char *p, *pend;
+
+ for (p = string; *p == ' '; p++)
+ ;
+ do
+ {
+ if (n == arraysize)
+ break;
+ array[n++] = p;
+ pend = strchr (p, ' ');
+ if (!pend)
+ break;
+ *pend++ = 0;
+ for (p = pend; *p == ' '; p++)
+ ;
+ }
+ while (*p);
+
+ return n;
+}
+
+/* Convert the field STRING into an unsigned long value. Check for
+ * trailing garbage. */
+gpgme_error_t
+_gpgme_strtoul_field (const char *string, unsigned long *result)
+{
+ char *endp;
+
+ gpg_err_set_errno (0);
+ *result = strtoul (string, &endp, 0);
+ if (errno)
+ return gpg_error_from_syserror ();
+ if (endp == string || *endp)
+ return gpg_error (GPG_ERR_INV_VALUE);
+ return 0;
+}
+
+
#ifdef HAVE_W32_SYSTEM
static time_t
_gpgme_timegm (struct tm *tm)