diff options
author | Jonathan Gordon <rockbox@jdgordon.info> | 2014-06-02 21:26:22 +1000 |
---|---|---|
committer | Jonathan Gordon <rockbox@jdgordon.info> | 2014-06-02 21:26:22 +1000 |
commit | e417036f60ec187a6696f2e447a1f269a338d6e7 (patch) | |
tree | fb6d943bd6701172216fb2f6885f354c4ab58df0 /apps/gui/skin_engine | |
parent | 53efa59e12f2de50bdb54e4a590c680063c39e1c (diff) | |
download | rockbox-e417036f60ec187a6696f2e447a1f269a338d6e7.tar.gz rockbox-e417036f60ec187a6696f2e447a1f269a338d6e7.zip |
skin_engine: Don't double free buflib handles shared by skin images
Change-Id: I4158fb7dae664a746141f458c08bdcb84e148041
Diffstat (limited to 'apps/gui/skin_engine')
-rw-r--r-- | apps/gui/skin_engine/skin_parser.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/apps/gui/skin_engine/skin_parser.c b/apps/gui/skin_engine/skin_parser.c index bd89372d22..6e32400f27 100644 --- a/apps/gui/skin_engine/skin_parser.c +++ b/apps/gui/skin_engine/skin_parser.c | |||
@@ -1666,7 +1666,19 @@ void skin_data_free_buflib_allocs(struct wps_data *wps_data) | |||
1666 | struct wps_token *token = SKINOFFSETTOPTR(skin_buffer, list->token); | 1666 | struct wps_token *token = SKINOFFSETTOPTR(skin_buffer, list->token); |
1667 | struct gui_img *img = (struct gui_img*)SKINOFFSETTOPTR(skin_buffer, token->value.data); | 1667 | struct gui_img *img = (struct gui_img*)SKINOFFSETTOPTR(skin_buffer, token->value.data); |
1668 | if (img->buflib_handle > 0) | 1668 | if (img->buflib_handle > 0) |
1669 | { | ||
1670 | struct skin_token_list *imglist = SKINOFFSETTOPTR(skin_buffer, list->next);; | ||
1669 | core_free(img->buflib_handle); | 1671 | core_free(img->buflib_handle); |
1672 | |||
1673 | while (imglist) | ||
1674 | { | ||
1675 | struct wps_token *freetoken = SKINOFFSETTOPTR(skin_buffer, imglist->token); | ||
1676 | struct gui_img *freeimg = (struct gui_img*)SKINOFFSETTOPTR(skin_buffer, freetoken->value.data); | ||
1677 | if (img->buflib_handle == freeimg->buflib_handle) | ||
1678 | freeimg->buflib_handle = -1; | ||
1679 | imglist = SKINOFFSETTOPTR(skin_buffer, imglist->next); | ||
1680 | } | ||
1681 | } | ||
1670 | list = SKINOFFSETTOPTR(skin_buffer, list->next); | 1682 | list = SKINOFFSETTOPTR(skin_buffer, list->next); |
1671 | } | 1683 | } |
1672 | wps_data->images = PTRTOSKINOFFSET(skin_buffer, NULL); | 1684 | wps_data->images = PTRTOSKINOFFSET(skin_buffer, NULL); |