Blob
1 #include "std.h"2 #include "dat.h"4 static int5 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 int18 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 }