From 0802a4aa082008bddb5a42b94143d86849277165 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Wilfried=20G=C3=B6esgens?= Date: Tue, 15 Dec 2009 20:27:01 +0000 Subject: [PATCH] * fix StrBufIsNumber; its not used right now, but it should be sane ;-) * add more tests --- libcitadel/lib/stringbuf.c | 55 +++++++++++++++++-------------- libcitadel/tests/stringbuf_test.c | 44 ++++++++++++++++++++++--- 2 files changed, 70 insertions(+), 29 deletions(-) diff --git a/libcitadel/lib/stringbuf.c b/libcitadel/lib/stringbuf.c index ba0b94e18..c882189c9 100644 --- a/libcitadel/lib/stringbuf.c +++ b/libcitadel/lib/stringbuf.c @@ -30,22 +30,22 @@ int BaseStrBufSize = 64; const char *StrBufNOTNULL = ((char*) NULL) - 1; const char HexList[256][3] = { -"00","01","02","03","04","05","06","07","08","09","0A","0B","0C","0D","0E","0F", -"10","11","12","13","14","15","16","17","18","19","1A","1B","1C","1D","1E","1F", -"20","21","22","23","24","25","26","27","28","29","2A","2B","2C","2D","2E","2F", -"30","31","32","33","34","35","36","37","38","39","3A","3B","3C","3D","3E","3F", -"40","41","42","43","44","45","46","47","48","49","4A","4B","4C","4D","4E","4F", -"50","51","52","53","54","55","56","57","58","59","5A","5B","5C","5D","5E","5F", -"60","61","62","63","64","65","66","67","68","69","6A","6B","6C","6D","6E","6F", -"70","71","72","73","74","75","76","77","78","79","7A","7B","7C","7D","7E","7F", -"80","81","82","83","84","85","86","87","88","89","8A","8B","8C","8D","8E","8F", -"90","91","92","93","94","95","96","97","98","99","9A","9B","9C","9D","9E","9F", -"A0","A1","A2","A3","A4","A5","A6","A7","A8","A9","AA","AB","AC","AD","AE","AF", -"B0","B1","B2","B3","B4","B5","B6","B7","B8","B9","BA","BB","BC","BD","BE","BF", -"C0","C1","C2","C3","C4","C5","C6","C7","C8","C9","CA","CB","CC","CD","CE","CF", -"D0","D1","D2","D3","D4","D5","D6","D7","D8","D9","DA","DB","DC","DD","DE","DF", -"E0","E1","E2","E3","E4","E5","E6","E7","E8","E9","EA","EB","EC","ED","EE","EF", -"F0","F1","F2","F3","F4","F5","F6","F7","F8","F9","FA","FB","FC","FD","FE","FF"}; + "00","01","02","03","04","05","06","07","08","09","0A","0B","0C","0D","0E","0F", + "10","11","12","13","14","15","16","17","18","19","1A","1B","1C","1D","1E","1F", + "20","21","22","23","24","25","26","27","28","29","2A","2B","2C","2D","2E","2F", + "30","31","32","33","34","35","36","37","38","39","3A","3B","3C","3D","3E","3F", + "40","41","42","43","44","45","46","47","48","49","4A","4B","4C","4D","4E","4F", + "50","51","52","53","54","55","56","57","58","59","5A","5B","5C","5D","5E","5F", + "60","61","62","63","64","65","66","67","68","69","6A","6B","6C","6D","6E","6F", + "70","71","72","73","74","75","76","77","78","79","7A","7B","7C","7D","7E","7F", + "80","81","82","83","84","85","86","87","88","89","8A","8B","8C","8D","8E","8F", + "90","91","92","93","94","95","96","97","98","99","9A","9B","9C","9D","9E","9F", + "A0","A1","A2","A3","A4","A5","A6","A7","A8","A9","AA","AB","AC","AD","AE","AF", + "B0","B1","B2","B3","B4","B5","B6","B7","B8","B9","BA","BB","BC","BD","BE","BF", + "C0","C1","C2","C3","C4","C5","C6","C7","C8","C9","CA","CB","CC","CD","CE","CF", + "D0","D1","D2","D3","D4","D5","D6","D7","D8","D9","DA","DB","DC","DD","DE","DF", + "E0","E1","E2","E3","E4","E5","E6","E7","E8","E9","EA","EB","EC","ED","EE","EF", + "F0","F1","F2","F3","F4","F5","F6","F7","F8","F9","FA","FB","FC","FD","FE","FF"}; /** * @defgroup StrBuf Stringbuffer, A class for manipulating strings with dynamic buffers @@ -407,7 +407,7 @@ StrBuf* NewStrBufPlain(const char* ptr, int nChars) dbg_Init(NewBuf) - return NewBuf; + return NewBuf; } /** @@ -599,17 +599,22 @@ int StrToi(const StrBuf *Buf) /** * @ingroup StrBuf * @brief Checks to see if the string is a pure number + * @param Buf The buffer to inspect + * @returns 1 if its a pure number, 0, if not. */ int StrBufIsNumber(const StrBuf *Buf) { - char * pEnd; - if (Buf == NULL) { + char * pEnd; + if ((Buf == NULL) || (Buf->BufUsed == 0)) { + return 0; + } + strtoll(Buf->buf, &pEnd, 10); + if (pEnd == Buf->buf) + return 0; + if ((pEnd != NULL) && (pEnd == Buf->buf + Buf->BufUsed)) + return 1; + if (Buf->buf == pEnd) + return 0; return 0; - } - strtoll(Buf->buf, &pEnd, 10); - if (pEnd == NULL && ((Buf->buf)-pEnd) != 0) { - return 1; - } - return 0; } /** * @ingroup StrBuf diff --git a/libcitadel/tests/stringbuf_test.c b/libcitadel/tests/stringbuf_test.c index d98c00e7c..51e5f6678 100644 --- a/libcitadel/tests/stringbuf_test.c +++ b/libcitadel/tests/stringbuf_test.c @@ -17,15 +17,32 @@ * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ +#define SHOW_ME_VAPPEND_PRINTF #include #include #include +#include #include "stringbuf_test.h" #include "../lib/libcitadel.h" +/* + * Stolen from wc_printf; we need to test that other printf too... + */ +static void TEST_StrBufAppendPrintf(StrBuf *WBuf, const char *format,...) +{ + va_list arg_ptr; + + if (WBuf == NULL) + return; + + va_start(arg_ptr, format); + StrBufVAppendPrintf(WBuf, format, arg_ptr); + va_end(arg_ptr); +} + static void TestRevalidateStrBuf(StrBuf *Buf) { CU_ASSERT(strlen(ChrPtr(Buf)) == StrLength(Buf)); @@ -36,6 +53,7 @@ static void TestCreateBuf(void) { StrBuf *Buf; StrBuf *Buf2; + StrBuf *Buf3; long len; long i; char *ch; @@ -93,6 +111,21 @@ static void TestCreateBuf(void) TestRevalidateStrBuf(Buf); StrBufShrinkToFit(Buf, 1); TestRevalidateStrBuf(Buf); + FreeStrBuf(&Buf); + + Buf = NewStrBufPlain(HKEY("ABC")); + TestRevalidateStrBuf(Buf); + len = StrLength(Buf); + for (i=0; i< 500; i ++) + { + TEST_StrBufAppendPrintf(Buf, "%s", "ABC"); + len += 3; + CU_ASSERT(StrLength(Buf) == len); + } + TestRevalidateStrBuf(Buf); + StrBufShrinkToFit(Buf, 1); + TestRevalidateStrBuf(Buf); + Buf2 = NewStrBufDup(Buf); CU_ASSERT(StrLength(Buf) == StrLength(Buf2)); @@ -107,17 +140,20 @@ static void TestCreateBuf(void) FLUSHStrBuf(Buf); CU_ASSERT(StrLength(Buf) == 0); - FreeStrBuf(&Buf); + HFreeStrBuf(NULL); HFreeStrBuf(Buf2); - CU_ASSERT(Buf == NULL); CU_ASSERT(Buf2 != NULL); - + FreeStrBuf(&Buf); + CU_ASSERT(Buf == NULL); + Buf2 = NewStrBuf(); + Buf3 = NewStrBufPlain(HKEY("abcd")); Buf = NewStrBufPlain(HKEY("123456")); - CU_ASSERT(StrBufIsNumber(Buf) == 1); ///Todo: this is buggy. + CU_ASSERT(StrBufIsNumber(Buf) == 1); CU_ASSERT(StrBufIsNumber(NULL) == 0); CU_ASSERT(StrBufIsNumber(Buf2) == 0); + CU_ASSERT(StrBufIsNumber(Buf3) == 0); CU_ASSERT(StrTol(Buf) == 123456); CU_ASSERT(StrTol(NULL) == 0); -- 2.39.2