From 9bf56c1756955a4c2e7f9066b2cb6b61503dfd67 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nils=20O=2E=20Sel=C3=A5sdal?= Date: Sun, 18 Nov 2012 14:04:57 +0100 Subject: [PATCH] Fix and clarify gnuf_printf --- include/ucore/ucore_buffer.h | 7 ++++-- src/ucore_buffer.c | 7 +++--- test/test_buffer.c | 45 ++++++++++++++++++++++++++++++++++++ 3 files changed, 54 insertions(+), 5 deletions(-) diff --git a/include/ucore/ucore_buffer.h b/include/ucore/ucore_buffer.h index 3ba5712..851d72d 100644 --- a/include/ucore/ucore_buffer.h +++ b/include/ucore/ucore_buffer.h @@ -59,13 +59,16 @@ void uc_gbuf_unref(GBuf *buf); int uc_gbuf_append(GBuf *buf,const void *data,size_t len); /** Do printf formatting on a GBuf. - * The buffer will grow as needed. + * The buffer will grow as needed, + * The buffer ensures that the added string will be nul terminated, + * however the nul terminator is not counted in the ->used member. * * @param buf The GBuf * @param fmt printf stype formatting string * @param ... format arguments * - * @return The number of chars written, or negative if an error occurs + * @return The number of chars written excluding the terminating nul + * character , or negative if an error occurs */ int uc_gbuf_printf(GBuf *buf, const char *fmt, ...); diff --git a/src/ucore_buffer.c b/src/ucore_buffer.c index 2320422..b1e41c8 100644 --- a/src/ucore_buffer.c +++ b/src/ucore_buffer.c @@ -74,7 +74,7 @@ int uc_gbuf_printf(GBuf *buf, const char *fmt, ...) char *gbuf; remaining = uc_gbuf_remaining(buf); - if(rc >= remaining) { + if(rc >= remaining) { if(uc_gbuf_grow(buf, buf->len + (rc - remaining) + 1)) { rc = -1; va_end(apc); @@ -90,8 +90,9 @@ int uc_gbuf_printf(GBuf *buf, const char *fmt, ...) } while(rc >= remaining); - if(rc > 0) - buf->used += rc; + if(rc > 0) { + buf->used += rc; + } va_end(ap); diff --git a/test/test_buffer.c b/test/test_buffer.c index ebbd6c3..a74ad55 100644 --- a/test/test_buffer.c +++ b/test/test_buffer.c @@ -11,6 +11,22 @@ START_TEST (test_new_gbuf) fail_if(buf->ref_cnt != 1); fail_if(buf->buf == NULL); fail_if(buf->used != 0); + +END_TEST + +START_TEST (test_gbuf_grow) + GBuf *buf = uc_new_gbuf(33); + int rc; + + fail_if(buf == NULL); + fail_if(buf->len != 33); + + rc = uc_gbuf_grow(buf, 128); + + fail_if(rc != 0); + fail_if(buf->len < 128 + 33); + fail_if(buf->used != 0); + END_TEST START_TEST (test_gbuf_append1) @@ -27,6 +43,32 @@ START_TEST (test_gbuf_append1) END_TEST +START_TEST (test_gbuf_printf1) + int rc; + GBuf *buf = uc_new_gbuf(10); + + fail_if(buf == NULL); + + rc = uc_gbuf_printf(buf, "test %d", 1); + fail_if(rc != 6, "rc was %d", rc); + fail_if(buf->used != 6, "buf->used was %d", buf->used); + fail_if(strcmp("test 1", buf->buf) != 0); + +END_TEST + +START_TEST (test_gbuf_printf2) + int rc; + GBuf *buf = uc_new_gbuf(8); + + fail_if(buf == NULL); + + rc = uc_gbuf_printf(buf, "test %d test %d test %d", 1, 2, 3); + fail_if(rc != 20, "rc was %d", rc); + fail_if(buf->used != 20, "buf->used was %d", buf->used); + fail_if(strcmp("test 1 test 2 test 3", buf->buf) != 0); + +END_TEST + Suite *buffer_suite(void) { @@ -34,6 +76,9 @@ Suite *buffer_suite(void) TCase *tc = tcase_create("buffer (GBuf) tests"); tcase_add_test(tc, test_new_gbuf); tcase_add_test(tc, test_gbuf_append1); + tcase_add_test(tc, test_gbuf_grow); + tcase_add_test(tc, test_gbuf_printf1); + tcase_add_test(tc, test_gbuf_printf2); suite_add_tcase(s, tc);