diff options
| author | Luca Barbieri <luca@luca-barbieri.com> | 2010-08-21 00:39:48 +0200 | 
|---|---|---|
| committer | Luca Barbieri <luca@luca-barbieri.com> | 2010-08-21 00:51:29 +0200 | 
| commit | 132b9439e287f1febbb49362671743a5b90e303c (patch) | |
| tree | 85d25fda14ec0fdcc01aec12995c65f44093185f /src | |
| parent | 9960200d5eef97e38d5565cfc1775e3d8f7800a2 (diff) | |
os_stream: fix bugs in allocation path
Diffstat (limited to 'src')
| -rw-r--r-- | src/gallium/auxiliary/os/os_stream.c | 24 | 
1 files changed, 8 insertions, 16 deletions
| diff --git a/src/gallium/auxiliary/os/os_stream.c b/src/gallium/auxiliary/os/os_stream.c index 2d4e1852ba..7b9c17c5fa 100644 --- a/src/gallium/auxiliary/os/os_stream.c +++ b/src/gallium/auxiliary/os/os_stream.c @@ -9,28 +9,20 @@ os_default_stream_vprintf (struct os_stream* stream, const char *format, va_list  {     char buf[1024];     int retval; - -   retval = util_vsnprintf(buf, sizeof(buf), format, ap); +   va_list ap2; +   va_copy(ap2, ap); +   retval = util_vsnprintf(buf, sizeof(buf), format, ap2); +   va_end(ap2);     if(retval <= 0)     {}     else if(retval < sizeof(buf))        stream->write(stream, buf, retval);     else     { -      int alloc = sizeof(buf); -      char* str = NULL; -      for(;;) -      { -         alloc += alloc; -         if(str) -            FREE(str); -         str = MALLOC(alloc); -         if(!str) -            return -1; - -         retval = util_vsnprintf(str, alloc, format, ap); -      } while(retval >= alloc); - +      char* str = MALLOC(retval + 1); +      if(!str) +         return -1; +      retval = util_vsnprintf(str, retval + 1, format, ap);        if(retval > 0)           stream->write(stream, str, retval);        FREE(str); | 
