Author: vitek
Date: Mon Apr 14 16:49:11 2008
New Revision: 648064
URL: http://svn.apache.org/viewvc?rev=648064&view=rev
Log:
2008-04-14 Travis Vitek <[EMAIL PROTECTED]>
STDCXX-857
* tests/src/printf.cpp: Revert r647908 which indirectly caused
memory leaks in the test driver and several tests.
* tests/src/fmt_defs.h: Ditto.
Modified:
stdcxx/trunk/tests/src/fmt_defs.h
stdcxx/trunk/tests/src/printf.cpp
Modified: stdcxx/trunk/tests/src/fmt_defs.h
URL:
http://svn.apache.org/viewvc/stdcxx/trunk/tests/src/fmt_defs.h?rev=648064&r1=648063&r2=648064&view=diff
==============================================================================
--- stdcxx/trunk/tests/src/fmt_defs.h (original)
+++ stdcxx/trunk/tests/src/fmt_defs.h Mon Apr 14 16:49:11 2008
@@ -59,7 +59,6 @@
size_t *pbufsize; // pointer to the size of the buffer
size_t maxsize; // maximum not-to-exceed size
size_t endoff; // offset of the last character
- size_t owned; // buffer is owned by caller, don't free it
};
/********************************************************************/
Modified: stdcxx/trunk/tests/src/printf.cpp
URL:
http://svn.apache.org/viewvc/stdcxx/trunk/tests/src/printf.cpp?rev=648064&r1=648063&r2=648064&view=diff
==============================================================================
--- stdcxx/trunk/tests/src/printf.cpp (original)
+++ stdcxx/trunk/tests/src/printf.cpp Mon Apr 14 16:49:11 2008
@@ -450,24 +450,26 @@
size_t guardsize = sizeof guard - 1;
- size_t newbufsize = *buf.pbufsize * 2;
+ size_t newbufsize = *buf.pbufsize * 2 + guardsize;
- const size_t required = buflen + len;
- if (newbufsize < required)
- newbufsize = required * 2;
+ if (newbufsize <= buflen + len + guardsize)
+ newbufsize = 2 * (buflen + len + 1) + guardsize;
// prevent buffer size from exceeding the maximum
if (buf.maxsize < newbufsize)
newbufsize = buf.maxsize;
- if (newbufsize < required) {
+ if (newbufsize < buflen + len + guardsize)
+ guardsize = 0;
+
+ if (newbufsize < buflen + len + guardsize) {
#ifdef ENOMEM
errno = ENOMEM;
#endif // ENOMEM
return 0;
}
- char* const newbuf = (char*)malloc (newbufsize + guardsize);
+ char* const newbuf = (char*)malloc (newbufsize);
// return 0 on failure to allocate, let caller deal with it
if (0 == newbuf)
@@ -476,21 +478,17 @@
memcpy (newbuf, *buf.pbuf, buflen);
// append a guard block to the end of the buffer
- memcpy (newbuf + newbufsize, guard, guardsize);
+ memcpy (newbuf + newbufsize - guardsize, guard, guardsize);
- if (*buf.pbuf && !buf.owned) {
+ if (*buf.pbuf) {
// verify that we didn't write past the end of the buffer
RW_ASSERT (0 == memcmp (*buf.pbuf + *buf.pbufsize,
guard, guardsize));
-
free (*buf.pbuf);
}
*buf.pbuf = newbuf;
- *buf.pbufsize = newbufsize;
-
- // we allocated the buffer, so we can free it
- buf.owned = 0;
+ *buf.pbufsize = newbufsize - guardsize;
}
if (0 != str) {
@@ -960,7 +958,7 @@
if (0 == pbufsize)
pbufsize = &default_bufsize;
- Buffer buf = { pbuf, pbufsize, _RWSTD_SIZE_MAX, 0, 1 };
+ Buffer buf = { pbuf, pbufsize, _RWSTD_SIZE_MAX, 0 };
// save the initial value of `pbuf'
char* const pbuf_save = *buf.pbuf;
@@ -1997,7 +1995,7 @@
size_t localbufsize = sizeof elemstr;
Buffer bufspec = {
- &localbuf, &localbufsize, sizeof elemstr, 0, 1
+ &localbuf, &localbufsize, sizeof elemstr, 0
};
*localbuf = '\0';
@@ -2055,7 +2053,7 @@
size_t localbufsize = sizeof elemstr;
Buffer bufspec = {
- &localbuf, &localbufsize, sizeof elemstr, 0, 1
+ &localbuf, &localbufsize, sizeof elemstr, 0
};
*localbuf = '\0';
@@ -2985,7 +2983,7 @@
const char* const fmt = VA_ARG (*pva, char*);
size_t dummy_size = 0; // unused
- Buffer tmpbuf = { &fmtword, &dummy_size, _RWSTD_SIZE_MAX, 0, 1 };
+ Buffer tmpbuf = { &fmtword, &dummy_size, _RWSTD_SIZE_MAX, 0 };
const int len = _rw_pvasnprintf (tmpbuf, fmt, pva);
if (len < 0)
return -1;