diff --git a/sys/man/8/getflags b/sys/man/8/getflags index b0ea40835..457c0c2c7 100644 --- a/sys/man/8/getflags +++ b/sys/man/8/getflags @@ -71,7 +71,7 @@ The description of positional argument list is taken from An example of the script generated: .IP .EX -% flagfmt='e:example,x,a:arg with args' +% flagfmt='e:example, x, a:arg with args' % aux/getflags -exa arg list positional stuff example=() flagx=() @@ -87,7 +87,7 @@ Parse the arguments for .IR leak (1): .IP .EX -flagfmt='b:showbmp,s:acidfmt,f binary,r res,x width' +flagfmt='b:showbmp, s:acidfmt, f binary, r res, x width' args='name | pid list' if(! ifs=() eval `{aux/getflags $*} || ~ $#* 0){ aux/usage diff --git a/sys/src/cmd/aux/getflags.c b/sys/src/cmd/aux/getflags.c index 880f0dc38..b6bc913f1 100644 --- a/sys/src/cmd/aux/getflags.c +++ b/sys/src/cmd/aux/getflags.c @@ -9,18 +9,39 @@ usage(void) exits(0); } +char* +skipspace(char *p) +{ + while(isspace(*p)) + p++; + return p; +} + +char* +nextarg(char *p) +{ + char *s; + + s = strchr(p, ','); + if(s == nil) + return p+strlen(p); /* to \0 */ + while(*s == ',' || isspace(*s)) + s++; + return s; +} + char* findarg(char *flags, Rune r) { char *p; Rune rr; - - for(p=flags; p!=(char*)1; p=strchr(p, ',')+1){ + + for(p=skipspace(flags); *p; p=nextarg(p)){ chartorune(&rr, p); if(rr == r) return p; } - return nil; + return nil; } char* @@ -44,10 +65,9 @@ countargs(char *p) int n; n = 1; - while(*p == ' ') - p++; - for(; *p && *p != ','; p++) - if(*p == ' ' && *(p-1) != ' ') + print("%s\n", p); + for(p=skipspace(p); *p && *p != ','; p++) + if(isspace(*p) && !isspace(*(p-1))) n++; return n; } @@ -71,7 +91,7 @@ main(int argc, char *argv[]) } fmtfdinit(&fmt, 1, buf, sizeof buf); - for(p=flags; p!=(char*)1 && *p != 0; p=strchr(p, ',')+1){ + for(p=skipspace(flags); *p; p=nextarg(p)){ s = e = nil; if(p[1] == ':'){ s = p + 2; diff --git a/sys/src/cmd/aux/usage.c b/sys/src/cmd/aux/usage.c index a2f8c7c2c..fa9d0b1c7 100644 --- a/sys/src/cmd/aux/usage.c +++ b/sys/src/cmd/aux/usage.c @@ -1,5 +1,6 @@ #include #include +#include void main(void) @@ -30,9 +31,11 @@ main(void) if(flags[0]){ single = 0; for(p=flags; *p; ){ + while(isspace(*p)) + p++; p += chartorune(&r, p); if(*p == ':') - while(*p != '\0' && *p != ',' && *p != ' ') + while(*p && *p != ',' && !isspace(*p)) p++; if(*p == ',' || *p == 0){ if(!single){ @@ -44,7 +47,7 @@ main(void) p++; continue; } - while(*p == ' ') + while(isspace(*p)) p++; if(single){ fmtprint(&fmt, "]");