#include "asprintf.h" ssize_t asprintf(char** strp, char* format, ...) { va_list args; va_start(args, format); ssize_t size = (ssize_t) vsnprintf(NULL, 0, format, args); if (size < 0) { va_end(args); return -1; } *strp = malloc(size + 1); if (*strp == NULL) { va_end(args); return -1; } ssize_t result = (ssize_t) vsnprintf(*strp, size + 1, format, args); va_end(args); if (result < 0) { free(*strp); return -1; } return result; }