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:
parent
2761a7403b
commit
94f227bac1
@ -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;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user