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 <wk@gnupg.org>
This commit is contained in:
Werner Koch 2016-05-21 10:21:06 +02:00
parent eaf2d018e6
commit a92946a8ca
No known key found for this signature in database
GPG Key ID: E3FDFF218E45B72B
2 changed files with 56 additions and 0 deletions

View File

@ -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)

View File

@ -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