Blob


1 #include <u.h>
2 #include <libc.h>
3 #include "libString.h"
5 #define isspace(c) ((c)==' ' || (c)=='\t' || (c)=='\n')
7 /* Get the next field from a String. The field is delimited by white space,
8 * single or double quotes.
9 */
10 String *
11 s_parse(String *from, String *to)
12 {
13 if (*from->ptr == '\0')
14 return 0;
15 if (to == 0)
16 to = s_new();
17 if (*from->ptr == '\'') {
18 from->ptr++;
19 for (;*from->ptr != '\'' && *from->ptr != '\0'; from->ptr++)
20 s_putc(to, *from->ptr);
21 if (*from->ptr == '\'')
22 from->ptr++;
23 } else if (*from->ptr == '"') {
24 from->ptr++;
25 for (;*from->ptr != '"' && *from->ptr != '\0'; from->ptr++)
26 s_putc(to, *from->ptr);
27 if (*from->ptr == '"')
28 from->ptr++;
29 } else {
30 for (;!isspace(*from->ptr) && *from->ptr != '\0'; from->ptr++)
31 s_putc(to, *from->ptr);
32 }
33 s_terminate(to);
35 /* crunch trailing white */
36 while(isspace(*from->ptr))
37 from->ptr++;
39 return to;
40 }