]> git.ipfire.org Git - thirdparty/git.git/blob - compat/snprintf.c
Add compat/snprintf.c for systems that return bogus
[thirdparty/git.git] / compat / snprintf.c
1 #include "../git-compat-util.h"
2
3 #undef vsnprintf
4 int git_vsnprintf(char *str, size_t maxsize, const char *format, va_list ap)
5 {
6 char *s;
7 int ret;
8
9 ret = vsnprintf(str, maxsize, format, ap);
10 if (ret != -1)
11 return ret;
12
13 s = NULL;
14 if (maxsize < 128)
15 maxsize = 128;
16
17 while (ret == -1) {
18 maxsize *= 4;
19 str = realloc(s, maxsize);
20 if (! str)
21 break;
22 s = str;
23 ret = vsnprintf(str, maxsize, format, ap);
24 }
25 free(s);
26 return ret;
27 }
28
29 int git_snprintf(char *str, size_t maxsize, const char *format, ...)
30 {
31 va_list ap;
32 int ret;
33
34 va_start(ap, format);
35 ret = git_vsnprintf(str, maxsize, format, ap);
36 va_end(ap);
37
38 return ret;
39 }
40