summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libavutil/avstring.h14
-rw-r--r--libavutil/string.c14
2 files changed, 28 insertions, 0 deletions
diff --git a/libavutil/avstring.h b/libavutil/avstring.h
index bc24ea14d1..f25dd31d03 100644
--- a/libavutil/avstring.h
+++ b/libavutil/avstring.h
@@ -73,4 +73,18 @@ size_t av_strlcpy(char *dst, const char *src, size_t size);
*/
size_t av_strlcat(char *dst, const char *src, size_t size);
+/**
+ * Append output to a string, according to a format. Never write out of
+ * the destination buffer, and and always put a terminating 0 within
+ * the buffer.
+ * @param dst destination buffer (string to which the output is
+ * appended)
+ * @param size total size of the destination buffer
+ * @param fmt printf-compatible format string, specifying how the
+ * following parameters are used
+ * @return the length of the string that would have been generated
+ * if enough space had been available
+ */
+size_t av_strlcatf(char *dst, size_t size, const char *fmt, ...);
+
#endif /* AVUTIL_STRING_H */
diff --git a/libavutil/string.c b/libavutil/string.c
index 2f4de8ef50..8ee2a6b12f 100644
--- a/libavutil/string.c
+++ b/libavutil/string.c
@@ -19,6 +19,8 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
+#include <stdarg.h>
+#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include "avstring.h"
@@ -62,3 +64,15 @@ size_t av_strlcat(char *dst, const char *src, size_t size)
return len + strlen(src);
return len + av_strlcpy(dst + len, src, size - len);
}
+
+size_t av_strlcatf(char *dst, size_t size, const char *fmt, ...)
+{
+ int len = strlen(dst);
+ va_list vl;
+
+ va_start(vl, fmt);
+ len += vsnprintf(dst + len, size > len ? size - len : 0, fmt, vl);
+ va_end(vl);
+
+ return len;
+}