Mercurial > libdvdnav.hg
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; }