// SPDX-License-Identifier: MIT // Copyright (C) 2018 Luc Van Oostenryck #include "utils.h" #include "allocate.h" #include #include #include unsigned int hexval(unsigned int c) { int retval = 256; switch (c) { case '0'...'9': retval = c - '0'; break; case 'a'...'f': retval = c - 'a' + 10; break; case 'A'...'F': retval = c - 'A' + 10; break; } return retval; } void *xmemdup(const void *src, size_t len) { return memcpy(__alloc_bytes(len), src, len); } char *xstrdup(const char *src) { return xmemdup(src, strlen(src) + 1); } char *xvasprintf(const char *fmt, va_list ap) { va_list ap2; char *str; int n; va_copy(ap2, ap); n = vsnprintf(NULL, 0, fmt, ap2) + 1; va_end(ap2); str = __alloc_bytes(n); vsnprintf(str, n, fmt, ap); return str; } char *xasprintf(const char *fmt, ...) { va_list ap; char *str; va_start(ap, fmt); str = xvasprintf(fmt, ap); va_end(ap); return str; }