X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/mLib/blobdiff_plain/081e681557eb1b6223fe8f4e2551c506cd0d2d3c..8e94a44e0eacbec394bc93d87db275295e7a670d:/str.c diff --git a/str.c b/str.c index 51a9805..b6e4813 100644 --- a/str.c +++ b/str.c @@ -1,6 +1,6 @@ /* -*-c-*- * - * $Id: str.c,v 1.1 1999/05/17 20:37:01 mdw Exp $ + * $Id: str.c,v 1.2 1999/05/26 20:52:57 mdw Exp $ * * Functions for hacking with strings * @@ -30,6 +30,9 @@ /*----- Revision history --------------------------------------------------* * * $Log: str.c,v $ + * Revision 1.2 1999/05/26 20:52:57 mdw + * Add new `rest' argument for `str_split'. + * * Revision 1.1 1999/05/17 20:37:01 mdw * Some trivial string hacks. * @@ -83,6 +86,7 @@ char *str_getword(char **pp) * Arguments: @char *p@ = pointer to string * @char *v[]@ = pointer to array to fill in * @size_t c@ = count of strings to fill in + * @char **rest@ = where to store the remainder of the string * * Returns: Number of strings filled in. * @@ -92,10 +96,12 @@ char *str_getword(char **pp) * and trailing space stripped off. No more than @c@ words * are read; the actual number is returned as the value of the * function. Unused slots in the array are populated with - * null bytes. + * null bytes. If there's any string left, the address of the + * remainder is stored in @rest@ (if it's non-null); otherwise + * @rest@ is set to a null pointer. */ -size_t str_split(char *p, char *v[], size_t c) +size_t str_split(char *p, char *v[], size_t c, char **rest) { size_t n = 0; char *q; @@ -110,6 +116,19 @@ size_t str_split(char *p, char *v[], size_t c) *v++ = 0; c--; } + + if (rest) { + if (!p) + *rest = 0; + else { + while (isspace((unsigned char)*p)) + p++; + if (*p) + *rest = p; + else + *rest = 0; + } + } return (n); }