Blame


1 6e527fbc 2005-02-13 devnull #include "std.h"
2 6e527fbc 2005-02-13 devnull #include "dat.h"
3 6e527fbc 2005-02-13 devnull
4 6e527fbc 2005-02-13 devnull static int
5 6e527fbc 2005-02-13 devnull unhex(char c)
6 6e527fbc 2005-02-13 devnull {
7 6e527fbc 2005-02-13 devnull if('0' <= c && c <= '9')
8 6e527fbc 2005-02-13 devnull return c-'0';
9 6e527fbc 2005-02-13 devnull if('a' <= c && c <= 'f')
10 6e527fbc 2005-02-13 devnull return c-'a'+10;
11 6e527fbc 2005-02-13 devnull if('A' <= c && c <= 'F')
12 6e527fbc 2005-02-13 devnull return c-'A'+10;
13 6e527fbc 2005-02-13 devnull abort();
14 6e527fbc 2005-02-13 devnull return -1;
15 6e527fbc 2005-02-13 devnull }
16 6e527fbc 2005-02-13 devnull
17 6e527fbc 2005-02-13 devnull int
18 6e527fbc 2005-02-13 devnull hexparse(char *hex, uchar *dat, int ndat)
19 6e527fbc 2005-02-13 devnull {
20 6e527fbc 2005-02-13 devnull int i, n;
21 6e527fbc 2005-02-13 devnull
22 6e527fbc 2005-02-13 devnull n = strlen(hex);
23 6e527fbc 2005-02-13 devnull if(n%2)
24 6e527fbc 2005-02-13 devnull return -1;
25 6e527fbc 2005-02-13 devnull n /= 2;
26 6e527fbc 2005-02-13 devnull if(n > ndat)
27 6e527fbc 2005-02-13 devnull return -1;
28 6e527fbc 2005-02-13 devnull if(hex[strspn(hex, "0123456789abcdefABCDEF")] != '\0')
29 6e527fbc 2005-02-13 devnull return -1;
30 6e527fbc 2005-02-13 devnull for(i=0; i<n; i++)
31 6e527fbc 2005-02-13 devnull dat[i] = (unhex(hex[2*i])<<4)|unhex(hex[2*i+1]);
32 6e527fbc 2005-02-13 devnull return n;
33 6e527fbc 2005-02-13 devnull }
34 6e527fbc 2005-02-13 devnull
35 6e527fbc 2005-02-13 devnull char*
36 6e527fbc 2005-02-13 devnull estrappend(char *s, char *fmt, ...)
37 6e527fbc 2005-02-13 devnull {
38 6e527fbc 2005-02-13 devnull char *t;
39 6e527fbc 2005-02-13 devnull int l;
40 6e527fbc 2005-02-13 devnull va_list arg;
41 6e527fbc 2005-02-13 devnull
42 6e527fbc 2005-02-13 devnull va_start(arg, fmt);
43 6e527fbc 2005-02-13 devnull t = vsmprint(fmt, arg);
44 6e527fbc 2005-02-13 devnull if(t == nil)
45 6e527fbc 2005-02-13 devnull sysfatal("out of memory");
46 6e527fbc 2005-02-13 devnull va_end(arg);
47 6e527fbc 2005-02-13 devnull l = s ? strlen(s) : 0;
48 6e527fbc 2005-02-13 devnull s = erealloc(s, l+strlen(t)+1);
49 6e527fbc 2005-02-13 devnull strcpy(s+l, t);
50 6e527fbc 2005-02-13 devnull free(t);
51 6e527fbc 2005-02-13 devnull return s;
52 6e527fbc 2005-02-13 devnull }
53 6e527fbc 2005-02-13 devnull
54 6e527fbc 2005-02-13 devnull