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 | |
| 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]>
| -rw-r--r-- | src/conversion.c | 47 | ||||
| -rw-r--r-- | src/util.h | 9 | 
2 files changed, 56 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) @@ -124,6 +124,15 @@ gpgme_error_t _gpgme_decode_percent_string (const char *src, char **destp,  gpgme_error_t _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); + +/* 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);  /* Parse the string TIMESTAMP into a time_t.  The string may either be     seconds since Epoch or in the ISO 8601 format like | 
