M alphapc/devfloppy.c => alphapc/devfloppy.c +1 -1
@@ 911,7 911,7 @@ floppyformat(FDrive *dp, char *params)
/*
* set the type
*/
- if(parsefields(params, f, 3, " ") > 1){
+ if(getfields(params, f, 3, 1, " ") > 1){
for(t = floppytype; t < &floppytype[nelem(floppytype)]; t++){
if(strcmp(f[1], t->name)==0 && t->dt==dp->dt){
dp->t = t;
M alphapc/devvga.c => alphapc/devvga.c +1 -1
@@ 157,7 157,7 @@ vgactl(char* a)
extern VGAdev *vgadev[];
extern VGAcur *vgacur[];
- n = parsefields(a, field, 4, " ");
+ n = getfields(a, field, 4, 1, " ");
if(n < 2)
error(Ebadarg);
M boot/aux.c => boot/aux.c +0 -17
@@ 171,20 171,3 @@ outin(char *prompt, char *def, int len)
}
return n;
}
-
-int
-parsefields(char *lp, char **fields, int n, char *sep)
-{
- int i;
-
- for(i=0; lp && *lp && i<n; i++){
- while(*lp && strchr(sep, *lp) != 0)
- *lp++=0;
- if(*lp == 0)
- break;
- fields[i]=lp;
- while(*lp && strchr(sep, *lp) == 0)
- lp++;
- }
- return i;
-}
M boot/boot.c => boot/boot.c +1 -1
@@ 210,7 210,7 @@ rootserver(char *arg)
outin(prompt, reply, sizeof(reply));
mp = findmethod(reply);
if(mp){
- bargc = parsefields(reply, bargv, Nbarg-1, " ");
+ bargc = getfields(reply, bargv, Nbarg-1, 1, " ");
cp = strchr(reply, '!');
if(cp)
strcpy(sys, cp+1);
M ip/arp.c => ip/arp.c +1 -1
@@ 271,7 271,7 @@ arpwrite(Fs *fs, char *s, int len)
if(len > 0 && buf[len-1] == '\n')
buf[len-1] = 0;
- n = parsefields(buf, f, 4, " ");
+ n = getfields(buf, f, 4, 1, " ");
if(strcmp(f[0], "flush") == 0){
qlock(arp);
for(a = arp->cache; a < &arp->cache[NCACHE]; a++){
M ip/bootp.c => ip/bootp.c +1 -1
@@ 81,7 81,7 @@ rcvbootp(void *a)
rp = (Bootp*)rcvbuf;
if(memcmp(req.chaddr, rp->chaddr, 6) == 0
&& rp->htype == 1 && rp->hlen == 6
- && parsefields((char*)rp->vend+4, field, 4, " ") == 4
+ && getfields((char*)rp->vend+4, field, 4, 1, " ") == 4
&& strncmp((char*)rp->vend, "p9 ", 4) == 0){
if(ipaddr == 0)
ipaddr = nhgetl(rp->yiaddr);
M ip/ipmux.c => ip/ipmux.c +2 -2
@@ 264,7 264,7 @@ parsemux(char *p)
}
/* parse vals */
- f->n = parsefields(val, vals, sizeof(vals)/sizeof(char*), "|");
+ f->n = getfields(val, vals, sizeof(vals)/sizeof(char*), 1, "|");
if(f->n == 0)
goto parseerror;
f->val = smalloc(f->n*f->len);
@@ 540,7 540,7 @@ ipmuxconnect(Conv *c, char **argv, int argc)
if(argc != 2)
return Ebadarg;
- n = parsefields(argv[1], field, nelem(field), ";");
+ n = getfields(argv[1], field, nelem(field), 1, ";");
if(n <= 0)
return Ebadarg;
M ip/netlog.c => ip/netlog.c +1 -1
@@ 167,7 167,7 @@ netlogctl(Fs *f, char* s, int len)
if(len > 0 && buf[len-1] == '\n')
buf[len-1] = 0;
- n = parsefields(buf, fields, 10, " ");
+ n = getfields(buf, fields, 10, 1, " ");
if(n < 2)
return Ebadnetctl;
M pc/devata.c => pc/devata.c +6 -6
@@ 1582,12 1582,12 @@ atareplinit(Drive *dp)
/*
* parse replacement table.
*/
- n = parsefields((char*)buf, line, Nrepl+1, "\n");
+ n = getfields((char*)buf, line, Nrepl+1, 1, "\n");
if(strncmp(line[0], REPLMAGIC, sizeof(REPLMAGIC)-1)){
dp->repl.p = 0;
} else {
for(dp->repl.nrepl = 0, i = 1; i < n; i++, dp->repl.nrepl++){
- if(parsefields(line[i], field, 1, " ") != 1)
+ if(getfields(line[i], field, 1, 1, " ") != 1)
break;
dp->repl.blk[dp->repl.nrepl] = strtoul(field[0], 0, 0);
if(dp->repl.blk[dp->repl.nrepl] <= 0)
@@ 1663,13 1663,13 @@ atapart(Drive *dp)
ataxfer(dp, &dp->p[0], Cread, (dp->p[0].end-2)*
(vlong)dp->bytes, dp->bytes, buf);
buf[dp->bytes-1] = 0;
- n = parsefields((char*)buf, line, Npart+1, "\n");
+ n = getfields((char*)buf, line, Npart+1, 1, "\n");
if(n > 0 && strncmp(line[0], PARTMAGIC, sizeof(PARTMAGIC)-1) == 0)
i = 1;
else{
ataxfer(dp, &dp->p[1], Cread, 0, dp->bytes, buf);
buf[dp->bytes-1] = 0;
- n = parsefields((char*)buf, line, Npart+1, "\n");
+ n = getfields((char*)buf, line, Npart+1, 1, "\n");
if(n == 0 || strncmp(line[0], PARTMAGIC, sizeof(PARTMAGIC)-1))
i = 1;
}
@@ 1681,7 1681,7 @@ atapart(Drive *dp)
}
else{
strcpy((char*)buf, p);
- n = parsefields((char*)buf, line, Npart+1, "\n");
+ n = getfields((char*)buf, line, Npart+1, 1, "\n");
}
/*
@@ 1689,7 1689,7 @@ atapart(Drive *dp)
*/
if(n > 0 && strncmp(line[0], PARTMAGIC, sizeof(PARTMAGIC)-1) == 0){
for(i = 1; i < n; i++){
- if(parsefields(line[i], field, 3, " ") != 3)
+ if(getfields(line[i], field, 3, 1, " ") != 3)
break;
if(pp >= &dp->p[Npart])
break;
M pc/devfloppy.c => pc/devfloppy.c +1 -1
@@ 880,7 880,7 @@ floppyformat(FDrive *dp, char *params)
/*
* set the type
*/
- if(parsefields(params, f, 3, " ") > 1){
+ if(getfields(params, f, 3, 1, " ") > 1){
for(t = floppytype; t < &floppytype[nelem(floppytype)]; t++){
if(strcmp(f[1], t->name)==0 && t->dt==dp->dt){
dp->t = t;
M pc/devusb.c => pc/devusb.c +2 -32
@@ 1776,36 1776,6 @@ writeusb(Endpt *e, void *a, long n, int tok)
return p-(uchar*)a;
}
-int
-getfields(char *ss, char **sp, int nptrs)
-{
- uchar *s = (uchar*)ss;
- uchar **p = (uchar**)sp;
- uint c;
-
- c = 0;
- for(;;){
- if(--nptrs < 0)
- break;
- *p++ = s;
- do {
- c = *s++;
- if (c == ' ') break;
- if (c == '\t') break;
- if (c == '\n') break;
- } while(c);
- if(c == 0)
- break;
- s[-1] = 0;
- }
- if(nptrs > 0)
- *p = 0;
- else
- if(--s >= (uchar*)ss)
- *s = c;
- return p - (uchar**)sp;
-}
-
long
usbwrite(Chan *c, void *a, long n, vlong)
{
@@ 1822,7 1792,7 @@ usbwrite(Chan *c, void *a, long n, vlong)
n = sizeof(cmd)-1;
memmove(cmd, a, n);
cmd[n] = 0;
- nf = getfields(cmd, fields, nelem(fields));
+ nf = getfields(cmd, fields, nelem(fields), 0, " \t\n");
if(nf==1 && strcmp(fields[0], "dump")==0){
dumpframe(-1, -1);
return n;
@@ 1850,7 1820,7 @@ usbwrite(Chan *c, void *a, long n, vlong)
n = sizeof(cmd)-1;
memmove(cmd, a, n);
cmd[n] = 0;
- nf = getfields(cmd, fields, nelem(fields));
+ nf = getfields(cmd, fields, nelem(fields), 0, " \t\n");
if(nf > 1 && strcmp(fields[0], "speed") == 0){
d->ls = strtoul(fields[1], nil, 0) == 0;
} else if(nf > 5 && strcmp(fields[0], "class") == 0){
M pc/devvga.c => pc/devvga.c +1 -1
@@ 142,7 142,7 @@ vgactl(char* a)
extern VGAcur *vgacur[];
Rectangle r;
- n = parsefields(a, field, nelem(field), " ");
+ n = getfields(a, field, nelem(field), 1, " ");
if(n < 1)
error(Ebadarg);
M port/devaudio.c => port/devaudio.c +1 -1
@@ 1081,7 1081,7 @@ audiowrite(Chan *c, void *vp, long n, vlong)
memmove(buf, a, n);
buf[n] = '\0';
- nf = parsefields(buf, field, Ncmd, " \t\n");
+ nf = getfields(buf, field, Ncmd, 1, " \t\n");
for(i = 0; i < nf; i++){
/*
* a number is volume
M port/devdraw.c => port/devdraw.c +1 -1
@@ 1145,7 1145,7 @@ drawwrite(Chan *c, void *a, long n, vlong off)
a = (char*)a + i;
m -= i;
*q = 0;
- if(parsefields(buf, fields, nelem(fields), " ") != 4)
+ if(getfields(buf, fields, nelem(fields), 1, " ") != 4)
error("eb1"); //error(Ebadarg);
i = strtoul(fields[0], 0, 0);
red = strtoul(fields[1], 0, 0);
M port/devmouse.c => port/devmouse.c +1 -1
@@ 311,7 311,7 @@ mousewrite(Chan *c, void *va, long n, vlong)
buf[n-1] = 0;
else
buf[n] = 0;
- nf = parsefields(buf, field, 3, " ");
+ nf = getfields(buf, field, 3, 1, " ");
if(strcmp(field[0], "swap") == 0){
if(mouseswap)
setbuttonmap("123");
M port/devsd.c => port/devsd.c +3 -3
@@ 350,12 350,12 @@ sdrdpart(Disk *d)
*/
scsibio(d->t, d->lun, SCSIread, b, 1, d->bsize, d->table[0].end-2);
b[d->bsize-1] = '\0';
- n = parsefields(b, line, nelem(line), "\n");
+ n = getfields(b, line, nelem(line), 1, "\n");
if(n <= 0 || strncmp(line[0], MAGIC, sizeof(MAGIC)-1) != 0){
/* try the last */
scsibio(d->t, d->lun, SCSIread, b, 1, d->bsize, d->table[0].end-1);
b[d->bsize-1] = '\0';
- n = parsefields(b, line, nelem(line), "\n");
+ n = getfields(b, line, nelem(line), 1, "\n");
/* only point partition file at last sector if there is one there */
if(n > 0 && strncmp(line[0], MAGIC, sizeof(MAGIC)-1) == 0){
d->table[1].beg++;
@@ 368,7 368,7 @@ sdrdpart(Disk *d)
*/
if(n > 0 && strncmp(line[0], MAGIC, sizeof(MAGIC)-1) == 0) {
for(i = 1; i < n; i++) {
- if(parsefields(line[i], field, nelem(field), " ") != 3)
+ if(getfields(line[i], field, nelem(field), 1, " ") != 3)
break;
if(p >= &d->table[Npart])
break;
M port/lib.h => port/lib.h +1 -0
@@ 77,6 77,7 @@ extern uvlong strtoull(char*, char**, int);
extern char etext[];
extern char edata[];
extern char end[];
+extern int getfields(char*, char**, int, int, char*);
/*
* Syscall data structures
M port/parse.c => port/parse.c +1 -18
@@ 5,23 5,6 @@
#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<n; i++){
- while(*lp && strchr(sep, *lp) != 0)
- *lp++=0;
- if(*lp == 0)
- break;
- fields[i]=lp;
- while(*lp && strchr(sep, *lp) == 0)
- lp++;
- }
- return i;
-}
-
/*
* parse a command written to a device
*/
@@ 38,7 21,7 @@ parsecmd(char *p, int n)
if(n > 0 && cb->buf[n-1] == '\n')
n--;
cb->buf[n] = '\0';
- cb->nf = parsefields(cb->buf, cb->f, nelem(cb->f), " ");
+ cb->nf = getfields(cb->buf, cb->f, nelem(cb->f), 1, " ");
return cb;
}
M port/portfns.h => port/portfns.h +2 -4
@@ 114,8 114,8 @@ void freepte(Segment*, Pte*);
void freesegs(int);
void freesession(Session*);
void getcolor(ulong, ulong*, ulong*, ulong*);
-ulong getmalloctag(void*);
-ulong getrealloctag(void*);
+ulong getmalloctag(void*);
+ulong getrealloctag(void*);
void gotolabel(Label*);
int haswaitq(void*);
long hostdomainwrite(char*, int);
@@ 191,8 191,6 @@ void pagechainhead(Page*);
void pageinit(void);
void pagersummary(void);
void panic(char*, ...);
-int parseether(uchar*, char*);
-int parsefields(char*, char**, int, char*);
Cmdbuf* parsecmd(char *a, int n);
void pexit(char*, int);
void pgrpcpy(Pgrp*, Pgrp*);