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 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);
98 8904d7bd 2006-12-01 devnull else
99 7e452401 2007-04-27 devnull fprint(2, "%T err %d: %s\n", severity, s);
100 8904d7bd 2006-12-01 devnull }
101 a0d146ed 2005-07-12 devnull return s;
102 a0d146ed 2005-07-12 devnull }
103 a0d146ed 2005-07-12 devnull
104 a0d146ed 2005-07-12 devnull void
105 a0d146ed 2005-07-12 devnull seterr(int severity, char *fmt, ...)
106 a0d146ed 2005-07-12 devnull {
107 a0d146ed 2005-07-12 devnull char *s;
108 a0d146ed 2005-07-12 devnull va_list args;
109 a0d146ed 2005-07-12 devnull
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");
115 a0d146ed 2005-07-12 devnull else{
116 a0d146ed 2005-07-12 devnull werrstr("%s", s);
117 a0d146ed 2005-07-12 devnull free(s);
118 a0d146ed 2005-07-12 devnull }
119 a0d146ed 2005-07-12 devnull }
120 a0d146ed 2005-07-12 devnull
121 a0d146ed 2005-07-12 devnull void
122 a0d146ed 2005-07-12 devnull logerr(int severity, char *fmt, ...)
123 a0d146ed 2005-07-12 devnull {
124 a0d146ed 2005-07-12 devnull char *s;
125 a0d146ed 2005-07-12 devnull va_list args;
126 a0d146ed 2005-07-12 devnull
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);
131 a0d146ed 2005-07-12 devnull }
132 a0d146ed 2005-07-12 devnull
133 a0d146ed 2005-07-12 devnull u32int
134 a0d146ed 2005-07-12 devnull now(void)
135 a0d146ed 2005-07-12 devnull {
136 a0d146ed 2005-07-12 devnull return time(nil);
137 a0d146ed 2005-07-12 devnull }
138 a0d146ed 2005-07-12 devnull
139 a0d146ed 2005-07-12 devnull int abortonmem = 1;
140 a0d146ed 2005-07-12 devnull
141 a0d146ed 2005-07-12 devnull void *
142 a0d146ed 2005-07-12 devnull emalloc(ulong n)
143 a0d146ed 2005-07-12 devnull {
144 a0d146ed 2005-07-12 devnull void *p;
145 a0d146ed 2005-07-12 devnull
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);
151 a0d146ed 2005-07-12 devnull }
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;
156 a0d146ed 2005-07-12 devnull }
157 a0d146ed 2005-07-12 devnull
158 a0d146ed 2005-07-12 devnull void *
159 a0d146ed 2005-07-12 devnull ezmalloc(ulong n)
160 a0d146ed 2005-07-12 devnull {
161 a0d146ed 2005-07-12 devnull void *p;
162 a0d146ed 2005-07-12 devnull
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);
168 a0d146ed 2005-07-12 devnull }
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;
173 a0d146ed 2005-07-12 devnull }
174 a0d146ed 2005-07-12 devnull
175 a0d146ed 2005-07-12 devnull void *
176 a0d146ed 2005-07-12 devnull erealloc(void *p, ulong n)
177 a0d146ed 2005-07-12 devnull {
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);
183 a0d146ed 2005-07-12 devnull }
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;
187 a0d146ed 2005-07-12 devnull }
188 a0d146ed 2005-07-12 devnull
189 a0d146ed 2005-07-12 devnull char *
190 a0d146ed 2005-07-12 devnull estrdup(char *s)
191 a0d146ed 2005-07-12 devnull {
192 a0d146ed 2005-07-12 devnull char *t;
193 a0d146ed 2005-07-12 devnull int n;
194 a0d146ed 2005-07-12 devnull
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;
201 a0d146ed 2005-07-12 devnull }
202 a0d146ed 2005-07-12 devnull
203 a0d146ed 2005-07-12 devnull /*
204 a0d146ed 2005-07-12 devnull * return floor(log2(v))
205 a0d146ed 2005-07-12 devnull */
206 a0d146ed 2005-07-12 devnull int
207 a0d146ed 2005-07-12 devnull u64log2(u64int v)
208 a0d146ed 2005-07-12 devnull {
209 a0d146ed 2005-07-12 devnull int i;
210 a0d146ed 2005-07-12 devnull
211 a0d146ed 2005-07-12 devnull for(i = 0; i < 64; i++)
212 a0d146ed 2005-07-12 devnull if((v >> i) <= 1)
213 a0d146ed 2005-07-12 devnull break;
214 a0d146ed 2005-07-12 devnull return i;
215 a0d146ed 2005-07-12 devnull }
216 a0d146ed 2005-07-12 devnull
217 a0d146ed 2005-07-12 devnull int
218 a0d146ed 2005-07-12 devnull vtproc(void (*fn)(void*), void *arg)
219 a0d146ed 2005-07-12 devnull {
220 a0d146ed 2005-07-12 devnull proccreate(fn, arg, 256*1024);
221 a0d146ed 2005-07-12 devnull return 0;
222 a0d146ed 2005-07-12 devnull }
223 a0d146ed 2005-07-12 devnull
224 a0d146ed 2005-07-12 devnull int
225 a0d146ed 2005-07-12 devnull ientryfmt(Fmt *fmt)
226 a0d146ed 2005-07-12 devnull {
227 a0d146ed 2005-07-12 devnull IEntry *ie;
228 a0d146ed 2005-07-12 devnull
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);
232 a0d146ed 2005-07-12 devnull }
233 a0d146ed 2005-07-12 devnull
234 a0d146ed 2005-07-12 devnull void
235 a0d146ed 2005-07-12 devnull ventifmtinstall(void)
236 a0d146ed 2005-07-12 devnull {
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);
242 a0d146ed 2005-07-12 devnull }
243 a0d146ed 2005-07-12 devnull
244 a0d146ed 2005-07-12 devnull uint
245 a0d146ed 2005-07-12 devnull msec(void)
246 a0d146ed 2005-07-12 devnull {
247 a0d146ed 2005-07-12 devnull return nsec()/1000000;
248 a0d146ed 2005-07-12 devnull }
249 a0d146ed 2005-07-12 devnull
250 a0d146ed 2005-07-12 devnull uint
251 a0d146ed 2005-07-12 devnull countbits(uint n)
252 a0d146ed 2005-07-12 devnull {
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;
259 a0d146ed 2005-07-12 devnull }