[FFmpeg-cvslog] r13837 - in trunk/libavformat: asf.c avidec.c rmdec.c utils.c
bcoudurier
subversion
Fri Jun 20 19:16:57 CEST 2008
Author: bcoudurier
Date: Fri Jun 20 19:16:56 2008
New Revision: 13837
Log:
factorize read_header failure freeing code
Modified:
trunk/libavformat/asf.c
trunk/libavformat/avidec.c
trunk/libavformat/rmdec.c
trunk/libavformat/utils.c
Modified: trunk/libavformat/asf.c
==============================================================================
--- trunk/libavformat/asf.c (original)
+++ trunk/libavformat/asf.c Fri Jun 20 19:16:56 2008
@@ -156,7 +156,7 @@ static int asf_read_header(AVFormatConte
get_guid(pb, &g);
if (memcmp(&g, &asf_header, sizeof(GUID)))
- goto fail;
+ return -1;
get_le64(pb);
get_le32(pb);
get_byte(pb);
@@ -181,7 +181,7 @@ static int asf_read_header(AVFormatConte
break;
}
if (gsize < 24)
- goto fail;
+ return -1;
if (!memcmp(&g, &file_header, sizeof(GUID))) {
get_guid(pb, &asf->hdr.guid);
asf->hdr.file_size = get_le64(pb);
@@ -207,11 +207,11 @@ static int asf_read_header(AVFormatConte
st = av_new_stream(s, 0);
if (!st)
- goto fail;
+ return AVERROR(ENOMEM);
av_set_pts_info(st, 32, 1, 1000); /* 32 bit pts in ms */
asf_st = av_mallocz(sizeof(ASFStream));
if (!asf_st)
- goto fail;
+ return AVERROR(ENOMEM);
st->priv_data = asf_st;
start_time = asf->hdr.preroll;
@@ -232,7 +232,7 @@ static int asf_read_header(AVFormatConte
test_for_ext_stream_audio = 1;
type = CODEC_TYPE_UNKNOWN;
} else {
- goto fail;
+ return -1;
}
get_guid(pb, &g);
total_size = get_le64(pb);
@@ -513,7 +513,7 @@ static int asf_read_header(AVFormatConte
}
#endif
} else if (url_feof(pb)) {
- goto fail;
+ return -1;
} else {
url_fseek(pb, gsize - 24, SEEK_CUR);
}
@@ -523,7 +523,7 @@ static int asf_read_header(AVFormatConte
get_byte(pb);
get_byte(pb);
if (url_feof(pb))
- goto fail;
+ return -1;
asf->data_offset = url_ftell(pb);
asf->packet_size_left = 0;
@@ -543,17 +543,6 @@ static int asf_read_header(AVFormatConte
}
return 0;
-
- fail:
- for(i=0;i<s->nb_streams;i++) {
- AVStream *st = s->streams[i];
- if (st) {
- av_free(st->priv_data);
- av_free(st->codec->extradata);
- }
- av_free(st);
- }
- return -1;
}
#define DO_2BITS(bits, var, defval) \
Modified: trunk/libavformat/avidec.c
==============================================================================
--- trunk/libavformat/avidec.c (original)
+++ trunk/libavformat/avidec.c Fri Jun 20 19:16:56 2008
@@ -597,10 +597,6 @@ static int avi_read_header(AVFormatConte
/* check stream number */
if (stream_index != s->nb_streams - 1) {
fail:
- for(i=0;i<s->nb_streams;i++) {
- av_freep(&s->streams[i]->codec->extradata);
- av_freep(&s->streams[i]);
- }
return -1;
}
Modified: trunk/libavformat/rmdec.c
==============================================================================
--- trunk/libavformat/rmdec.c (original)
+++ trunk/libavformat/rmdec.c Fri Jun 20 19:16:56 2008
@@ -297,7 +297,7 @@ static int rm_read_header(AVFormatContex
for(;;) {
if (url_feof(pb))
- goto fail;
+ return -1;
tag = get_le32(pb);
tag_size = get_be32(pb);
get_be16(pb);
@@ -311,7 +311,7 @@ static int rm_read_header(AVFormatContex
tag_size);
#endif
if (tag_size < 10 && tag != MKTAG('D', 'A', 'T', 'A'))
- goto fail;
+ return -1;
switch(tag) {
case MKTAG('P', 'R', 'O', 'P'):
/* file header */
@@ -336,7 +336,7 @@ static int rm_read_header(AVFormatContex
case MKTAG('M', 'D', 'P', 'R'):
st = av_new_stream(s, 0);
if (!st)
- goto fail;
+ return AVERROR(ENOMEM);
st->id = get_be16(pb);
get_be32(pb); /* max bit rate */
st->codec->bit_rate = get_be32(pb); /* bit rate */
@@ -369,12 +369,6 @@ static int rm_read_header(AVFormatContex
get_be32(pb); /* next data header */
rm->curpic_num = -1;
return 0;
-
- fail:
- for(i=0;i<s->nb_streams;i++) {
- av_free(s->streams[i]);
- }
- return AVERROR(EIO);
}
static int get_num(ByteIOContext *pb, int *len)
Modified: trunk/libavformat/utils.c
==============================================================================
--- trunk/libavformat/utils.c (original)
+++ trunk/libavformat/utils.c Fri Jun 20 19:16:56 2008
@@ -405,7 +405,16 @@ int av_open_input_stream(AVFormatContext
return 0;
fail:
if (ic) {
+ int i;
av_freep(&ic->priv_data);
+ for(i=0;i<ic->nb_streams;i++) {
+ AVStream *st = ic->streams[i];
+ if (st) {
+ av_free(st->priv_data);
+ av_free(st->codec->extradata);
+ }
+ av_free(st);
+ }
}
av_free(ic);
*ic_ptr = NULL;
More information about the ffmpeg-cvslog
mailing list