Blame


1 a0d146ed 2005-07-12 devnull #include "stdinc.h"
2 a0d146ed 2005-07-12 devnull #include "dat.h"
3 a0d146ed 2005-07-12 devnull #include "fns.h"
4 a0d146ed 2005-07-12 devnull
5 a0d146ed 2005-07-12 devnull int
6 a0d146ed 2005-07-12 devnull namecmp(char *s, char *t)
7 a0d146ed 2005-07-12 devnull {
8 a0d146ed 2005-07-12 devnull return strncmp(s, t, ANameSize);
9 a0d146ed 2005-07-12 devnull }
10 a0d146ed 2005-07-12 devnull
11 a0d146ed 2005-07-12 devnull void
12 a0d146ed 2005-07-12 devnull namecp(char *dst, char *src)
13 a0d146ed 2005-07-12 devnull {
14 a0d146ed 2005-07-12 devnull strncpy(dst, src, ANameSize - 1);
15 a0d146ed 2005-07-12 devnull dst[ANameSize - 1] = '\0';
16 a0d146ed 2005-07-12 devnull }
17 a0d146ed 2005-07-12 devnull
18 a0d146ed 2005-07-12 devnull int
19 a0d146ed 2005-07-12 devnull nameok(char *name)
20 a0d146ed 2005-07-12 devnull {
21 a0d146ed 2005-07-12 devnull char *t;
22 a0d146ed 2005-07-12 devnull int c;
23 a0d146ed 2005-07-12 devnull
24 a0d146ed 2005-07-12 devnull if(name == nil)
25 a0d146ed 2005-07-12 devnull return -1;
26 a0d146ed 2005-07-12 devnull for(t = name; c = *t; t++)
27 a0d146ed 2005-07-12 devnull if(t - name >= ANameSize
28 a0d146ed 2005-07-12 devnull || c < ' ' || c >= 0x7f)
29 a0d146ed 2005-07-12 devnull return -1;
30 a0d146ed 2005-07-12 devnull return 0;
31 a0d146ed 2005-07-12 devnull }
32 a0d146ed 2005-07-12 devnull
33 a0d146ed 2005-07-12 devnull int
34 a0d146ed 2005-07-12 devnull stru32int(char *s, u32int *r)
35 a0d146ed 2005-07-12 devnull {
36 a0d146ed 2005-07-12 devnull char *t;
37 a0d146ed 2005-07-12 devnull u32int n, nn, m;
38 a0d146ed 2005-07-12 devnull int c;
39 a0d146ed 2005-07-12 devnull
40 a0d146ed 2005-07-12 devnull m = TWID32 / 10;
41 a0d146ed 2005-07-12 devnull n = 0;
42 a0d146ed 2005-07-12 devnull for(t = s; ; t++){
43 a0d146ed 2005-07-12 devnull c = *t;
44 a0d146ed 2005-07-12 devnull if(c < '0' || c > '9')
45 a0d146ed 2005-07-12 devnull break;
46 a0d146ed 2005-07-12 devnull if(n > m)
47 a0d146ed 2005-07-12 devnull return -1;
48 a0d146ed 2005-07-12 devnull nn = n * 10 + c - '0';
49 a0d146ed 2005-07-12 devnull if(nn < n)
50 a0d146ed 2005-07-12 devnull return -1;
51 a0d146ed 2005-07-12 devnull n = nn;
52 a0d146ed 2005-07-12 devnull }
53 a0d146ed 2005-07-12 devnull *r = n;
54 a0d146ed 2005-07-12 devnull return s != t && *t == '\0';
55 a0d146ed 2005-07-12 devnull }
56 a0d146ed 2005-07-12 devnull
57 a0d146ed 2005-07-12 devnull int
58 a0d146ed 2005-07-12 devnull stru64int(char *s, u64int *r)
59 a0d146ed 2005-07-12 devnull {
60 a0d146ed 2005-07-12 devnull char *t;
61 a0d146ed 2005-07-12 devnull u64int n, nn, m;
62 a0d146ed 2005-07-12 devnull int c;
63 a0d146ed 2005-07-12 devnull
64 a0d146ed 2005-07-12 devnull m = TWID64 / 10;
65 a0d146ed 2005-07-12 devnull n = 0;
66 a0d146ed 2005-07-12 devnull for(t = s; ; t++){
67 a0d146ed 2005-07-12 devnull c = *t;
68 a0d146ed 2005-07-12 devnull if(c < '0' || c > '9')
69 a0d146ed 2005-07-12 devnull break;
70 a0d146ed 2005-07-12 devnull if(n > m)
71 a0d146ed 2005-07-12 devnull return -1;
72 a0d146ed 2005-07-12 devnull nn = n * 10 + c - '0';
73 a0d146ed 2005-07-12 devnull if(nn < n)
74 a0d146ed 2005-07-12 devnull return -1;
75 a0d146ed 2005-07-12 devnull n = nn;
76 a0d146ed 2005-07-12 devnull }
77 a0d146ed 2005-07-12 devnull *r = n;
78 a0d146ed 2005-07-12 devnull return s != t && *t == '\0';
79 a0d146ed 2005-07-12 devnull }
80 a0d146ed 2005-07-12 devnull
81 a0d146ed 2005-07-12 devnull int
82 a0d146ed 2005-07-12 devnull vttypevalid(int type)
83 a0d146ed 2005-07-12 devnull {
84 a0d146ed 2005-07-12 devnull return type < VtMaxType;
85 a0d146ed 2005-07-12 devnull }
86 a0d146ed 2005-07-12 devnull
87 a0d146ed 2005-07-12 devnull static char*
88 a0d146ed 2005-07-12 devnull logit(int severity, char *fmt, va_list args)
89 a0d146ed 2005-07-12 devnull {
90 a0d146ed 2005-07-12 devnull char *s;
91 a0d146ed 2005-07-12 devnull
92 a0d146ed 2005-07-12 devnull s = vsmprint(fmt, args);
93 a0d146ed 2005-07-12 devnull if(s == nil)
94 a0d146ed 2005-07-12 devnull return nil;
95 a0d146ed 2005-07-12 devnull if(argv0 == nil)
96 a0d146ed 2005-07-12 devnull fprint(2, "%s: err %d: %s\n", argv0, severity, s);
97 a0d146ed 2005-07-12 devnull else
98 a0d146ed 2005-07-12 devnull fprint(2, "err %d: %s\n", severity, s);
99 a0d146ed 2005-07-12 devnull return s;
100 a0d146ed 2005-07-12 devnull }
101 a0d146ed 2005-07-12 devnull
102 a0d146ed 2005-07-12 devnull void
103 a0d146ed 2005-07-12 devnull seterr(int severity, char *fmt, ...)
104 a0d146ed 2005-07-12 devnull {
105 a0d146ed 2005-07-12 devnull char *s;
106 a0d146ed 2005-07-12 devnull va_list args;
107 a0d146ed 2005-07-12 devnull
108 a0d146ed 2005-07-12 devnull va_start(args, fmt);
109 a0d146ed 2005-07-12 devnull s = logit(severity, fmt, args);
110 a0d146ed 2005-07-12 devnull va_end(args);
111 a0d146ed 2005-07-12 devnull if(s == nil)
112 a0d146ed 2005-07-12 devnull werrstr("error setting error");
113 a0d146ed 2005-07-12 devnull else{
114 a0d146ed 2005-07-12 devnull werrstr("%s", s);
115 a0d146ed 2005-07-12 devnull free(s);
116 a0d146ed 2005-07-12 devnull }
117 a0d146ed 2005-07-12 devnull }
118 a0d146ed 2005-07-12 devnull
119 a0d146ed 2005-07-12 devnull void
120 a0d146ed 2005-07-12 devnull logerr(int severity, char *fmt, ...)
121 a0d146ed 2005-07-12 devnull {
122 a0d146ed 2005-07-12 devnull char *s;
123 a0d146ed 2005-07-12 devnull va_list args;
124 a0d146ed 2005-07-12 devnull
125 a0d146ed 2005-07-12 devnull va_start(args, fmt);
126 a0d146ed 2005-07-12 devnull s = logit(severity, fmt, args);
127 a0d146ed 2005-07-12 devnull va_end(args);
128 a0d146ed 2005-07-12 devnull free(s);
129 a0d146ed 2005-07-12 devnull }
130 a0d146ed 2005-07-12 devnull
131 a0d146ed 2005-07-12 devnull u32int
132 a0d146ed 2005-07-12 devnull now(void)
133 a0d146ed 2005-07-12 devnull {
134 a0d146ed 2005-07-12 devnull return time(nil);
135 a0d146ed 2005-07-12 devnull }
136 a0d146ed 2005-07-12 devnull
137 a0d146ed 2005-07-12 devnull int abortonmem = 1;
138 a0d146ed 2005-07-12 devnull
139 a0d146ed 2005-07-12 devnull void *
140 a0d146ed 2005-07-12 devnull emalloc(ulong n)
141 a0d146ed 2005-07-12 devnull {
142 a0d146ed 2005-07-12 devnull void *p;
143 a0d146ed 2005-07-12 devnull
144 a0d146ed 2005-07-12 devnull p = malloc(n);
145 a0d146ed 2005-07-12 devnull if(p == nil){
146 a0d146ed 2005-07-12 devnull if(abortonmem)
147 a0d146ed 2005-07-12 devnull abort();
148 a0d146ed 2005-07-12 devnull sysfatal("out of memory allocating %lud", n);
149 a0d146ed 2005-07-12 devnull }
150 a0d146ed 2005-07-12 devnull memset(p, 0xa5, n);
151 a0d146ed 2005-07-12 devnull if(0)print("emalloc %p-%p by %lux\n", p, (char*)p+n, getcallerpc(&n));
152 a0d146ed 2005-07-12 devnull return p;
153 a0d146ed 2005-07-12 devnull }
154 a0d146ed 2005-07-12 devnull
155 a0d146ed 2005-07-12 devnull void *
156 a0d146ed 2005-07-12 devnull ezmalloc(ulong n)
157 a0d146ed 2005-07-12 devnull {
158 a0d146ed 2005-07-12 devnull void *p;
159 a0d146ed 2005-07-12 devnull
160 a0d146ed 2005-07-12 devnull p = malloc(n);
161 a0d146ed 2005-07-12 devnull if(p == nil){
162 a0d146ed 2005-07-12 devnull if(abortonmem)
163 a0d146ed 2005-07-12 devnull abort();
164 a0d146ed 2005-07-12 devnull sysfatal("out of memory allocating %lud", n);
165 a0d146ed 2005-07-12 devnull }
166 a0d146ed 2005-07-12 devnull memset(p, 0, n);
167 a0d146ed 2005-07-12 devnull if(0)print("ezmalloc %p-%p by %lux\n", p, (char*)p+n, getcallerpc(&n));
168 a0d146ed 2005-07-12 devnull return p;
169 a0d146ed 2005-07-12 devnull }
170 a0d146ed 2005-07-12 devnull
171 a0d146ed 2005-07-12 devnull void *
172 a0d146ed 2005-07-12 devnull erealloc(void *p, ulong n)
173 a0d146ed 2005-07-12 devnull {
174 a0d146ed 2005-07-12 devnull p = realloc(p, n);
175 a0d146ed 2005-07-12 devnull if(p == nil){
176 a0d146ed 2005-07-12 devnull if(abortonmem)
177 a0d146ed 2005-07-12 devnull abort();
178 a0d146ed 2005-07-12 devnull sysfatal("out of memory allocating %lud", n);
179 a0d146ed 2005-07-12 devnull }
180 a0d146ed 2005-07-12 devnull if(0)print("erealloc %p-%p by %lux\n", p, (char*)p+n, getcallerpc(&p));
181 a0d146ed 2005-07-12 devnull return p;
182 a0d146ed 2005-07-12 devnull }
183 a0d146ed 2005-07-12 devnull
184 a0d146ed 2005-07-12 devnull char *
185 a0d146ed 2005-07-12 devnull estrdup(char *s)
186 a0d146ed 2005-07-12 devnull {
187 a0d146ed 2005-07-12 devnull char *t;
188 a0d146ed 2005-07-12 devnull int n;
189 a0d146ed 2005-07-12 devnull
190 a0d146ed 2005-07-12 devnull n = strlen(s) + 1;
191 a0d146ed 2005-07-12 devnull t = emalloc(n);
192 a0d146ed 2005-07-12 devnull memmove(t, s, n);
193 a0d146ed 2005-07-12 devnull if(0)print("estrdup %p-%p by %lux\n", t, (char*)t+n, getcallerpc(&s));
194 a0d146ed 2005-07-12 devnull return t;
195 a0d146ed 2005-07-12 devnull }
196 a0d146ed 2005-07-12 devnull
197 a0d146ed 2005-07-12 devnull /*
198 a0d146ed 2005-07-12 devnull * return floor(log2(v))
199 a0d146ed 2005-07-12 devnull */
200 a0d146ed 2005-07-12 devnull int
201 a0d146ed 2005-07-12 devnull u64log2(u64int v)
202 a0d146ed 2005-07-12 devnull {
203 a0d146ed 2005-07-12 devnull int i;
204 a0d146ed 2005-07-12 devnull
205 a0d146ed 2005-07-12 devnull for(i = 0; i < 64; i++)
206 a0d146ed 2005-07-12 devnull if((v >> i) <= 1)
207 a0d146ed 2005-07-12 devnull break;
208 a0d146ed 2005-07-12 devnull return i;
209 a0d146ed 2005-07-12 devnull }
210 a0d146ed 2005-07-12 devnull
211 a0d146ed 2005-07-12 devnull int
212 a0d146ed 2005-07-12 devnull vtproc(void (*fn)(void*), void *arg)
213 a0d146ed 2005-07-12 devnull {
214 a0d146ed 2005-07-12 devnull proccreate(fn, arg, 256*1024);
215 a0d146ed 2005-07-12 devnull return 0;
216 a0d146ed 2005-07-12 devnull }
217 a0d146ed 2005-07-12 devnull
218 a0d146ed 2005-07-12 devnull int
219 a0d146ed 2005-07-12 devnull ientryfmt(Fmt *fmt)
220 a0d146ed 2005-07-12 devnull {
221 a0d146ed 2005-07-12 devnull IEntry *ie;
222 a0d146ed 2005-07-12 devnull
223 a0d146ed 2005-07-12 devnull ie = va_arg(fmt->args, IEntry*);
224 a0d146ed 2005-07-12 devnull return fmtprint(fmt, "%V %22lld %3d %5d %3d",
225 a0d146ed 2005-07-12 devnull ie->score, ie->ia.addr, ie->ia.type, ie->ia.size, ie->ia.blocks);
226 a0d146ed 2005-07-12 devnull }
227 a0d146ed 2005-07-12 devnull
228 a0d146ed 2005-07-12 devnull void
229 a0d146ed 2005-07-12 devnull ventifmtinstall(void)
230 a0d146ed 2005-07-12 devnull {
231 a0d146ed 2005-07-12 devnull fmtinstall('F', vtfcallfmt);
232 a0d146ed 2005-07-12 devnull fmtinstall('H', encodefmt);
233 a0d146ed 2005-07-12 devnull fmtinstall('I', ientryfmt);
234 a0d146ed 2005-07-12 devnull fmtinstall('V', vtscorefmt);
235 a0d146ed 2005-07-12 devnull }
236 a0d146ed 2005-07-12 devnull
237 a0d146ed 2005-07-12 devnull uint
238 a0d146ed 2005-07-12 devnull msec(void)
239 a0d146ed 2005-07-12 devnull {
240 a0d146ed 2005-07-12 devnull return nsec()/1000000;
241 a0d146ed 2005-07-12 devnull }
242 a0d146ed 2005-07-12 devnull
243 a0d146ed 2005-07-12 devnull uint
244 a0d146ed 2005-07-12 devnull countbits(uint n)
245 a0d146ed 2005-07-12 devnull {
246 a0d146ed 2005-07-12 devnull n = (n&0x55555555)+((n>>1)&0x55555555);
247 a0d146ed 2005-07-12 devnull n = (n&0x33333333)+((n>>2)&0x33333333);
248 a0d146ed 2005-07-12 devnull n = (n&0x0F0F0F0F)+((n>>4)&0x0F0F0F0F);
249 a0d146ed 2005-07-12 devnull n = (n&0x00FF00FF)+((n>>8)&0x00FF00FF);
250 a0d146ed 2005-07-12 devnull n = (n&0x0000FFFF)+((n>>16)&0x0000FFFF);
251 a0d146ed 2005-07-12 devnull return n;
252 a0d146ed 2005-07-12 devnull }