From: Wilfried Göesgens Date: Sun, 24 Aug 2008 23:03:16 +0000 (+0000) Subject: * redid sprintf wrapper logic X-Git-Tag: v7.86~2003 X-Git-Url: https://code.citadel.org/?a=commitdiff_plain;h=4454631facaa9a9161b24cb2fb5d5ee622b0b752;p=citadel.git * redid sprintf wrapper logic --- diff --git a/libcitadel/lib/stringbuf.c b/libcitadel/lib/stringbuf.c index 51e14a960..22509a037 100644 --- a/libcitadel/lib/stringbuf.c +++ b/libcitadel/lib/stringbuf.c @@ -343,7 +343,7 @@ long StrEscAppend(StrBuf *Target, const StrBuf *Source, const char *PlainIn, int } if (len == 0) - return; + return -1; bptr = Target->buf + Target->BufUsed; eptr = Target->buf + Target->BufSize - 6; /* our biggest unit to put in... */ @@ -511,41 +511,49 @@ int StrBufSub(StrBuf *dest, const StrBuf *Source, size_t Offset, size_t nChars) void StrBufVAppendPrintf(StrBuf *Buf, const char *format, va_list ap) { + size_t BufSize = Buf->BufSize; size_t nWritten = Buf->BufSize + 1; size_t Offset = Buf->BufUsed; size_t newused = Offset + nWritten; - while (newused >= Buf->BufSize) { + while (newused >= BufSize) { nWritten = vsnprintf(Buf->buf + Offset, Buf->BufSize - Offset, format, ap); newused = Offset + nWritten; - if (newused >= Buf->BufSize) - IncreaseBuf(Buf, 1, 0); - else - Buf->BufUsed = Offset + nWritten ; + if (newused >= Buf->BufSize) { + IncreaseBuf(Buf, 1, newused); + } + else { + Buf->BufUsed = Offset + nWritten; + BufSize = Buf->BufSize; + } } } void StrBufAppendPrintf(StrBuf *Buf, const char *format, ...) { + size_t BufSize = Buf->BufSize; size_t nWritten = Buf->BufSize + 1; size_t Offset = Buf->BufUsed; size_t newused = Offset + nWritten; va_list arg_ptr; - while (newused >= Buf->BufSize) { + while (newused >= BufSize) { va_start(arg_ptr, format); - nWritten = vsnprintf(Buf->buf + Offset, - Buf->BufSize - Offset, + nWritten = vsnprintf(Buf->buf + Buf->BufUsed, + Buf->BufSize - Buf->BufUsed, format, arg_ptr); va_end(arg_ptr); - newused = Offset + nWritten; - if (newused >= Buf->BufSize) - IncreaseBuf(Buf, 1, 0); - else - Buf->BufUsed = Offset + nWritten ; + newused = Buf->BufUsed + nWritten; + if (newused >= Buf->BufSize) { + IncreaseBuf(Buf, 1, newused); + } + else { + Buf->BufUsed += nWritten; + BufSize = Buf->BufSize; + } } }