Blame


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