mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-01-08 13:22:53 +02:00
tools/ffeval: use av_dynarray2_add()
Simplify, increment robustness.
This commit is contained in:
parent
e3984166a4
commit
3a4c8788e3
@ -24,6 +24,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "libavutil/eval.h"
|
#include "libavutil/eval.h"
|
||||||
|
#include "libavutil/mem.h"
|
||||||
|
|
||||||
#if !HAVE_GETOPT
|
#if !HAVE_GETOPT
|
||||||
#include "compat/getopt.c"
|
#include "compat/getopt.c"
|
||||||
@ -47,20 +48,26 @@ static void usage(void)
|
|||||||
"-p PROMPT set output prompt\n");
|
"-p PROMPT set output prompt\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
#define MAX_BLOCK_SIZE SIZE_MAX
|
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
size_t buf_size = 256;
|
int buf_size = 0;
|
||||||
char *buf = av_malloc(buf_size);
|
char *buf = NULL;
|
||||||
const char *outfilename = NULL, *infilename = NULL;
|
const char *outfilename = NULL, *infilename = NULL;
|
||||||
FILE *outfile = NULL, *infile = NULL;
|
FILE *outfile = NULL, *infile = NULL;
|
||||||
const char *prompt = "=> ";
|
const char *prompt = "=> ";
|
||||||
int count = 0, echo = 0;
|
int count = 0, echo = 0;
|
||||||
int c;
|
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) {
|
while ((c = getopt(argc, argv, "ehi:o:p:")) != -1) {
|
||||||
switch (c) {
|
switch (c) {
|
||||||
case 'e':
|
case 'e':
|
||||||
@ -120,19 +127,8 @@ int main(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
count = 0;
|
count = 0;
|
||||||
} else {
|
} else {
|
||||||
if (count >= buf_size-1) {
|
if (count >= buf_size-1)
|
||||||
if (buf_size == MAX_BLOCK_SIZE) {
|
GROW_ARRAY();
|
||||||
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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
buf[count++] = c;
|
buf[count++] = c;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user