changeset 261:8ad83ff183be src

fix memleak reported by Jerome
author mroi
date Wed, 09 Feb 2005 17:07:27 +0000
parents 97ad00b13609
children 7708d2fc1745
files dvdread/dvd_udf.c
diffstat 1 files changed, 15 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/dvdread/dvd_udf.c	Sun Jan 16 16:47:05 2005 +0000
+++ b/dvdread/dvd_udf.c	Wed Feb 09 17:07:27 2005 +0000
@@ -113,6 +113,8 @@
 struct lbudf {
   uint32_t lb;
   uint8_t *data;
+  /* needed for proper freeing */
+  uint8_t *data_base;
 };
 
 struct icbmap {
@@ -147,6 +149,9 @@
     return;
   }
   if(c->lbs) {
+    int n;
+    for(n = 0; n < c->lb_num; n++)
+      free(c->lbs[n].data_base);
     free(c->lbs);
   }
   if(c->maps) {
@@ -263,7 +268,8 @@
     for(n = 0; n < c->lb_num; n++) {
       if(c->lbs[n].lb == nr) {
        /* replace with new data */
-       c->lbs[n].data = *(uint8_t **)data;
+       c->lbs[n].data_base = ((uint8_t **)data)[0];
+       c->lbs[n].data = ((uint8_t **)data)[1];
        c->lbs[n].lb = nr;
        return 1;
       }
@@ -279,7 +285,8 @@
       c->lb_num = 0;
       return 0;
     }
-    c->lbs[n].data = *(uint8_t **)data;
+    c->lbs[n].data_base = ((uint8_t **)data)[0];
+    c->lbs[n].data = ((uint8_t **)data)[1];
     c->lbs[n].lb = nr;
     break;
   case MapCache:
@@ -563,7 +570,12 @@
 		  dir_lba * DVD_VIDEO_LB_LEN);
 	}
 	*/
-	SetUDFCache(device, LBUDFCache, lbnum, &cached_dir);
+	{
+	  uint8_t *data[2];
+	  data[0] = cached_dir_base;
+	  data[1] = cached_dir;
+	  SetUDFCache(device, LBUDFCache, lbnum, data);
+	}
       } else {
 	in_cache = 1;
       }