siff: simplify code by using ffio_limit()
authorMichael Niedermayer <michaelni@gmx.at>
Mon, 19 Dec 2011 18:23:56 +0000 (19:23 +0100)
committerMichael Niedermayer <michaelni@gmx.at>
Tue, 3 Jan 2012 18:49:56 +0000 (19:49 +0100)
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit b08a742526d05bcf300af820da5c79d2a05f9959)

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
libavformat/siff.c

index 51dc694..1a3f0a4 100644 (file)
@@ -22,6 +22,7 @@
 #include "libavutil/intreadwrite.h"
 #include "avformat.h"
 #include "internal.h"
+#include "avio_internal.h"
 
 enum SIFFTags{
     TAG_SIFF = MKTAG('S', 'I', 'F', 'F'),
@@ -201,18 +202,16 @@ static int siff_read_packet(AVFormatContext *s, AVPacket *pkt)
         }
 
         if (!c->curstrm){
-            int64_t fsize= avio_size(s->pb);
-            size = c->pktsize - c->sndsize;
-            if(fsize>0)
-                size= FFMIN(size, fsize - avio_tell(s->pb) + c->gmcsize + 3);
-            if(size < 2 + c->gmcsize || c->pktsize < c->sndsize)
+            size = c->pktsize - c->sndsize - c->gmcsize - 2;
+            size = ffio_limit(s->pb, size);
+            if(size < 0 || c->pktsize < c->sndsize)
                 return AVERROR_INVALIDDATA;
-            if (av_new_packet(pkt, size) < 0)
+            if (av_new_packet(pkt, size + c->gmcsize + 2) < 0)
                 return AVERROR(ENOMEM);
             AV_WL16(pkt->data, c->flags);
             if (c->gmcsize)
                 memcpy(pkt->data + 2, c->gmc, c->gmcsize);
-            avio_read(s->pb, pkt->data + 2 + c->gmcsize, size - c->gmcsize - 2);
+            avio_read(s->pb, pkt->data + 2 + c->gmcsize, size);
             pkt->stream_index = 0;
             c->curstrm = -1;
         }else{