changeset 17791:3c73573843e2

free resources when load_raw fails
author reimar
date Thu, 09 Mar 2006 22:20:20 +0000
parents 99a2481164ac
children fd980f31fbc2
files libvo/font_load.c
diffstat 1 files changed, 10 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/libvo/font_load.c	Thu Mar 09 22:14:34 2006 +0000
+++ b/libvo/font_load.c	Thu Mar 09 22:20:20 2006 +0000
@@ -17,15 +17,15 @@
     raw_file* raw=malloc(sizeof(raw_file));
     unsigned char head[32];
     FILE *f=fopen(name,"rb");
-    if(!f) return NULL;                        // can't open
-    if(fread(head,32,1,f)<1) return NULL;        // too small
-    if(memcmp(head,"mhwanh",6)) return NULL;        // not raw file
+    if(!f) goto err_out;                        // can't open
+    if(fread(head,32,1,f)<1) goto err_out;        // too small
+    if(memcmp(head,"mhwanh",6)) goto err_out;        // not raw file
     raw->w=head[8]*256+head[9];
     raw->h=head[10]*256+head[11];
     raw->c=head[12]*256+head[13];
     if(raw->w == 0) // 2 bytes were not enough for the width... read 4 bytes from the end of the header
     	raw->w = ((head[28]*0x100 + head[29])*0x100 + head[30])*0x100 + head[31];
-    if(raw->c>256) return NULL;                 // too many colors!?
+    if(raw->c>256) goto err_out;                 // too many colors!?
     mp_msg(MSGT_OSD, MSGL_DBG2, "RAW: %s  %d x %d, %d colors\n",name,raw->w,raw->h,raw->c);
     if(raw->c){
         raw->pal=malloc(raw->c*3);
@@ -39,6 +39,12 @@
     fread(raw->bmp,raw->h*raw->w*bpp,1,f);
     fclose(f);
     return raw;
+
+err_out:
+    if (f)
+      fclose(f);
+    free(raw);
+    return NULL;
 }
 
 extern int sub_unicode;