summaryrefslogtreecommitdiff
path: root/sys/src/cmd/upas/smtp/parsetest.c
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@felloff.net>2017-03-12 17:15:03 +0100
committercinap_lenrek <cinap_lenrek@felloff.net>2017-03-12 17:15:03 +0100
commit963cfc9a6f6e721f52aa949e6d1af0c3e8dc2ecc (patch)
tree749b74875dbc49bcf6ed0776648b8f0ef9417407 /sys/src/cmd/upas/smtp/parsetest.c
parent8177d20fb2709ba9290dfd41308b8e5bee4e00f8 (diff)
merging erik quanstros nupas
Diffstat (limited to 'sys/src/cmd/upas/smtp/parsetest.c')
-rw-r--r--sys/src/cmd/upas/smtp/parsetest.c86
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("");
+}