#include "std.h" | |
#include "dat.h" | |
static int | |
unhex(char c) | |
{ | |
if('0' <= c && c <= '9') | |
return c-'0'; | |
if('a' <= c && c <= 'f') | |
return c-'a'+10; | |
if('A' <= c && c <= 'F') | |
return c-'A'+10; | |
abort(); | |
return -1; | |
} | |
int | |
hexparse(char *hex, uchar *dat, int ndat) | |
{ | |
int i, n; | |
n = strlen(hex); | |
if(n%2) | |
return -1; | |
n /= 2; | |
if(n > ndat) | |
return -1; | |
if(hex[strspn(hex, "0123456789abcdefABCDEF")] != '\0') | |
return -1; | |
for(i=0; i<n; i++) | |
dat[i] = (unhex(hex[2*i])<<4)|unhex(hex[2*i+1]); | |
return n; | |
} | |
char* | |
estrappend(char *s, char *fmt, ...) | |
{ | |
char *t; | |
int l; | |
va_list arg; | |
va_start(arg, fmt); | |
t = vsmprint(fmt, arg); | |
if(t == nil) | |
sysfatal("out of memory"); | |
va_end(arg); | |
l = s ? strlen(s) : 0; | |
s = erealloc(s, l+strlen(t)+1); | |
strcpy(s+l, t); | |
free(t); | |
return s; | |
} | |