-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add compat/snprintf.c for systems that return bogus
Some systems (namely HPUX and Windows) return -1 when maxsize in snprintf() and in vsnprintf() is reached. So replace snprintf() and vsnprintf() functions with our own ones that return correct value upon overflow. [jc: verified that review comments by J6t have been incorporated, and tightened the check to verify the resulting buffer contents, suggested by Wayne Davison] Signed-off-by: Michal Rokos <michal.rokos@nextsoft.cz> Signed-off-by: Junio C Hamano <gitster@pobox.com>
- Loading branch information
Michal Rokos
authored and
Junio C Hamano
committed
Mar 5, 2008
1 parent
b921764
commit c4582f9
Showing
5 changed files
with
92 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
#include "../git-compat-util.h" | ||
|
||
#undef vsnprintf | ||
int git_vsnprintf(char *str, size_t maxsize, const char *format, va_list ap) | ||
{ | ||
char *s; | ||
int ret; | ||
|
||
ret = vsnprintf(str, maxsize, format, ap); | ||
if (ret != -1) | ||
return ret; | ||
|
||
s = NULL; | ||
if (maxsize < 128) | ||
maxsize = 128; | ||
|
||
while (ret == -1) { | ||
maxsize *= 4; | ||
str = realloc(s, maxsize); | ||
if (! str) | ||
break; | ||
s = str; | ||
ret = vsnprintf(str, maxsize, format, ap); | ||
} | ||
free(s); | ||
return ret; | ||
} | ||
|
||
int git_snprintf(char *str, size_t maxsize, const char *format, ...) | ||
{ | ||
va_list ap; | ||
int ret; | ||
|
||
va_start(ap, format); | ||
ret = git_vsnprintf(str, maxsize, format, ap); | ||
va_end(ap); | ||
|
||
return ret; | ||
} | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters