diff options
author | Werner Koch <[email protected]> | 2016-05-21 08:21:06 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 2016-05-21 08:31:20 +0000 |
commit | a92946a8cacc44f655249d84b316deae59e62671 (patch) | |
tree | a3b25f4cef4cb6ab3cfdb5940d92f714949a88e9 /src/conversion.c | |
parent | Qt: Add test for changeownertrust (diff) | |
download | gpgme-a92946a8cacc44f655249d84b316deae59e62671.tar.gz gpgme-a92946a8cacc44f655249d84b316deae59e62671.zip |
core: New functions to help parsing of status lines.
* src/conversion.c (_gpgme_split_fields): New.
(_gpgme_strtoul_field): New.
--
Signed-off-by: Werner Koch <[email protected]>
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) |