int (*write_packet)(void *opaque, uint8_t *buf, int buf_size),
int64_t (*seek)(void *opaque, int64_t offset, int whence))
{
+ memset(s, 0, sizeof(AVIOContext));
+
s->buffer = buffer;
s->orig_buffer_size =
s->buffer_size = buffer_size;
int (*write_packet)(void *opaque, uint8_t *buf, int buf_size),
int64_t (*seek)(void *opaque, int64_t offset, int whence))
{
- AVIOContext *s = av_mallocz(sizeof(AVIOContext));
+ AVIOContext *s = av_malloc(sizeof(AVIOContext));
if (!s)
return NULL;
ffio_init_context(s, buffer, buffer_size, write_flag, opaque,
return i;
}
+int64_t ff_read_line_to_bprint(AVIOContext *s, AVBPrint *bp)
+{
+ int len, end;
+ int64_t read = 0;
+ char tmp[1024];
+ char c;
+
+ do {
+ len = 0;
+ do {
+ c = avio_r8(s);
+ end = (c == '\r' || c == '\n' || c == '\0');
+ if (!end)
+ tmp[len++] = c;
+ } while (!end && len < sizeof(tmp));
+ av_bprint_append_data(bp, tmp, len);
+ read += len;
+ } while (!end);
+
+ if (c == '\r' && avio_r8(s) != '\n' && !avio_feof(s))
+ avio_skip(s, -1);
+
+ if (!c && s->error)
+ return s->error;
+
+ if (!c && !read && avio_feof(s))
+ return AVERROR_EOF;
+
+ return read;
+}
+
+int64_t ff_read_line_to_bprint_overwrite(AVIOContext *s, AVBPrint *bp)
+{
+ int64_t ret;
+
+ av_bprint_clear(bp);
+ ret = ff_read_line_to_bprint(s, bp);
+ if (ret < 0)
+ return ret;
+
+ if (!av_bprint_is_complete(bp))
+ return AVERROR(ENOMEM);
+
+ return bp->len;
+}
+
int avio_get_str(AVIOContext *s, int maxlen, char *buf, int buflen)
{
int i;