X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fshared%2Futil.c;h=873c95820ae09aad32f10b1b7a8d2e9ee8bfd339;hb=2181a7f558eb52a22f09f8add9ac0abb4f2ee016;hp=7281cc8ab88a572b507404f28d5332b7a176437f;hpb=a3de5ae1d7d881bbd4869c6c4a200c84bda00ced;p=elogind.git diff --git a/src/shared/util.c b/src/shared/util.c index 7281cc8ab..873c95820 100644 --- a/src/shared/util.c +++ b/src/shared/util.c @@ -1069,6 +1069,32 @@ char *hexmem(const void *p, size_t l) { return r; } +void *unhexmem(const char *p, size_t l) { + uint8_t *r, *z; + const char *x; + + assert(p); + + z = r = malloc((l + 1) / 2 + 1); + if (!r) + return NULL; + + for (x = p; x < p + l; x += 2) { + int a, b; + + a = unhexchar(x[0]); + if (x+1 < p + l) + b = unhexchar(x[1]); + else + b = 0; + + *(z++) = (uint8_t) a << 4 | (uint8_t) b; + } + + *z = 0; + return r; +} + char octchar(int x) { return '0' + (x & 7); }