# HG changeset patch # User mroi # Date 1107968847 0 # Node ID 8ad83ff183be0eebe9f406f11d7add24df867285 # Parent 97ad00b13609cf6e30b97931c5af4f8361640ab5 fix memleak reported by Jerome diff -r 97ad00b13609 -r 8ad83ff183be dvdread/dvd_udf.c --- 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; }