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 "".
This commit is contained in:
Cedric BAIL 2015-01-08 12:34:20 +01:00
parent 32d52ff563
commit 9a74e6aec4
2 changed files with 16 additions and 20 deletions

View File

@ -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);
}

View File

@ -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);