1 5cdb1798 2005-10-29 devnull #include <u.h>
2 5cdb1798 2005-10-29 devnull #include <libc.h>
3 5cdb1798 2005-10-29 devnull #include "dat.h"
6 5cdb1798 2005-10-29 devnull emalloc(int size)
10 5cdb1798 2005-10-29 devnull a = mallocz(size, 1);
11 5cdb1798 2005-10-29 devnull if(a == nil)
12 5cdb1798 2005-10-29 devnull sysfatal("%r");
13 5cdb1798 2005-10-29 devnull return a;
17 5cdb1798 2005-10-29 devnull estrdup(char *s)
19 5cdb1798 2005-10-29 devnull s = strdup(s);
20 5cdb1798 2005-10-29 devnull if(s == nil)
21 5cdb1798 2005-10-29 devnull sysfatal("%r");
22 5cdb1798 2005-10-29 devnull return s;
26 5cdb1798 2005-10-29 devnull * like tokenize but obey "" quoting
29 5cdb1798 2005-10-29 devnull tokenize822(char *str, char **args, int max)
32 5cdb1798 2005-10-29 devnull int intok = 0, inquote = 0;
34 5cdb1798 2005-10-29 devnull if(max <= 0)
35 5cdb1798 2005-10-29 devnull return 0;
36 5cdb1798 2005-10-29 devnull for(na=0; ;str++)
37 5cdb1798 2005-10-29 devnull switch(*str) {
38 5cdb1798 2005-10-29 devnull case ' ':
39 5cdb1798 2005-10-29 devnull case '\t':
40 5cdb1798 2005-10-29 devnull if(inquote)
41 5cdb1798 2005-10-29 devnull goto Default;
42 5cdb1798 2005-10-29 devnull /* fall through */
43 5cdb1798 2005-10-29 devnull case '\n':
44 5cdb1798 2005-10-29 devnull *str = 0;
45 5cdb1798 2005-10-29 devnull if(!intok)
46 5cdb1798 2005-10-29 devnull continue;
47 5cdb1798 2005-10-29 devnull intok = 0;
48 5cdb1798 2005-10-29 devnull if(na < max)
49 5cdb1798 2005-10-29 devnull continue;
50 5cdb1798 2005-10-29 devnull /* fall through */
52 5cdb1798 2005-10-29 devnull return na;
53 5cdb1798 2005-10-29 devnull case '"':
54 5cdb1798 2005-10-29 devnull inquote ^= 1;
55 5cdb1798 2005-10-29 devnull /* fall through */
58 5cdb1798 2005-10-29 devnull if(intok)
59 5cdb1798 2005-10-29 devnull continue;
60 5cdb1798 2005-10-29 devnull args[na++] = str;
61 5cdb1798 2005-10-29 devnull intok = 1;
63 5cdb1798 2005-10-29 devnull return 0; /* can't get here; silence compiler */
67 5cdb1798 2005-10-29 devnull readaddrs(char *file, Addr *a)
70 5cdb1798 2005-10-29 devnull int i, n;
71 5cdb1798 2005-10-29 devnull char buf[8*1024];
72 5cdb1798 2005-10-29 devnull char *f[128];
73 5cdb1798 2005-10-29 devnull Addr **l;
74 5cdb1798 2005-10-29 devnull Addr *first;
76 5cdb1798 2005-10-29 devnull /* add to end */
77 5cdb1798 2005-10-29 devnull first = a;
78 5cdb1798 2005-10-29 devnull for(l = &first; *l != nil; l = &(*l)->next)
81 5cdb1798 2005-10-29 devnull /* read in the addresses */
82 5cdb1798 2005-10-29 devnull fd = open(file, OREAD);
83 5cdb1798 2005-10-29 devnull if(fd < 0)
84 5cdb1798 2005-10-29 devnull return first;
85 5cdb1798 2005-10-29 devnull n = read(fd, buf, sizeof(buf)-1);
86 5cdb1798 2005-10-29 devnull close(fd);
87 5cdb1798 2005-10-29 devnull if(n <= 0)
88 5cdb1798 2005-10-29 devnull return first;
89 5cdb1798 2005-10-29 devnull buf[n] = 0;
91 5cdb1798 2005-10-29 devnull n = tokenize822(buf, f, nelem(f));
92 5cdb1798 2005-10-29 devnull for(i = 0; i < n; i++){
93 5cdb1798 2005-10-29 devnull *l = a = emalloc(sizeof *a);
94 5cdb1798 2005-10-29 devnull l = &a->next;
95 5cdb1798 2005-10-29 devnull a->val = estrdup(f[i]);
97 5cdb1798 2005-10-29 devnull return first;