summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Gordon <rockbox@jdgordon.info>2014-06-02 21:26:22 +1000
committerJonathan Gordon <rockbox@jdgordon.info>2014-06-02 21:26:22 +1000
commite417036f60ec187a6696f2e447a1f269a338d6e7 (patch)
treefb6d943bd6701172216fb2f6885f354c4ab58df0
parent53efa59e12f2de50bdb54e4a590c680063c39e1c (diff)
downloadrockbox-e417036f60ec187a6696f2e447a1f269a338d6e7.tar.gz
rockbox-e417036f60ec187a6696f2e447a1f269a338d6e7.zip
skin_engine: Don't double free buflib handles shared by skin images
Change-Id: I4158fb7dae664a746141f458c08bdcb84e148041
-rw-r--r--apps/gui/skin_engine/skin_parser.c12
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);