buf_size: fix handling of unknown flexible array sizes
[smatch.git] / utils.c
blob094df3f9bf1c26753cdca2b627e34afb94e568a0
1 // SPDX-License-Identifier: MIT
2 // Copyright (C) 2018 Luc Van Oostenryck
4 #include "utils.h"
5 #include "allocate.h"
6 #include <string.h>
7 #include <stdarg.h>
8 #include <stdio.h>
11 void *xmemdup(const void *src, size_t len)
13 return memcpy(__alloc_bytes(len), src, len);
16 char *xstrdup(const char *src)
18 return xmemdup(src, strlen(src) + 1);
21 char *xvasprintf(const char *fmt, va_list ap)
23 va_list ap2;
24 char *str;
25 int n;
27 va_copy(ap2, ap);
28 n = vsnprintf(NULL, 0, fmt, ap2) + 1;
29 va_end(ap2);
31 str = __alloc_bytes(n);
32 vsnprintf(str, n, fmt, ap);
34 return str;
37 char *xasprintf(const char *fmt, ...)
39 va_list ap;
40 char *str;
42 va_start(ap, fmt);
43 str = xvasprintf(fmt, ap);
44 va_end(ap);
46 return str;