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"
6 a0d146ed 2005-07-12 devnull namecmp(char *s, char *t)
8 a0d146ed 2005-07-12 devnull return strncmp(s, t, ANameSize);
12 a0d146ed 2005-07-12 devnull namecp(char *dst, char *src)
14 a0d146ed 2005-07-12 devnull strncpy(dst, src, ANameSize - 1);
15 a0d146ed 2005-07-12 devnull dst[ANameSize - 1] = '\0';
19 a0d146ed 2005-07-12 devnull nameok(char *name)
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;
34 a0d146ed 2005-07-12 devnull stru32int(char *s, u32int *r)
37 a0d146ed 2005-07-12 devnull u32int n, nn, m;
40 a0d146ed 2005-07-12 devnull m = TWID32 / 10;
42 a0d146ed 2005-07-12 devnull for(t = s; ; t++){
44 a0d146ed 2005-07-12 devnull if(c < '0' || c > '9')
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;
54 a0d146ed 2005-07-12 devnull return s != t && *t == '\0';
58 a0d146ed 2005-07-12 devnull stru64int(char *s, u64int *r)
61 a0d146ed 2005-07-12 devnull u64int n, nn, m;
64 a0d146ed 2005-07-12 devnull m = TWID64 / 10;
66 a0d146ed 2005-07-12 devnull for(t = s; ; t++){
68 a0d146ed 2005-07-12 devnull if(c < '0' || c > '9')
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;
78 a0d146ed 2005-07-12 devnull return s != t && *t == '\0';
82 a0d146ed 2005-07-12 devnull vttypevalid(int type)
84 a0d146ed 2005-07-12 devnull return type < VtMaxType;
87 a0d146ed 2005-07-12 devnull static char*
88 a0d146ed 2005-07-12 devnull logit(int severity, char *fmt, va_list args)
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);
98 a0d146ed 2005-07-12 devnull fprint(2, "err %d: %s\n", severity, s);
99 a0d146ed 2005-07-12 devnull return s;
103 a0d146ed 2005-07-12 devnull seterr(int severity, char *fmt, ...)
105 a0d146ed 2005-07-12 devnull char *s;
106 a0d146ed 2005-07-12 devnull va_list args;
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");
114 a0d146ed 2005-07-12 devnull werrstr("%s", s);
115 a0d146ed 2005-07-12 devnull free(s);
120 a0d146ed 2005-07-12 devnull logerr(int severity, char *fmt, ...)
122 a0d146ed 2005-07-12 devnull char *s;
123 a0d146ed 2005-07-12 devnull va_list args;
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);
132 a0d146ed 2005-07-12 devnull now(void)
134 a0d146ed 2005-07-12 devnull return time(nil);
137 a0d146ed 2005-07-12 devnull int abortonmem = 1;
140 a0d146ed 2005-07-12 devnull emalloc(ulong n)
142 a0d146ed 2005-07-12 devnull void *p;
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);
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;
156 a0d146ed 2005-07-12 devnull ezmalloc(ulong n)
158 a0d146ed 2005-07-12 devnull void *p;
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);
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;
172 a0d146ed 2005-07-12 devnull erealloc(void *p, ulong n)
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);
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;
185 a0d146ed 2005-07-12 devnull estrdup(char *s)
187 a0d146ed 2005-07-12 devnull char *t;
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;
198 a0d146ed 2005-07-12 devnull * return floor(log2(v))
201 a0d146ed 2005-07-12 devnull u64log2(u64int v)
205 a0d146ed 2005-07-12 devnull for(i = 0; i < 64; i++)
206 a0d146ed 2005-07-12 devnull if((v >> i) <= 1)
208 a0d146ed 2005-07-12 devnull return i;
212 a0d146ed 2005-07-12 devnull vtproc(void (*fn)(void*), void *arg)
214 a0d146ed 2005-07-12 devnull proccreate(fn, arg, 256*1024);
215 a0d146ed 2005-07-12 devnull return 0;
219 a0d146ed 2005-07-12 devnull ientryfmt(Fmt *fmt)
221 a0d146ed 2005-07-12 devnull IEntry *ie;
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);
229 a0d146ed 2005-07-12 devnull ventifmtinstall(void)
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);
238 a0d146ed 2005-07-12 devnull msec(void)
240 a0d146ed 2005-07-12 devnull return nsec()/1000000;
244 a0d146ed 2005-07-12 devnull countbits(uint n)
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;