]> The Tcpdump Group git mirrors - libpcap/blob - missing/win_asprintf.c
cce6296065fc80b9abcd44ccd0962e48a2ecdc21
[libpcap] / missing / win_asprintf.c
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <stdarg.h>
4
5 #include "portability.h"
6
7 int
8 pcap_vasprintf(char **strp, const char *format, va_list args)
9 {
10 int len;
11 size_t str_size;
12 char *str;
13 int ret;
14
15 len = _vscprintf(format, args);
16 if (len == -1) {
17 *strp = NULL;
18 return (-1);
19 }
20 str_size = len + 1;
21 str = malloc(str_size);
22 if (str == NULL) {
23 *strp = NULL;
24 return (-1);
25 }
26 ret = pcap_vsnprintf(str, str_size, format, args);
27 if (ret == -1) {
28 free(str);
29 *strp = NULL;
30 return (-1);
31 }
32 *strp = str;
33 /*
34 * pcap_vsnprintf() shouldn't truncate the string, as we have
35 * allocated a buffer large enough to hold the string, so its
36 * return value should be the number of characters printed.
37 */
38 return (ret);
39 }
40
41 int
42 pcap_asprintf(char **strp, const char *format, ...)
43 {
44 va_list args;
45 int ret;
46
47 va_start(args, format);
48 ret = pcap_vasprintf(strp, format, args);
49 va_end(args);
50 return (ret);
51 }