this allows 2047-encoded atoms sepearted by only whitespace to be pasted together, as the rfc requires. the usage string was corrected and upas/fs will now complain about extra arguments. i'm including the test examples from rfc-2047 as rfc2047-test Notes: Sat Apr 1 22:03:12 EST 2006 rsc thanks. i put the test file in the distribution too. Reference: /n/sources/patch/applied/upas-2047 Date: Sun Apr 2 04:55:06 CES 2006 Signed-off-by: quanstro@quanstro.net Reviewed-by: rsc --- /sys/src/cmd/upas/fs/fs.c Sun Apr 2 04:50:52 2006 +++ /sys/src/cmd/upas/fs/fs.c Sun Apr 2 04:50:31 2006 @@ -2,6 +2,7 @@ #include #include #include +#include #include "dat.h" enum @@ -139,7 +140,7 @@ void usage(void) { - fprint(2, "usage: %s [-b -m mountpoint]\n", argv0); + fprint(2, "usage: upas/fs [-bdlnps] [-f mboxfile] [-m mountpoint]\n"); exits("usage"); } @@ -176,10 +177,10 @@ break; case 'f': fflag = 1; - mboxfile = ARGF(); + mboxfile = EARGF(usage()); break; case 'm': - mntpt = ARGF(); + mntpt = EARGF(usage()); break; case 'd': debug = 1; @@ -200,6 +201,8 @@ usage(); }ARGEND + if(argc) + usage(); if(pipe(p) < 0) error("pipe failed"); mfd[0] = p[0]; @@ -1432,21 +1435,20 @@ String* stringconvert(String *s, char *uneaten, int len) { - char *token; - char *p; - int i; + char *token, *p, *e; s = s_reset(s); p = uneaten; - for(i = 0; i < len; i++){ - if(*p++ == '='){ - token = rfc2047start(uneaten, p); - if(token != nil){ - s_nappend(s, uneaten, token-uneaten); - if(rfc2047convert(s, token, p - token) < 0) - s_nappend(s, token, p - token); - uneaten = p; - } + for(e = p+len; p < e; ){ + while(*p++ == '=' && (token = rfc2047start(uneaten, p))){ + s_nappend(s, uneaten, token-uneaten); + if(rfc2047convert(s, token, p - token) < 0) + s_nappend(s, token, p - token); + uneaten = p; + for(; p uneaten)