#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; va_list arg; va_start(arg, fmt); t = vsmprint(fmt, arg); if(t == nil) sysfatal("out of memory"); va_end(arg); s = erealloc(s, strlen(s)+strlen(t)+1); strcat(s, t); free(t); return s; }