## diffname port/parse.c 1999/0316 ## diff -e /dev/null /n/emeliedump/1999/0316/sys/src/brazil/port/parse.c 0a #include "u.h" #include "../port/lib.h" #include "mem.h" #include "dat.h" #include "fns.h" #include "../port/error.h" int parsefields(char *lp, char **fields, int n, char *sep) { int i; for(i=0; lp && *lp && i sizeof(cb->buf)-1) n = sizeof(cb->buf)-1; memmove(cb->buf, p, n); if(n > 0 && cb->buf[n-1] == '\n') n--; cb->buf[n] = '\0'; cb->nf = parsefields(cb->buf, cb->f, nelem(cb->f), " "); return cb; } . ## diffname port/parse.c 2000/0308 ## diff -e /n/emeliedump/1999/0316/sys/src/brazil/port/parse.c /n/emeliedump/2000/0308/sys/src/9/port/parse.c 41c cb->nf = getfields(cb->buf, cb->f, nelem(cb->f), 1, " "); . 8,24d ## diffname port/parse.c 2001/0331 ## diff -e /n/emeliedump/2000/0308/sys/src/9/port/parse.c /n/emeliedump/2001/0331/sys/src/9/port/parse.c 20a poperror(); . 19a if(waserror()){ free(cb); nexterror(); } . 14c Cmdbuf *volatile cb; . ## diffname port/parse.c 2001/0405 ## diff -e /n/emeliedump/2001/0331/sys/src/9/port/parse.c /n/emeliedump/2001/0405/sys/src/9/port/parse.c 26c if(up != nil) poperror(); . 21c if(up != nil && waserror()){ . 16c if(up != nil) cb = smalloc(sizeof(*cb)); else{ cb = malloc(sizeof(*cb)); if(cb == nil) return nil; } . ## diffname port/parse.c 2001/0418 ## diff -e /n/emeliedump/2001/0405/sys/src/9/port/parse.c /n/emeliedump/2001/0418/sys/src/9/port/parse.c 38c cb->nf = tokenize(cb->buf, cb->f, nelem(cb->f)); . ## diffname port/parse.c 2001/0527 ## diff -e /n/emeliedump/2001/0418/sys/src/9/port/parse.c /n/emeliedump/2001/0527/sys/src/9/port/parse.c 38c cb->nf = getfields(cb->buf, cb->f, nelem(cb->f), 1, " "); . 27c if(up!=nil && waserror()){ . 16,22c cb = smalloc(sizeof(*cb)); . ## diffname port/parse.c 2001/1108 ## diff -e /n/emeliedump/2001/0527/sys/src/9/port/parse.c /n/emeliedump/2001/1108/sys/src/9/port/parse.c 32c cb->nf = getfields(cb->buf, cb->f, nf, 1, " "); . 28a /* dump new line and null terminate */ . 16,19c /* count fields and allocate a big enough cmdbuf */ for(nf = 1, sp = p; sp != nil && *sp; nf++, sp = strchr(sp+1, ' ')) ; sp = smalloc(sizeof(*cb) + n + 1 + nf*sizeof(char*)); cb = (Cmdbuf*)sp; cb->buf = sp+sizeof(*cb); cb->f = (char**)(cb->buf + n + 1); . 14a int nf; char *sp; . ## diffname port/parse.c 2001/1117 ## diff -e /n/emeliedump/2001/1108/sys/src/9/port/parse.c /n/emeliedump/2001/1117/sys/src/9/port/parse.c 39c cb->nf = tokenize(cb->buf, cb->f, nf-1); cb->f[cb->nf] = nil; . 23,24c cb->f = (char**)(&cb[1]); cb->buf = (char*)(&cb->f[nf]); . 18,21c nf = ncmdfield(p, n); /* allocate Cmdbuf plus string pointers plus copy of string including \0 */ sp = smalloc(sizeof(*cb) + nf * sizeof(char*) + n + 1); . 8a * Generous estimate of number of fields, including terminal nil pointer */ static int ncmdfield(char *p, int n) { int white, nwhite; char *ep; int nf; if(p == nil) return 1; nf = 0; ep = p+n; white = 1; /* first text will start field */ while(p < ep){ nwhite = (strchr(" \t\r\n", *p++ & 0xFF) != 0); /* UTF is irrelevant */ if(white && !nwhite) /* beginning of field */ nf++; white = nwhite; } return nf+1; /* +1 for nil */ } /* . ## diffname port/parse.c 2001/1118 ## diff -e /n/emeliedump/2001/1117/sys/src/9/port/parse.c /n/emeliedump/2001/1118/sys/src/9/port/parse.c 69a /* * Look up entry in table */ Cmdtab* lookupcmd(Cmdbuf *cb, Cmdtab *ct, int nct) { int i; if(cb->nf == 0) error(Ebadctl); for(i=0; if[0], ct->cmd) != 0) continue; if(ct->narg!=0 && ct->narg!=cb->nf) error(Eargctl); return ct; } error(Ebadctl); return nil; } . ## diffname port/parse.c 2001/1120 ## diff -e /n/emeliedump/2001/1118/sys/src/9/port/parse.c /n/emeliedump/2001/1120/sys/src/9/port/parse.c 88c cmderror(cb, "unknown control message"); . 84,85c if(ct->narg != 0 && ct->narg != cb->nf) cmderror(cb, Ecmdargs); . 81,82c for(ct = ctab, i=0; icmd, "*") !=0) /* wildcard always matches */ if(strcmp(ct->cmd, cb->f[0]) != 0) . 79c error("empty control message"); . 76a Cmdtab *ct; . 74c lookupcmd(Cmdbuf *cb, Cmdtab *ctab, int nctab) . 70a * Reconstruct original message, for error diagnostic */ void cmderror(Cmdbuf *cb, char *s) { int i; char *p, *e; p = up->genbuf; e = p+ERRMAX-10; p = seprint(p, e, "%s \"", s); for(i=0; inf; i++){ if(i > 0) p = seprint(p, e, " "); p = seprint(p, e, "%q", cb->f[i]); } strcpy(p, "\""); error(up->genbuf); } /* .