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; } }