// SPDX-FileCopyrightText: 2023-2024, Alejandro Colomar // SPDX-License-Identifier: BSD-3-Clause #ifndef SHADOW_INCLUDE_LIB_STRING_SPRINTF_XASPRINTF_H_ #define SHADOW_INCLUDE_LIB_STRING_SPRINTF_XASPRINTF_H_ #include #include #include #include #include #include "attr.h" format_attr(printf, 2, 3) inline int xasprintf(char **restrict s, const char *restrict fmt, ...); format_attr(printf, 2, 0) inline int xvasprintf(char **restrict s, const char *restrict fmt, va_list ap); inline int xasprintf(char **restrict s, const char *restrict fmt, ...) { int len; va_list ap; va_start(ap, fmt); len = xvasprintf(s, fmt, ap); va_end(ap); return len; } inline int xvasprintf(char **restrict s, const char *restrict fmt, va_list ap) { int len; len = vasprintf(s, fmt, ap); if (len == -1) { perror("asprintf"); exit(EXIT_FAILURE); } return len; } #endif // include guard