]> git.sesse.net Git - ffmpeg/blobdiff - libavutil/bprint.c
Install libavutil/version.h
[ffmpeg] / libavutil / bprint.c
index 115bf0c8de6aebbf8c5f492cffe91fba86c67488..6e59f6b69e0a967eb0b89faf7c6bc30716cd386a 100644 (file)
 #include "error.h"
 #include "mem.h"
 
+#if defined(_WIN32)
+
+static int vsnprintf_fixed(char *s, size_t n, const char *format, va_list va)
+{
+    va_list va2;
+    int r;
+
+    va_copy(va2, va);
+    r = vsnprintf(s, n, format, va2);
+    va_end(va2);
+    if (r == -1)
+        r = _vscprintf(format, va);
+    return r;
+}
+
+#define vsnprintf vsnprintf_fixed
+
+#endif
+
 #define av_bprint_room(buf) ((buf)->size - FFMIN((buf)->len, (buf)->size))
 #define av_bprint_is_allocated(buf) ((buf)->str != (buf)->reserved_internal_buffer)
 
@@ -78,6 +97,15 @@ void av_bprint_init(AVBPrint *buf, unsigned size_init, unsigned size_max)
         av_bprint_alloc(buf, size_init - 1);
 }
 
+void av_bprint_init_for_buffer(AVBPrint *buf, char *buffer, unsigned size)
+{
+    buf->str      = buffer;
+    buf->len      = 0;
+    buf->size     = size;
+    buf->size_max = size;
+    *buf->str = 0;
+}
+
 void av_bprintf(AVBPrint *buf, const char *fmt, ...)
 {
     unsigned room;
@@ -178,35 +206,40 @@ static void bprint_pascal(AVBPrint *b, unsigned size)
 int main(void)
 {
     AVBPrint b;
+    char buf[256];
 
     av_bprint_init(&b, 0, -1);
     bprint_pascal(&b, 5);
-    printf("Short text in unlimited buffer: %zu/%u\n", strlen(b.str), b.len);
+    printf("Short text in unlimited buffer: %u/%u\n", (unsigned)strlen(b.str), b.len);
     printf("%s\n", b.str);
     av_bprint_finalize(&b, NULL);
 
     av_bprint_init(&b, 0, -1);
     bprint_pascal(&b, 25);
-    printf("Long text in unlimited buffer: %zu/%u\n", strlen(b.str), b.len);
+    printf("Long text in unlimited buffer: %u/%u\n", (unsigned)strlen(b.str), b.len);
     av_bprint_finalize(&b, NULL);
 
     av_bprint_init(&b, 0, 2048);
     bprint_pascal(&b, 25);
-    printf("Long text in limited buffer: %zu/%u\n", strlen(b.str), b.len);
+    printf("Long text in limited buffer: %u/%u\n", (unsigned)strlen(b.str), b.len);
     av_bprint_finalize(&b, NULL);
 
     av_bprint_init(&b, 0, 1);
     bprint_pascal(&b, 5);
-    printf("Short text in automatic buffer: %zu/%u\n", strlen(b.str), b.len);
+    printf("Short text in automatic buffer: %u/%u\n", (unsigned)strlen(b.str), b.len);
 
     av_bprint_init(&b, 0, 1);
     bprint_pascal(&b, 25);
-    printf("Long text in automatic buffer: %zu/%u\n", strlen(b.str), b.len);
+    printf("Long text in automatic buffer: %u/%u\n", (unsigned)strlen(b.str)/8*8, b.len);
     /* Note that the size of the automatic buffer is arch-dependant. */
 
     av_bprint_init(&b, 0, 0);
     bprint_pascal(&b, 25);
-    printf("Long text count only buffer: %zu/%u\n", strlen(b.str), b.len);
+    printf("Long text count only buffer: %u/%u\n", (unsigned)strlen(b.str), b.len);
+
+    av_bprint_init_for_buffer(&b, buf, sizeof(buf));
+    bprint_pascal(&b, 25);
+    printf("Long text count only buffer: %u/%u\n", (unsigned)strlen(buf), b.len);
 
     return 0;
 }