Implement av_strlcatf(): a strlcat which adds a printf style formatted string
authorLuca Abeni <lucabe72@email.it>
Thu, 19 Jul 2007 06:36:02 +0000 (06:36 +0000)
committerLuca Abeni <lucabe72@email.it>
Thu, 19 Jul 2007 06:36:02 +0000 (06:36 +0000)
Originally committed as revision 9753 to svn://svn.ffmpeg.org/ffmpeg/trunk

libavutil/avstring.h
libavutil/string.c

index bc24ea14d1539b4725c7c4674737a5599c438f11..f25dd31d035496f84bd196023d99ed8cef3615c8 100644 (file)
@@ -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 */
index 2f4de8ef5025ebeec9b1e00fcdecdf7df32aab97..8ee2a6b12fc50ab16c7c1a4f33b7f5b99667b64f 100644 (file)
@@ -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;
+}