GIT 1.5.5.6
[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