/* See LICENSE file for copyright and license details. */ #include "common.h" #ifndef TEST #if defined(__GNUC__) # pragma GCC diagnostic ignored "-Wformat-nonliteral" #endif int libexec_vputenvf(struct libexec_command *cmd, enum libexec_insert_mode how, const char *fmt, va_list args) { int len, ret; char *buf; va_list args2; if (!fmt) { errno = EINVAL; return -1; } va_copy(args2, args); len = vsnprintf(NULL, 0, fmt, args2); va_end(args2); if (len < 0) return -1; buf = malloc((size_t)len + 1U); if (!buf) return -1; if (vsprintf(buf, fmt, args) != len) abort(); ret = libexec_putenv(cmd, how, buf); free(buf); return ret; } #else TESTED_ELSEWHERE /* libexec_putenvf.c */ #endif