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 8904d7bd 2006-12-01 devnull if(severity != EOk){
96 8904d7bd 2006-12-01 devnull if(argv0 == nil)
97 7e452401 2007-04-27 devnull fprint(2, "%T %s: err %d: %s\n", argv0, severity, s);
99 7e452401 2007-04-27 devnull fprint(2, "%T err %d: %s\n", severity, s);
101 a0d146ed 2005-07-12 devnull return s;
105 a0d146ed 2005-07-12 devnull seterr(int severity, char *fmt, ...)
107 a0d146ed 2005-07-12 devnull char *s;
108 a0d146ed 2005-07-12 devnull va_list args;
110 a0d146ed 2005-07-12 devnull va_start(args, fmt);
111 a0d146ed 2005-07-12 devnull s = logit(severity, fmt, args);
112 a0d146ed 2005-07-12 devnull va_end(args);
113 a0d146ed 2005-07-12 devnull if(s == nil)
114 a0d146ed 2005-07-12 devnull werrstr("error setting error");
116 a0d146ed 2005-07-12 devnull werrstr("%s", s);
117 a0d146ed 2005-07-12 devnull free(s);
122 a0d146ed 2005-07-12 devnull logerr(int severity, char *fmt, ...)
124 a0d146ed 2005-07-12 devnull char *s;
125 a0d146ed 2005-07-12 devnull va_list args;
127 a0d146ed 2005-07-12 devnull va_start(args, fmt);
128 a0d146ed 2005-07-12 devnull s = logit(severity, fmt, args);
129 a0d146ed 2005-07-12 devnull va_end(args);
130 a0d146ed 2005-07-12 devnull free(s);
134 a0d146ed 2005-07-12 devnull now(void)
136 a0d146ed 2005-07-12 devnull return time(nil);
139 a0d146ed 2005-07-12 devnull int abortonmem = 1;
142 a0d146ed 2005-07-12 devnull emalloc(ulong n)
144 a0d146ed 2005-07-12 devnull void *p;
146 a0d146ed 2005-07-12 devnull p = malloc(n);
147 a0d146ed 2005-07-12 devnull if(p == nil){
148 a0d146ed 2005-07-12 devnull if(abortonmem)
149 a0d146ed 2005-07-12 devnull abort();
150 a0d146ed 2005-07-12 devnull sysfatal("out of memory allocating %lud", n);
152 a0d146ed 2005-07-12 devnull memset(p, 0xa5, n);
153 28b49df3 2006-07-18 devnull setmalloctag(p, getcallerpc(&n));
154 54dd92be 2008-01-30 rsc if(0)print("emalloc %p-%p by %#p\n", p, (char*)p+n, getcallerpc(&n));
155 a0d146ed 2005-07-12 devnull return p;
159 a0d146ed 2005-07-12 devnull ezmalloc(ulong n)
161 a0d146ed 2005-07-12 devnull void *p;
163 a0d146ed 2005-07-12 devnull p = malloc(n);
164 a0d146ed 2005-07-12 devnull if(p == nil){
165 a0d146ed 2005-07-12 devnull if(abortonmem)
166 a0d146ed 2005-07-12 devnull abort();
167 a0d146ed 2005-07-12 devnull sysfatal("out of memory allocating %lud", n);
169 a0d146ed 2005-07-12 devnull memset(p, 0, n);
170 28b49df3 2006-07-18 devnull setmalloctag(p, getcallerpc(&n));
171 54dd92be 2008-01-30 rsc if(0)print("ezmalloc %p-%p by %#p\n", p, (char*)p+n, getcallerpc(&n));
172 a0d146ed 2005-07-12 devnull return p;
176 a0d146ed 2005-07-12 devnull erealloc(void *p, ulong n)
178 a0d146ed 2005-07-12 devnull p = realloc(p, n);
179 a0d146ed 2005-07-12 devnull if(p == nil){
180 a0d146ed 2005-07-12 devnull if(abortonmem)
181 a0d146ed 2005-07-12 devnull abort();
182 a0d146ed 2005-07-12 devnull sysfatal("out of memory allocating %lud", n);
184 28b49df3 2006-07-18 devnull setrealloctag(p, getcallerpc(&p));
185 54dd92be 2008-01-30 rsc if(0)print("erealloc %p-%p by %#p\n", p, (char*)p+n, getcallerpc(&p));
186 a0d146ed 2005-07-12 devnull return p;
190 a0d146ed 2005-07-12 devnull estrdup(char *s)
192 a0d146ed 2005-07-12 devnull char *t;
195 a0d146ed 2005-07-12 devnull n = strlen(s) + 1;
196 a0d146ed 2005-07-12 devnull t = emalloc(n);
197 a0d146ed 2005-07-12 devnull memmove(t, s, n);
198 28b49df3 2006-07-18 devnull setmalloctag(t, getcallerpc(&s));
199 54dd92be 2008-01-30 rsc if(0)print("estrdup %p-%p by %#p\n", t, (char*)t+n, getcallerpc(&s));
200 a0d146ed 2005-07-12 devnull return t;
204 a0d146ed 2005-07-12 devnull * return floor(log2(v))
207 a0d146ed 2005-07-12 devnull u64log2(u64int v)
211 a0d146ed 2005-07-12 devnull for(i = 0; i < 64; i++)
212 a0d146ed 2005-07-12 devnull if((v >> i) <= 1)
214 a0d146ed 2005-07-12 devnull return i;
218 a0d146ed 2005-07-12 devnull vtproc(void (*fn)(void*), void *arg)
220 a0d146ed 2005-07-12 devnull proccreate(fn, arg, 256*1024);
221 a0d146ed 2005-07-12 devnull return 0;
225 a0d146ed 2005-07-12 devnull ientryfmt(Fmt *fmt)
227 a0d146ed 2005-07-12 devnull IEntry *ie;
229 a0d146ed 2005-07-12 devnull ie = va_arg(fmt->args, IEntry*);
230 a0d146ed 2005-07-12 devnull return fmtprint(fmt, "%V %22lld %3d %5d %3d",
231 a0d146ed 2005-07-12 devnull ie->score, ie->ia.addr, ie->ia.type, ie->ia.size, ie->ia.blocks);
235 a0d146ed 2005-07-12 devnull ventifmtinstall(void)
237 a0d146ed 2005-07-12 devnull fmtinstall('F', vtfcallfmt);
238 a0d146ed 2005-07-12 devnull fmtinstall('H', encodefmt);
239 a0d146ed 2005-07-12 devnull fmtinstall('I', ientryfmt);
240 28b49df3 2006-07-18 devnull fmtinstall('T', vttimefmt);
241 a0d146ed 2005-07-12 devnull fmtinstall('V', vtscorefmt);
245 a0d146ed 2005-07-12 devnull msec(void)
247 a0d146ed 2005-07-12 devnull return nsec()/1000000;
251 a0d146ed 2005-07-12 devnull countbits(uint n)
253 a0d146ed 2005-07-12 devnull n = (n&0x55555555)+((n>>1)&0x55555555);
254 a0d146ed 2005-07-12 devnull n = (n&0x33333333)+((n>>2)&0x33333333);
255 a0d146ed 2005-07-12 devnull n = (n&0x0F0F0F0F)+((n>>4)&0x0F0F0F0F);
256 a0d146ed 2005-07-12 devnull n = (n&0x00FF00FF)+((n>>8)&0x00FF00FF);
257 a0d146ed 2005-07-12 devnull n = (n&0x0000FFFF)+((n>>16)&0x0000FFFF);
258 a0d146ed 2005-07-12 devnull return n;