From 9a74e6aec48e1609e220c99966fae04f84fd82c8 Mon Sep 17 00:00:00 2001 From: Cedric BAIL Date: Thu, 8 Jan 2015 12:34:20 +0100 Subject: [PATCH] eina: all Eina_Stringshare printf variant now return empty string as expected. Previously Eina_Stringshare printf variant where returning NULL with ("%s", ""). This is highly disturbing as you would have gotten "(null)", if you asked for ("s", NULL). To clarify and make things logical, we now return "". --- src/lib/eina/eina_stringshare.c | 30 +++++++++++--------------- src/tests/eina/eina_test_stringshare.c | 6 ++++-- 2 files changed, 16 insertions(+), 20 deletions(-) diff --git a/src/lib/eina/eina_stringshare.c b/src/lib/eina/eina_stringshare.c index 1699ea32e8..b69d3959ea 100644 --- a/src/lib/eina/eina_stringshare.c +++ b/src/lib/eina/eina_stringshare.c @@ -618,7 +618,7 @@ eina_stringshare_printf(const char *fmt, ...) { va_list args; char *tmp = NULL; - const char *ret; + const char *ret = ""; int len; if (!fmt) @@ -628,15 +628,12 @@ eina_stringshare_printf(const char *fmt, ...) len = vasprintf(&tmp, fmt, args); va_end(args); - if (len < 1) - { - free(tmp); - return NULL; - } + if (len < 1) goto on_error; ret = eina_stringshare_add_length(tmp, len); - free(tmp); + on_error: + free(tmp); return ret; } @@ -644,7 +641,7 @@ EAPI Eina_Stringshare * eina_stringshare_vprintf(const char *fmt, va_list args) { char *tmp = NULL; - const char *ret; + const char *ret = ""; int len; if (!fmt) @@ -652,15 +649,12 @@ eina_stringshare_vprintf(const char *fmt, va_list args) len = vasprintf(&tmp, fmt, args); - if (len < 1) - { - free(tmp); - return NULL; - } + if (len < 1) goto on_error; ret = eina_stringshare_add_length(tmp, len); - free(tmp); + on_error: + free(tmp); return ret; } @@ -674,17 +668,17 @@ eina_stringshare_nprintf(unsigned int len, const char *fmt, ...) if (!fmt) return NULL; - if (len < 1) - return NULL; + if (len == 0) + return ""; - tmp = alloca(sizeof(char) * len + 1); + tmp = alloca(sizeof(char) * (len + 1)); va_start(args, fmt); size = vsnprintf(tmp, len, fmt, args); va_end(args); if (size < 1) - return NULL; + return ""; return eina_stringshare_add_length(tmp, size); } diff --git a/src/tests/eina/eina_test_stringshare.c b/src/tests/eina/eina_test_stringshare.c index 13c72479ae..66f2995ddd 100644 --- a/src/tests/eina/eina_test_stringshare.c +++ b/src/tests/eina/eina_test_stringshare.c @@ -210,8 +210,10 @@ START_TEST(eina_stringshare_print) const char *t3; fail_if(eina_stringshare_printf(0) != NULL); - fail_if(eina_stringshare_printf("%s", "") != NULL); - fail_if(eina_stringshare_nprintf(0, "%s", "") != NULL); + fail_if(eina_stringshare_printf("%s", "") == NULL); + fail_if(strlen(eina_stringshare_printf("%s", "")) > 0); + fail_if(eina_stringshare_nprintf(0, "%s", "") == NULL); + fail_if(strlen(eina_stringshare_nprintf(0, "%s", "")) > 0); t1 = eina_stringshare_printf("x%sy", TEST1); t2 = my_vprintf("x%sy", TEST1);