From 61e2e2969127e4cb8e0d32151fed3e03515fe436 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20B=C5=93sch?= Date: Sat, 3 Sep 2011 19:51:28 +0200 Subject: [PATCH] av_string: add av_asprintf(). --- doc/APIchanges | 3 +++ libavutil/avstring.c | 26 ++++++++++++++++++++++++++ libavutil/avstring.h | 10 ++++++++++ libavutil/avutil.h | 2 +- 4 files changed, 40 insertions(+), 1 deletion(-) diff --git a/doc/APIchanges b/doc/APIchanges index 75c4d6f310..bd06114379 100644 --- a/doc/APIchanges +++ b/doc/APIchanges @@ -13,6 +13,9 @@ libavutil: 2011-04-18 API changes, most recent first: +2011-09-xx - xxxxxxx - lavu 51.16.0 + Add av_asprintf(). + 2011-08-22 - dacd827 - lavf 53.10.0 Add av_find_program_from_stream(). diff --git a/libavutil/avstring.c b/libavutil/avstring.c index b573dd6761..4cebbe04a6 100644 --- a/libavutil/avstring.c +++ b/libavutil/avstring.c @@ -91,6 +91,32 @@ size_t av_strlcatf(char *dst, size_t size, const char *fmt, ...) return len; } +char *av_asprintf(const char *fmt, ...) +{ + char *p = NULL; + va_list va; + int len; + + va_start(va, fmt); + len = vsnprintf(NULL, 0, fmt, va); + va_end(va); + if (len < 0) + goto end; + + p = av_malloc(len + 1); + if (!p) + goto end; + + va_start(va, fmt); + len = vsnprintf(p, len + 1, fmt, va); + va_end(va); + if (len < 0) + av_freep(&p); + +end: + return p; +} + char *av_d2str(double d) { char *str= av_malloc(16); diff --git a/libavutil/avstring.h b/libavutil/avstring.h index 662af6b70d..2be84a9ed0 100644 --- a/libavutil/avstring.h +++ b/libavutil/avstring.h @@ -110,6 +110,16 @@ size_t av_strlcat(char *dst, const char *src, size_t size); */ size_t av_strlcatf(char *dst, size_t size, const char *fmt, ...) av_printf_format(3, 4); +/** + * Print arguments following specified format into a large enough auto + * allocated buffer. It is similar to GNU asprintf(). + * @param fmt printf-compatible format string, specifying how the + * following parameters are used. + * @return the allocated string + * @note You have to free the string yourself with av_free(). + */ +char *av_asprintf(const char *fmt, ...) av_printf_format(1, 2); + /** * Convert a number to a av_malloced string. */ diff --git a/libavutil/avutil.h b/libavutil/avutil.h index f77cde783d..06c0470ce7 100644 --- a/libavutil/avutil.h +++ b/libavutil/avutil.h @@ -40,7 +40,7 @@ #define AV_VERSION(a, b, c) AV_VERSION_DOT(a, b, c) #define LIBAVUTIL_VERSION_MAJOR 51 -#define LIBAVUTIL_VERSION_MINOR 15 +#define LIBAVUTIL_VERSION_MINOR 16 #define LIBAVUTIL_VERSION_MICRO 0 #define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \