14a71e5f3Schristos #include <stdio.h> 24a71e5f3Schristos #include <stdlib.h> 34a71e5f3Schristos #include <stdarg.h> 44a71e5f3Schristos 54a71e5f3Schristos #include "portability.h" 64a71e5f3Schristos 74a71e5f3Schristos int 8*f73a5f05Schristos pcapint_vasprintf(char **strp, const char *format, va_list args) 94a71e5f3Schristos { 104a71e5f3Schristos int len; 114a71e5f3Schristos size_t str_size; 124a71e5f3Schristos char *str; 134a71e5f3Schristos int ret; 144a71e5f3Schristos 154a71e5f3Schristos len = _vscprintf(format, args); 164a71e5f3Schristos if (len == -1) { 174a71e5f3Schristos *strp = NULL; 184a71e5f3Schristos return (-1); 194a71e5f3Schristos } 204a71e5f3Schristos str_size = len + 1; 214a71e5f3Schristos str = malloc(str_size); 224a71e5f3Schristos if (str == NULL) { 234a71e5f3Schristos *strp = NULL; 244a71e5f3Schristos return (-1); 254a71e5f3Schristos } 26748408edSchristos ret = vsnprintf(str, str_size, format, args); 274a71e5f3Schristos if (ret == -1) { 284a71e5f3Schristos free(str); 294a71e5f3Schristos *strp = NULL; 304a71e5f3Schristos return (-1); 314a71e5f3Schristos } 324a71e5f3Schristos *strp = str; 334a71e5f3Schristos /* 34748408edSchristos * vsnprintf() shouldn't truncate the string, as we have 354a71e5f3Schristos * allocated a buffer large enough to hold the string, so its 364a71e5f3Schristos * return value should be the number of characters printed. 374a71e5f3Schristos */ 384a71e5f3Schristos return (ret); 394a71e5f3Schristos } 404a71e5f3Schristos 414a71e5f3Schristos int 42*f73a5f05Schristos pcapint_asprintf(char **strp, const char *format, ...) 434a71e5f3Schristos { 444a71e5f3Schristos va_list args; 454a71e5f3Schristos int ret; 464a71e5f3Schristos 474a71e5f3Schristos va_start(args, format); 48*f73a5f05Schristos ret = pcapint_vasprintf(strp, format, args); 494a71e5f3Schristos va_end(args); 504a71e5f3Schristos return (ret); 514a71e5f3Schristos } 52