diff codec-cfg.c @ 13807:b014091b4417

Memory Free function Fix, based on patch by Wei Jiang <jiangw98@yahoo.com>
author faust3
date Sat, 30 Oct 2004 10:09:52 +0000
parents a68dbf641f85
children 589b227e3367
line wrap: on
line diff
--- a/codec-cfg.c	Sat Oct 30 09:46:16 2004 +0000
+++ b/codec-cfg.c	Sat Oct 30 10:09:52 2004 +0000
@@ -487,11 +487,7 @@
 	int tmp, i;
 	
 	// in case we call it a second time
-	if(video_codecs!=NULL)free(video_codecs);
-	video_codecs=NULL;
- 
- 	if(audio_codecs!=NULL)free(audio_codecs);
-	audio_codecs=NULL;
+	codecs_uninit_free();
 	
 	nr_vcodecs = 0;
 	nr_acodecs = 0;
@@ -715,12 +711,7 @@
 err_out_print_linenum:
 	PRINT_LINENUM;
 err_out:
-	if (audio_codecs)
-		free(audio_codecs);
-	if (video_codecs)
-		free(video_codecs);
-	video_codecs=NULL;
-	audio_codecs=NULL;
+	codecs_uninit_free();
 
 	free(line);
 	line=NULL;
@@ -735,6 +726,32 @@
 	goto err_out_print_linenum;
 }
 
+static void codecs_free(codecs_t* codecs,int count) {
+	int i;
+		for ( i = 0; i < count; i++)
+			if ( (codecs[i]).name ) {
+				if( (codecs[i]).name )
+					free((codecs[i]).name);
+				if( (codecs[i]).info )
+					free((codecs[i]).info);
+				if( (codecs[i]).comment )
+					free((codecs[i]).comment);
+				if( (codecs[i]).dll )
+					free((codecs[i]).dll);
+				if( (codecs[i]).drv )
+					free((codecs[i]).drv);
+			}
+		if (codecs)
+			free(codecs);
+}
+
+void codecs_uninit_free() {
+	codecs_free(video_codecs,nr_vcodecs);
+	video_codecs=NULL;
+	codecs_free(audio_codecs,nr_acodecs);
+	audio_codecs=NULL;
+}
+
 codecs_t *find_audio_codec(unsigned int fourcc, unsigned int *fourccmap,
 		codecs_t *start)
 {