From 7ff1096672e084adaff5a69c5e591e0363ee97ad Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Sun, 25 Jul 2010 19:18:26 +0000 Subject: [PATCH] +eina_stringshare_printf +eina_stringshare_nprintf the long awaited printf functions for stringshare! SVN revision: 50490 --- legacy/eina/src/include/eina_stringshare.h | 2 + legacy/eina/src/lib/eina_stringshare.c | 45 ++++++++++++++++++++++ 2 files changed, 47 insertions(+) diff --git a/legacy/eina/src/include/eina_stringshare.h b/legacy/eina/src/include/eina_stringshare.h index 72b9a1b55e..eed471a7c4 100644 --- a/legacy/eina/src/include/eina_stringshare.h +++ b/legacy/eina/src/include/eina_stringshare.h @@ -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; diff --git a/legacy/eina/src/lib/eina_stringshare.c b/legacy/eina/src/lib/eina_stringshare.c index 939c1992d1..c7b2bd07ca 100644 --- a/legacy/eina/src/lib/eina_stringshare.c +++ b/legacy/eina/src/lib/eina_stringshare.c @@ -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. *