diff options
author | Campbell Barton <ideasman42@gmail.com> | 2011-01-14 22:15:06 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2011-01-14 22:15:06 +0300 |
commit | 255a1e0ed7110827765136b13e21379bea8c9a90 (patch) | |
tree | 5c3ab9094ab55dc114f9605e31339f5e197478f8 /source/blender/blenlib/intern/BLI_dynstr.c | |
parent | d340fb94a82cec91380aff33d6e3f52b308a9c11 (diff) |
apply fix from r34275 to BLI_dynstr_appendf(), dont chop off last character for >256 length strings.
Diffstat (limited to 'source/blender/blenlib/intern/BLI_dynstr.c')
-rw-r--r-- | source/blender/blenlib/intern/BLI_dynstr.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/source/blender/blenlib/intern/BLI_dynstr.c b/source/blender/blenlib/intern/BLI_dynstr.c index c0200e48ac0..1dcc06d6665 100644 --- a/source/blender/blenlib/intern/BLI_dynstr.c +++ b/source/blender/blenlib/intern/BLI_dynstr.c @@ -163,7 +163,9 @@ void BLI_dynstr_appendf(DynStr *ds, const char *format, ...) { va_list args; char *message, fixedmessage[256]; - int len= 256, maxlen= 65536, retval; + int len= sizeof(fixedmessage); + const int maxlen= 65536; + int retval; /* note that it's tempting to just call BLI_dynstr_vappendf here * and avoid code duplication, that crashes on some system because @@ -173,7 +175,7 @@ void BLI_dynstr_appendf(DynStr *ds, const char *format, ...) if(len == sizeof(fixedmessage)) message= fixedmessage; else - message= MEM_callocN(sizeof(char)*(len+1), "BLI_dynstr_appendf"); + message= MEM_callocN(sizeof(char)*(len), "BLI_dynstr_appendf"); va_start(args, format); retval= vsnprintf(message, len, format, args); @@ -192,13 +194,14 @@ void BLI_dynstr_appendf(DynStr *ds, const char *format, ...) break; } } - else if(retval > len) { + else if(retval >= len) { /* in C99 the actual length required is returned */ if(message != fixedmessage) MEM_freeN(message); message= NULL; - len= retval; + /* retval doesnt include \0 terminator */ + len= retval + 1; } else break; |