forked from FFmpeg/FFmpeg
lavf/avio_internal: add ffio_write_lines for line ending normalization
This commit is contained in:
parent
3be80ce299
commit
98eeef44aa
2 changed files with 42 additions and 0 deletions
|
@ -156,6 +156,17 @@ unsigned int ffio_read_leb(AVIOContext *s);
|
|||
|
||||
void ffio_write_leb(AVIOContext *s, unsigned val);
|
||||
|
||||
/**
|
||||
* Write a sequence of text lines, converting line endings.
|
||||
* All input line endings (LF, CRLF, CR) are converted to the configured line ending.
|
||||
* @param s The AVIOContext to write to
|
||||
* @param buf The buffer to write
|
||||
* @param size The size of the buffer, or <0 to use the full length of a null-terminated string
|
||||
* @param ending The line ending sequence to convert to, or NULL for \n
|
||||
*/
|
||||
void ffio_write_lines(AVIOContext *s, const unsigned char *buf, int size,
|
||||
const unsigned char *ending);
|
||||
|
||||
/**
|
||||
* Read size bytes from AVIOContext into buf.
|
||||
* Check that exactly size bytes have been read.
|
||||
|
|
|
@ -1004,6 +1004,37 @@ void ffio_write_leb(AVIOContext *s, unsigned val)
|
|||
}
|
||||
}
|
||||
|
||||
void ffio_write_lines(AVIOContext *s, const unsigned char *buf, int size,
|
||||
const unsigned char *ending)
|
||||
{
|
||||
int ending_len = ending ? strlen(ending) : 1;
|
||||
if (!ending)
|
||||
ending = "\n";
|
||||
if (size < 0)
|
||||
size = strlen(buf);
|
||||
|
||||
while (size > 0) {
|
||||
size_t len = 0;
|
||||
char last = 0;
|
||||
for (; len < size; len++) {
|
||||
last = buf[len];
|
||||
if (last == '\r' || last == '\n')
|
||||
break;
|
||||
}
|
||||
|
||||
avio_write(s, buf, len);
|
||||
avio_write(s, ending, ending_len);
|
||||
|
||||
buf += len + 1;
|
||||
size -= len + 1;
|
||||
|
||||
if (size > 0 && last == '\r' && buf[0] == '\n') {
|
||||
buf++;
|
||||
size--;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int ffio_fdopen(AVIOContext **s, URLContext *h)
|
||||
{
|
||||
uint8_t *buffer = NULL;
|
||||
|
|
Loading…
Add table
Reference in a new issue