diff options
Diffstat (limited to 'src/conversion.c')
-rw-r--r-- | src/conversion.c | 47 |
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) |