1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2025-08-10 06:10:52 +02:00

avformat/aviobuf: add a full string reading mode to read_line_to_bprint

Additionally:
* rename it to read_string_to_bprint
* split most of ff_read_line_to_bprint_overwrite into an internal
  function which can then be utilized to implement other
  functionality without duplicating code.

Signed-off-by: Jan Ekström <jan.ekstrom@24i.com>
This commit is contained in:
Jan Ekström
2021-09-20 14:22:43 +03:00
committed by Jan Ekström
parent 2761a7403b
commit 94f227bac1

View File

@@ -803,7 +803,13 @@ int ff_get_chomp_line(AVIOContext *s, char *buf, int maxlen)
return len; return len;
} }
static int64_t read_line_to_bprint(AVIOContext *s, AVBPrint *bp) typedef enum FFBPrintReadStringMode {
FFBPrintReadString = 0,
FFBPrintReadLine = 1,
} FFBPrintReadStringMode;
static int64_t read_string_to_bprint(AVIOContext *s, AVBPrint *bp,
FFBPrintReadStringMode mode)
{ {
int len, end; int len, end;
int64_t read = 0; int64_t read = 0;
@@ -814,7 +820,8 @@ static int64_t read_line_to_bprint(AVIOContext *s, AVBPrint *bp)
len = 0; len = 0;
do { do {
c = avio_r8(s); c = avio_r8(s);
end = (c == '\r' || c == '\n' || c == '\0'); end = ((mode == FFBPrintReadLine && (c == '\r' || c == '\n')) ||
c == '\0');
if (!end) if (!end)
tmp[len++] = c; tmp[len++] = c;
} while (!end && len < sizeof(tmp)); } while (!end && len < sizeof(tmp));
@@ -822,7 +829,8 @@ static int64_t read_line_to_bprint(AVIOContext *s, AVBPrint *bp)
read += len; read += len;
} while (!end); } while (!end);
if (c == '\r' && avio_r8(s) != '\n' && !avio_feof(s)) if (mode == FFBPrintReadLine &&
c == '\r' && avio_r8(s) != '\n' && !avio_feof(s))
avio_skip(s, -1); avio_skip(s, -1);
if (!c && s->error) if (!c && s->error)
@@ -834,12 +842,13 @@ static int64_t read_line_to_bprint(AVIOContext *s, AVBPrint *bp)
return read; return read;
} }
int64_t ff_read_line_to_bprint_overwrite(AVIOContext *s, AVBPrint *bp) static int64_t read_string_to_bprint_overwrite(AVIOContext *s, AVBPrint *bp,
FFBPrintReadStringMode mode)
{ {
int64_t ret; int64_t ret;
av_bprint_clear(bp); av_bprint_clear(bp);
ret = read_line_to_bprint(s, bp); ret = read_string_to_bprint(s, bp, mode);
if (ret < 0) if (ret < 0)
return ret; return ret;
@@ -849,6 +858,11 @@ int64_t ff_read_line_to_bprint_overwrite(AVIOContext *s, AVBPrint *bp)
return bp->len; return bp->len;
} }
int64_t ff_read_line_to_bprint_overwrite(AVIOContext *s, AVBPrint *bp)
{
return read_string_to_bprint_overwrite(s, bp, FFBPrintReadLine);
}
int avio_get_str(AVIOContext *s, int maxlen, char *buf, int buflen) int avio_get_str(AVIOContext *s, int maxlen, char *buf, int buflen)
{ {
int i; int i;