| #include <u.h> |
| #include <libc.h> |
| #include "libString.h" |
| |
| #undef isspace |
| #define isspace(c) ((c)==' ' || (c)=='\t' || (c)=='\n') |
| |
| /* Get the next field from a String. The field is delimited by white space, |
| * single or double quotes. |
| */ |
| String * |
| s_parse(String *from, String *to) |
| { |
| if (*from->ptr == '\0') |
| return 0; |
| if (to == 0) |
| to = s_new(); |
| if (*from->ptr == '\'') { |
| from->ptr++; |
| for (;*from->ptr != '\'' && *from->ptr != '\0'; from->ptr++) |
| s_putc(to, *from->ptr); |
| if (*from->ptr == '\'') |
| from->ptr++; |
| } else if (*from->ptr == '"') { |
| from->ptr++; |
| for (;*from->ptr != '"' && *from->ptr != '\0'; from->ptr++) |
| s_putc(to, *from->ptr); |
| if (*from->ptr == '"') |
| from->ptr++; |
| } else { |
| for (;!isspace(*from->ptr) && *from->ptr != '\0'; from->ptr++) |
| s_putc(to, *from->ptr); |
| } |
| s_terminate(to); |
| |
| /* crunch trailing white */ |
| while(isspace(*from->ptr)) |
| from->ptr++; |
| |
| return to; |
| } |