diff options
Diffstat (limited to 'ffmpeg/tools/ffeval.c')
| -rw-r--r-- | ffmpeg/tools/ffeval.c | 41 |
1 files changed, 19 insertions, 22 deletions
diff --git a/ffmpeg/tools/ffeval.c b/ffmpeg/tools/ffeval.c index 0fab877..66b1032 100644 --- a/ffmpeg/tools/ffeval.c +++ b/ffmpeg/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': @@ -111,28 +118,18 @@ int main(int argc, char **argv) buf[count] = 0; if (buf[0] != '#') { - av_expr_parse_and_eval(&d, buf, - NULL, NULL, - NULL, NULL, NULL, NULL, NULL, 0, NULL); + int ret = av_expr_parse_and_eval(&d, buf, + NULL, NULL, + NULL, NULL, NULL, NULL, NULL, 0, NULL); if (echo) fprintf(outfile, "%s ", buf); - fprintf(outfile, "%s%f\n", prompt, d); + if (ret >= 0) fprintf(outfile, "%s%f\n", prompt, d); + else fprintf(outfile, "%s%s\n", prompt, av_err2str(ret)); } 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; } } |
