Blame


1 9f1fdc12 2005-10-29 devnull #include <u.h>
2 9f1fdc12 2005-10-29 devnull #include <libc.h>
3 9f1fdc12 2005-10-29 devnull #include <bio.h>
4 9f1fdc12 2005-10-29 devnull #include <thread.h>
5 9f1fdc12 2005-10-29 devnull #include <plumb.h>
6 9f1fdc12 2005-10-29 devnull #include <9pclient.h>
7 9f1fdc12 2005-10-29 devnull #include "dat.h"
8 9f1fdc12 2005-10-29 devnull
9 9f1fdc12 2005-10-29 devnull void*
10 9f1fdc12 2005-10-29 devnull emalloc(uint n)
11 9f1fdc12 2005-10-29 devnull {
12 9f1fdc12 2005-10-29 devnull void *p;
13 9f1fdc12 2005-10-29 devnull
14 9f1fdc12 2005-10-29 devnull p = malloc(n);
15 9f1fdc12 2005-10-29 devnull if(p == nil)
16 9f1fdc12 2005-10-29 devnull error("can't malloc: %r");
17 9f1fdc12 2005-10-29 devnull memset(p, 0, n);
18 9f1fdc12 2005-10-29 devnull setmalloctag(p, getcallerpc(&n));
19 9f1fdc12 2005-10-29 devnull return p;
20 9f1fdc12 2005-10-29 devnull }
21 9f1fdc12 2005-10-29 devnull
22 9f1fdc12 2005-10-29 devnull void*
23 9f1fdc12 2005-10-29 devnull erealloc(void *p, uint n)
24 9f1fdc12 2005-10-29 devnull {
25 9f1fdc12 2005-10-29 devnull p = realloc(p, n);
26 9f1fdc12 2005-10-29 devnull if(p == nil)
27 9f1fdc12 2005-10-29 devnull error("can't realloc: %r");
28 9f1fdc12 2005-10-29 devnull setmalloctag(p, getcallerpc(&n));
29 9f1fdc12 2005-10-29 devnull return p;
30 9f1fdc12 2005-10-29 devnull }
31 9f1fdc12 2005-10-29 devnull
32 9f1fdc12 2005-10-29 devnull char*
33 9f1fdc12 2005-10-29 devnull estrdup(char *s)
34 9f1fdc12 2005-10-29 devnull {
35 9f1fdc12 2005-10-29 devnull char *t;
36 9f1fdc12 2005-10-29 devnull
37 9f1fdc12 2005-10-29 devnull t = emalloc(strlen(s)+1);
38 9f1fdc12 2005-10-29 devnull strcpy(t, s);
39 9f1fdc12 2005-10-29 devnull return t;
40 9f1fdc12 2005-10-29 devnull }
41 9f1fdc12 2005-10-29 devnull
42 9f1fdc12 2005-10-29 devnull char*
43 9f1fdc12 2005-10-29 devnull estrstrdup(char *s, char *t)
44 9f1fdc12 2005-10-29 devnull {
45 9f1fdc12 2005-10-29 devnull char *u;
46 9f1fdc12 2005-10-29 devnull
47 9f1fdc12 2005-10-29 devnull u = emalloc(strlen(s)+strlen(t)+1);
48 9f1fdc12 2005-10-29 devnull strcpy(u, s);
49 9f1fdc12 2005-10-29 devnull strcat(u, t);
50 9f1fdc12 2005-10-29 devnull return u;
51 9f1fdc12 2005-10-29 devnull }
52 9f1fdc12 2005-10-29 devnull
53 9f1fdc12 2005-10-29 devnull char*
54 9f1fdc12 2005-10-29 devnull eappend(char *s, char *sep, char *t)
55 9f1fdc12 2005-10-29 devnull {
56 9f1fdc12 2005-10-29 devnull char *u;
57 9f1fdc12 2005-10-29 devnull
58 9f1fdc12 2005-10-29 devnull if(t == nil)
59 9f1fdc12 2005-10-29 devnull u = estrstrdup(s, sep);
60 9f1fdc12 2005-10-29 devnull else{
61 9f1fdc12 2005-10-29 devnull u = emalloc(strlen(s)+strlen(sep)+strlen(t)+1);
62 9f1fdc12 2005-10-29 devnull strcpy(u, s);
63 9f1fdc12 2005-10-29 devnull strcat(u, sep);
64 9f1fdc12 2005-10-29 devnull strcat(u, t);
65 9f1fdc12 2005-10-29 devnull }
66 9f1fdc12 2005-10-29 devnull free(s);
67 9f1fdc12 2005-10-29 devnull return u;
68 9f1fdc12 2005-10-29 devnull }
69 9f1fdc12 2005-10-29 devnull
70 9f1fdc12 2005-10-29 devnull char*
71 9f1fdc12 2005-10-29 devnull egrow(char *s, char *sep, char *t)
72 9f1fdc12 2005-10-29 devnull {
73 9f1fdc12 2005-10-29 devnull s = eappend(s, sep, t);
74 9f1fdc12 2005-10-29 devnull free(t);
75 9f1fdc12 2005-10-29 devnull return s;
76 9f1fdc12 2005-10-29 devnull }
77 9f1fdc12 2005-10-29 devnull
78 9f1fdc12 2005-10-29 devnull void
79 9f1fdc12 2005-10-29 devnull error(char *fmt, ...)
80 9f1fdc12 2005-10-29 devnull {
81 9f1fdc12 2005-10-29 devnull Fmt f;
82 9f1fdc12 2005-10-29 devnull char buf[64];
83 9f1fdc12 2005-10-29 devnull va_list arg;
84 9f1fdc12 2005-10-29 devnull
85 9f1fdc12 2005-10-29 devnull fmtfdinit(&f, 2, buf, sizeof buf);
86 9f1fdc12 2005-10-29 devnull fmtprint(&f, "Mail: ");
87 9f1fdc12 2005-10-29 devnull va_start(arg, fmt);
88 9f1fdc12 2005-10-29 devnull fmtvprint(&f, fmt, arg);
89 9f1fdc12 2005-10-29 devnull va_end(arg);
90 9f1fdc12 2005-10-29 devnull fmtprint(&f, "\n");
91 9f1fdc12 2005-10-29 devnull fmtfdflush(&f);
92 9f1fdc12 2005-10-29 devnull threadexitsall(fmt);
93 9f1fdc12 2005-10-29 devnull }
94 9f1fdc12 2005-10-29 devnull
95 9f1fdc12 2005-10-29 devnull #if 0 /* jpc */
96 9f1fdc12 2005-10-29 devnull void
97 9f1fdc12 2005-10-29 devnull ctlprint(int fd, char *fmt, ...)
98 9f1fdc12 2005-10-29 devnull {
99 9f1fdc12 2005-10-29 devnull int n;
100 9f1fdc12 2005-10-29 devnull va_list arg;
101 9f1fdc12 2005-10-29 devnull
102 9f1fdc12 2005-10-29 devnull va_start(arg, fmt);
103 9f1fdc12 2005-10-29 devnull n = vfprint(fd, fmt, arg);
104 9f1fdc12 2005-10-29 devnull va_end(arg);
105 9f1fdc12 2005-10-29 devnull fsync(fd);
106 9f1fdc12 2005-10-29 devnull if(n <= 0)
107 9f1fdc12 2005-10-29 devnull error("control file write error: %r");
108 9f1fdc12 2005-10-29 devnull }
109 9f1fdc12 2005-10-29 devnull #endif
110 9f1fdc12 2005-10-29 devnull
111 9f1fdc12 2005-10-29 devnull void
112 9f1fdc12 2005-10-29 devnull ctlprint(CFid* fd, char *fmt, ...)
113 9f1fdc12 2005-10-29 devnull {
114 9f1fdc12 2005-10-29 devnull int n;
115 9f1fdc12 2005-10-29 devnull va_list arg;
116 9f1fdc12 2005-10-29 devnull char tmp[250];
117 9f1fdc12 2005-10-29 devnull
118 9f1fdc12 2005-10-29 devnull va_start(arg, fmt);
119 9f1fdc12 2005-10-29 devnull n = vsnprint(tmp, 250, fmt, arg);
120 9f1fdc12 2005-10-29 devnull va_end(arg);
121 9f1fdc12 2005-10-29 devnull n = fswrite(fd, tmp, strlen(tmp));
122 9f1fdc12 2005-10-29 devnull if(n <= 0)
123 9f1fdc12 2005-10-29 devnull error("control file write error: %r");
124 9f1fdc12 2005-10-29 devnull }
125 9f1fdc12 2005-10-29 devnull
126 9f1fdc12 2005-10-29 devnull int fsprint(CFid *fid, char* fmt, ...) {
127 9f1fdc12 2005-10-29 devnull // example call this replaces: Bprint(b, ">%s%s\n", lines[i][0]=='>'? "" : " ", lines[i]);
128 9f1fdc12 2005-10-29 devnull char *tmp;
129 9f1fdc12 2005-10-29 devnull va_list arg;
130 9f1fdc12 2005-10-29 devnull int n, tlen;
131 9f1fdc12 2005-10-29 devnull
132 9f1fdc12 2005-10-29 devnull tmp = emalloc( tlen=(strlen(fmt)+250) ); // leave room for interpolated text
133 9f1fdc12 2005-10-29 devnull va_start(arg, fmt);
134 9f1fdc12 2005-10-29 devnull n = vsnprint(tmp, tlen, fmt, arg);
135 9f1fdc12 2005-10-29 devnull va_end(arg);
136 9f1fdc12 2005-10-29 devnull if(n == tlen)
137 9f1fdc12 2005-10-29 devnull error("fsprint formatting error");
138 9f1fdc12 2005-10-29 devnull n = fswrite(fid, tmp, strlen(tmp));
139 9f1fdc12 2005-10-29 devnull if(n <= 0)
140 9f1fdc12 2005-10-29 devnull error("fsprint write error: %r");
141 9f1fdc12 2005-10-29 devnull free(tmp);
142 9f1fdc12 2005-10-29 devnull
143 9f1fdc12 2005-10-29 devnull return n;
144 9f1fdc12 2005-10-29 devnull
145 9f1fdc12 2005-10-29 devnull }
146 9f1fdc12 2005-10-29 devnull #if 0 /* jpc */
147 9f1fdc12 2005-10-29 devnull /*
148 9f1fdc12 2005-10-29 devnull here's a read construct (from winselection) that may be useful in fsprint - think about it.
149 9f1fdc12 2005-10-29 devnull */
150 9f1fdc12 2005-10-29 devnull int m, n;
151 9f1fdc12 2005-10-29 devnull char *buf;
152 9f1fdc12 2005-10-29 devnull char tmp[256];
153 9f1fdc12 2005-10-29 devnull CFid* fid;
154 9f1fdc12 2005-10-29 devnull
155 9f1fdc12 2005-10-29 devnull fid = winopenfid1(w, "rdsel", OREAD);
156 9f1fdc12 2005-10-29 devnull if(fid == nil)
157 9f1fdc12 2005-10-29 devnull error("can't open rdsel: %r");
158 9f1fdc12 2005-10-29 devnull n = 0;
159 9f1fdc12 2005-10-29 devnull buf = nil;
160 9f1fdc12 2005-10-29 devnull
161 9f1fdc12 2005-10-29 devnull for(;;){
162 9f1fdc12 2005-10-29 devnull m = fsread(fid, tmp, sizeof tmp);
163 9f1fdc12 2005-10-29 devnull if(m <= 0)
164 9f1fdc12 2005-10-29 devnull break;
165 9f1fdc12 2005-10-29 devnull buf = erealloc(buf, n+m+1);
166 9f1fdc12 2005-10-29 devnull memmove(buf+n, tmp, m);
167 9f1fdc12 2005-10-29 devnull n += m;
168 9f1fdc12 2005-10-29 devnull buf[n] = '\0';
169 9f1fdc12 2005-10-29 devnull }
170 9f1fdc12 2005-10-29 devnull #endif