1// SPDX-License-Identifier: MIT 2// Copyright (C) 2018 Luc Van Oostenryck 3 4#include "utils.h" 5#include "allocate.h" 6#include <string.h> 7#include <stdarg.h> 8#include <stdio.h> 9 10 11unsigned int hexval(unsigned int c) 12{ 13 int retval = 256; 14 switch (c) { 15 case '0'...'9': 16 retval = c - '0'; 17 break; 18 case 'a'...'f': 19 retval = c - 'a' + 10; 20 break; 21 case 'A'...'F': 22 retval = c - 'A' + 10; 23 break; 24 } 25 return retval; 26} 27 28void *xmemdup(const void *src, size_t len) 29{ 30 return memcpy(__alloc_bytes(len), src, len); 31} 32 33char *xstrdup(const char *src) 34{ 35 return xmemdup(src, strlen(src) + 1); 36} 37 38char *xvasprintf(const char *fmt, va_list ap) 39{ 40 va_list ap2; 41 char *str; 42 int n; 43 44 va_copy(ap2, ap); 45 n = vsnprintf(NULL, 0, fmt, ap2) + 1; 46 va_end(ap2); 47 48 str = __alloc_bytes(n); 49 vsnprintf(str, n, fmt, ap); 50 51 return str; 52} 53 54char *xasprintf(const char *fmt, ...) 55{ 56 va_list ap; 57 char *str; 58 59 va_start(ap, fmt); 60 str = xvasprintf(fmt, ap); 61 va_end(ap); 62 63 return str; 64} 65