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