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