Blob


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