tools/ffeval: use av_dynarray2_add()
authorStefano Sabatini <stefasab@gmail.com>
Sat, 27 Apr 2013 20:46:49 +0000 (22:46 +0200)
committerStefano Sabatini <stefasab@gmail.com>
Mon, 13 May 2013 11:52:37 +0000 (13:52 +0200)
Simplify, increment robustness.

tools/ffeval.c

index 0fab877..4f60688 100644 (file)
@@ -24,6 +24,7 @@
 #endif
 
 #include "libavutil/eval.h"
+#include "libavutil/mem.h"
 
 #if !HAVE_GETOPT
 #include "compat/getopt.c"
@@ -47,20 +48,26 @@ static void usage(void)
            "-p PROMPT         set output prompt\n");
 }
 
-#define MAX_BLOCK_SIZE SIZE_MAX
-
 int main(int argc, char **argv)
 {
-    size_t buf_size = 256;
-    char *buf = av_malloc(buf_size);
+    int buf_size = 0;
+    char *buf = NULL;
     const char *outfilename = NULL, *infilename = NULL;
     FILE *outfile = NULL, *infile = NULL;
     const char *prompt = "=> ";
     int count = 0, echo = 0;
     int c;
 
-    av_max_alloc(MAX_BLOCK_SIZE);
+#define GROW_ARRAY()                                                    \
+    do {                                                                \
+        if (!av_dynarray2_add((void **)&buf, &buf_size, 1, NULL)) {     \
+            av_log(NULL, AV_LOG_ERROR,                                  \
+                   "Memory allocation problem occurred\n");             \
+            return 1;                                                   \
+        }                                                               \
+    } while (0)
 
+    GROW_ARRAY();
     while ((c = getopt(argc, argv, "ehi:o:p:")) != -1) {
         switch (c) {
         case 'e':
@@ -120,19 +127,8 @@ int main(int argc, char **argv)
             }
             count = 0;
         } else {
-            if (count >= buf_size-1) {
-                if (buf_size == MAX_BLOCK_SIZE) {
-                    av_log(NULL, AV_LOG_ERROR, "Memory allocation problem, "
-                           "max block size '%zd' reached\n", MAX_BLOCK_SIZE);
-                    return 1;
-                }
-                buf_size = FFMIN(buf_size, MAX_BLOCK_SIZE / 2) * 2;
-                buf = av_realloc_f((void *)buf, buf_size, 1);
-                if (!buf) {
-                    av_log(NULL, AV_LOG_ERROR, "Memory allocation problem occurred\n");
-                    return 1;
-                }
-            }
+            if (count >= buf_size-1)
+                GROW_ARRAY();
             buf[count++] = c;
         }
     }