xref: /illumos-gate/usr/src/tools/smatch/src/utils.c (revision c85f09cc)
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 
xmemdup(const void * src,size_t len)11 void *xmemdup(const void *src, size_t len)
12 {
13 	return memcpy(__alloc_bytes(len), src, len);
14 }
15 
xstrdup(const char * src)16 char *xstrdup(const char *src)
17 {
18 	return xmemdup(src, strlen(src) + 1);
19 }
20 
xvasprintf(const char * fmt,va_list ap)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 
xasprintf(const char * fmt,...)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 }
48