diff options
author | Stefano Sabatini | 2013-04-27 22:46:49 +0200 |
---|---|---|
committer | Stefano Sabatini | 2013-05-13 13:52:37 +0200 |
commit | 3a4c8788e3239e5ff89ed0aea7f4936bd6e62032 (patch) | |
tree | 71677b0abaad8ef0b40db266681d68d38fbe68bb | |
parent | e3984166a49f708d255eecce44824f77f160781e (diff) |
tools/ffeval: use av_dynarray2_add()
Simplify, increment robustness.
-rw-r--r-- | tools/ffeval.c | 32 |
1 files changed, 14 insertions, 18 deletions
diff --git a/tools/ffeval.c b/tools/ffeval.c index 0fab8775e6..4f60688b12 100644 --- a/tools/ffeval.c +++ b/tools/ffeval.c @@ -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; } } |