+eina_stringshare_printf

+eina_stringshare_nprintf
the long awaited printf functions for stringshare!


SVN revision: 50490
This commit is contained in:
Mike Blumenkrantz 2010-07-25 19:18:26 +00:00
parent 5967027157
commit 7ff1096672
2 changed files with 47 additions and 0 deletions

View File

@ -67,6 +67,8 @@
EAPI const char *eina_stringshare_add_length(const char *str, unsigned int slen) EINA_WARN_UNUSED_RESULT;
EAPI const char *eina_stringshare_add(const char *str) EINA_WARN_UNUSED_RESULT;
EAPI const char *eina_stringshare_printf(const char *fmt, ...) EINA_WARN_UNUSED_RESULT;
EAPI const char *eina_stringshare_nprintf(unsigned int len, const char *fmt, ...) EINA_WARN_UNUSED_RESULT;
EAPI const char *eina_stringshare_ref(const char *str);
EAPI void eina_stringshare_del(const char *str);
EAPI int eina_stringshare_strlen(const char *str) EINA_CONST EINA_WARN_UNUSED_RESULT;

View File

@ -1211,6 +1211,51 @@ eina_stringshare_add(const char *str)
return eina_stringshare_add_length(str, slen);
}
EAPI const char *
eina_stringshare_printf(const char *fmt, ...)
{
va_list args;
char *tmp;
const char *ret;
int len;
if (!fmt) return NULL;
va_start(args, fmt);
len = vasprintf(&tmp, fmt, args);
va_end(args);
if (len < 1)
return NULL;
ret = eina_stringshare_add_length(tmp, len);
free(tmp);
return ret;
}
EAPI const char *
eina_stringshare_nprintf(unsigned int len, const char *fmt, ...)
{
va_list args;
char *tmp;
int size;
if (!fmt) return NULL;
if (len < 1) return NULL;
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 eina_stringshare_add_length(tmp, len);
}
/**
* Increment references of the given shared string.
*