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 }