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:
parent
eaf2d018e6
commit
a92946a8ca
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user