diff options
author | Leon van Stuivenberg <leonvs@iae.nl> | 2004-03-20 19:57:28 +0000 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2004-03-20 19:57:28 +0000 |
commit | 2a42b5c37f9bbbbbe38df8344363b45af53b68a0 (patch) | |
tree | 06f4528fd5f3d27fbc63cf4fe00dd8821728815f /libavformat | |
parent | 53c05b1eacd5f7dbfa3651b45e797adaea0a5ff8 (diff) | |
download | ffmpeg-2a42b5c37f9bbbbbe38df8344363b45af53b68a0.tar.gz |
support url_read which reads less then requested patch by (Leon van Stuivenberg <l dot vanstuivenberg at chello dot nl>)
this is needed for compatibility with tcp.c 1.10
Originally committed as revision 2911 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavformat')
-rw-r--r-- | libavformat/rtsp.c | 28 |
1 files changed, 21 insertions, 7 deletions
diff --git a/libavformat/rtsp.c b/libavformat/rtsp.c index 3d5469616f..c1c645bee3 100644 --- a/libavformat/rtsp.c +++ b/libavformat/rtsp.c @@ -562,6 +562,20 @@ void rtsp_parse_line(RTSPHeader *reply, const char *buf) } } +static int url_readbuf(URLContext *h, unsigned char *buf, int size) +{ + int ret, len; + + len = 0; + while (len < size) { + ret = url_read(h, buf+len, size-len); + if (ret < 1) + return ret; + len += ret; + } + return len; +} + /* skip a RTP/TCP interleaved packet */ static void rtsp_skip_packet(AVFormatContext *s) { @@ -569,7 +583,7 @@ static void rtsp_skip_packet(AVFormatContext *s) int ret, len, len1; uint8_t buf[1024]; - ret = url_read(rt->rtsp_hd, buf, 3); + ret = url_readbuf(rt->rtsp_hd, buf, 3); if (ret != 3) return; len = (buf[1] << 8) | buf[2]; @@ -581,7 +595,7 @@ static void rtsp_skip_packet(AVFormatContext *s) len1 = len; if (len1 > sizeof(buf)) len1 = sizeof(buf); - ret = url_read(rt->rtsp_hd, buf, len1); + ret = url_readbuf(rt->rtsp_hd, buf, len1); if (ret != len1) return; len -= len1; @@ -621,7 +635,7 @@ static void rtsp_send_cmd(AVFormatContext *s, for(;;) { q = buf; for(;;) { - if (url_read(rt->rtsp_hd, &ch, 1) != 1) + if (url_readbuf(rt->rtsp_hd, &ch, 1) != 1) break; if (ch == '\n') break; @@ -661,7 +675,7 @@ static void rtsp_send_cmd(AVFormatContext *s, if (content_length > 0) { /* leave some room for a trailing '\0' (useful for simple parsing) */ content = av_malloc(content_length + 1); - url_read(rt->rtsp_hd, content, content_length); + (void)url_readbuf(rt->rtsp_hd, content, content_length); content[content_length] = '\0'; } if (content_ptr) @@ -921,7 +935,7 @@ static int tcp_read_packet(AVFormatContext *s, RTSPStream **prtsp_st, #endif redo: for(;;) { - ret = url_read(rt->rtsp_hd, buf, 1); + ret = url_readbuf(rt->rtsp_hd, buf, 1); #ifdef DEBUG_RTP_TCP printf("ret=%d c=%02x [%c]\n", ret, buf[0], buf[0]); #endif @@ -930,7 +944,7 @@ static int tcp_read_packet(AVFormatContext *s, RTSPStream **prtsp_st, if (buf[0] == '$') break; } - ret = url_read(rt->rtsp_hd, buf, 3); + ret = url_readbuf(rt->rtsp_hd, buf, 3); if (ret != 3) return -1; id = buf[0]; @@ -941,7 +955,7 @@ static int tcp_read_packet(AVFormatContext *s, RTSPStream **prtsp_st, if (len > buf_size || len < 12) goto redo; /* get the data */ - ret = url_read(rt->rtsp_hd, buf, len); + ret = url_readbuf(rt->rtsp_hd, buf, len); if (ret != len) return -1; |