diff options
author | cinap_lenrek <cinap_lenrek@felloff.net> | 2017-03-12 17:15:03 +0100 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@felloff.net> | 2017-03-12 17:15:03 +0100 |
commit | 963cfc9a6f6e721f52aa949e6d1af0c3e8dc2ecc (patch) | |
tree | 749b74875dbc49bcf6ed0776648b8f0ef9417407 /sys/src/cmd/upas/smtp/parsetest.c | |
parent | 8177d20fb2709ba9290dfd41308b8e5bee4e00f8 (diff) |
merging erik quanstros nupas
Diffstat (limited to 'sys/src/cmd/upas/smtp/parsetest.c')
-rw-r--r-- | sys/src/cmd/upas/smtp/parsetest.c | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/sys/src/cmd/upas/smtp/parsetest.c b/sys/src/cmd/upas/smtp/parsetest.c new file mode 100644 index 000000000..38e77fb9a --- /dev/null +++ b/sys/src/cmd/upas/smtp/parsetest.c @@ -0,0 +1,86 @@ +#include <u.h> +#include <libc.h> +#include <String.h> +#include <bio.h> +#include "smtp.h" + +Biobuf o; + +void +freefields(void) +{ + Field *f, *fn; + Node *n, *nn; + + for(f = firstfield; f != nil; f = fn){ + fn = f->next; + for(n = f->node; n != nil; n = nn){ + nn = n->next; + s_free(n->s); + s_free(n->white); + free(n); + } + free(f); + } + firstfield = nil; +} + +void +printhdr(void) +{ + Field *f; + Node *n; + + for(f = firstfield; f != nil; f = f->next){ + for(n = f->node; n != nil; n = n->next){ + if(n->s != nil) + Bprint(&o, "%s", s_to_c(n->s)); + else + Bprint(&o, "%c", n->c); + if(n->white != nil) + Bprint(&o, "%s", s_to_c(n->white)); + } + Bprint(&o, "\n"); + } +} + +void +usage(void) +{ + fprint(2, "usage: parsetest file ...\n"); + exits("usage"); +} + +void +main(int argc, char **argv) +{ + int i, fd, nbuf; + char *buf; + + ARGBEGIN{ + default: + usage(); + }ARGEND + + if(Binit(&o, 1, OWRITE) == -1) + sysfatal("Binit: %r"); + for(i = 0; i < argc; i++){ + fd = open(argv[i], OREAD); + if(fd == -1) + sysfatal("open: %r"); + buf = malloc(128*1024); + if(buf == nil) + sysfatal("malloc: %r"); + nbuf = read(fd, buf, 128*1024); + if(nbuf == -1) + sysfatal("read: %r"); + close(fd); + yyinit(buf, nbuf); + yyparse(); + printhdr(); + freefields(); + free(buf); + Bflush(&o); + } + exits(""); +} |