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 11 void *xmemdup(const void *src, size_t len) 12 { 13 return memcpy(__alloc_bytes(len), src, len); 14 } 15 16 char *xstrdup(const char *src) 17 { 18 return xmemdup(src, strlen(src) + 1); 19 } 20 21 char *xvasprintf(const char *fmt, va_list ap) 22 { 23 va_list ap2; 24 char *str; 25 int n; 26 27 va_copy(ap2, ap); 28 n = vsnprintf(NULL, 0, fmt, ap2) + 1; 29 va_end(ap2); 30 31 str = __alloc_bytes(n); 32 vsnprintf(str, n, fmt, ap); 33 34 return str; 35 } 36 37 char *xasprintf(const char *fmt, ...) 38 { 39 va_list ap; 40 char *str; 41 42 va_start(ap, fmt); 43 str = xvasprintf(fmt, ap); 44 va_end(ap); 45 46 return str; 47 }