mirror of
https://github.com/xenia-project/FFmpeg.git
synced 2024-11-26 13:00:33 +00:00
avio: add avio_get_str()
Signed-off-by: Ronald S. Bultje <rsbultje@gmail.com>
(cherry picked from commit 41d8555f72
)
This commit is contained in:
parent
a960576f20
commit
3e1a8e1ec1
@ -525,6 +525,20 @@ unsigned int avio_rl24(AVIOContext *s);
|
||||
unsigned int avio_rl32(AVIOContext *s);
|
||||
uint64_t avio_rl64(AVIOContext *s);
|
||||
|
||||
/**
|
||||
* Read a string from pb into buf. The reading will terminate when either
|
||||
* a NULL character was encountered, maxlen bytes have been read, or nothing
|
||||
* more can be read from pb. The result is guaranteed to be NULL-terminated, it
|
||||
* will be truncated if buf is too small.
|
||||
* Note that the string is not interpreted or validated in any way, it
|
||||
* might get truncated in the middle of a sequence for multi-byte encodings.
|
||||
*
|
||||
* @return number of bytes read (is always <= maxlen).
|
||||
* If reading ends on EOF or error, the return value will be one more than
|
||||
* bytes actually read.
|
||||
*/
|
||||
int avio_get_str(AVIOContext *pb, int maxlen, char *buf, int buflen);
|
||||
|
||||
/**
|
||||
* Read a UTF-16 string from pb and convert it to UTF-8.
|
||||
* The reading will terminate when either a null or invalid character was
|
||||
|
@ -705,6 +705,23 @@ int ff_get_line(AVIOContext *s, char *buf, int maxlen)
|
||||
return i;
|
||||
}
|
||||
|
||||
int avio_get_str(AVIOContext *s, int maxlen, char *buf, int buflen)
|
||||
{
|
||||
int i;
|
||||
|
||||
// reserve 1 byte for terminating 0
|
||||
buflen = FFMIN(buflen - 1, maxlen);
|
||||
for (i = 0; i < buflen; i++)
|
||||
if (!(buf[i] = avio_r8(s)))
|
||||
return i + 1;
|
||||
if (buflen)
|
||||
buf[i] = 0;
|
||||
for (; i < maxlen; i++)
|
||||
if (!avio_r8(s))
|
||||
return i + 1;
|
||||
return maxlen;
|
||||
}
|
||||
|
||||
#define GET_STR16(type, read) \
|
||||
int avio_get_str16 ##type(AVIOContext *pb, int maxlen, char *buf, int buflen)\
|
||||
{\
|
||||
|
Loading…
Reference in New Issue
Block a user