From: Clément Bœsch Date: Sat, 3 Sep 2011 17:51:28 +0000 (+0200) Subject: av_string: add av_asprintf(). X-Git-Tag: rel20110916_inqubus2.b.0~4^2~110 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=61e2e2969127e4cb8e0d32151fed3e03515fe436;p=coroid%2Fffmpeg_saccubus.git av_string: add av_asprintf(). --- diff --git a/doc/APIchanges b/doc/APIchanges index 75c4d6f31..bd0611437 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 b573dd676..4cebbe04a 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 662af6b70..2be84a9ed 100644 --- a/libavutil/avstring.h +++ b/libavutil/avstring.h @@ -111,6 +111,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. */ char *av_d2str(double d); diff --git a/libavutil/avutil.h b/libavutil/avutil.h index f77cde783..06c0470ce 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, \