diff options
author | Jonathan Gordon <rockbox@jdgordon.info> | 2012-05-16 22:28:59 +1000 |
---|---|---|
committer | Jonathan Gordon <rockbox@jdgordon.info> | 2012-05-16 22:33:40 +1000 |
commit | 7909bf039f6e5984b5a037d3de69128f02408223 (patch) | |
tree | bbb8cf36a77b408b76247010258fcc3e9f4d654b /apps/gui/skin_engine/skin_render.c | |
parent | 027ebaf46330b8e7df1a09974ee16f644edccacb (diff) | |
download | rockbox-7909bf039f6e5984b5a037d3de69128f02408223.tar.gz rockbox-7909bf039f6e5984b5a037d3de69128f02408223.zip |
(hopefully) Fix FS#12639 and other skin related buflib corruption issues.
Kudos to funman for figuring out the problem - skin_find_item() rather
stupidly uses the global skin_buffer variable in skin_parser.c which is
fine in the parser EXCEPT it gets changed in skin_render when the sbs
is being redrawn while another skin is loading, so fix this by makeing
skin_find_item() use a local data pointer so a skin_render() during
parsing won't break anything.
Change-Id: I80e1c0efe569c18225e5772159c18ebb21e07332
Diffstat (limited to 'apps/gui/skin_engine/skin_render.c')
-rw-r--r-- | apps/gui/skin_engine/skin_render.c | 4 |
1 files changed, 0 insertions, 4 deletions
diff --git a/apps/gui/skin_engine/skin_render.c b/apps/gui/skin_engine/skin_render.c index 0f5e5fa106..bf7f03d738 100644 --- a/apps/gui/skin_engine/skin_render.c +++ b/apps/gui/skin_engine/skin_render.c | |||
@@ -84,8 +84,6 @@ static void skin_render_playlistviewer(struct playlistviewer* viewer, | |||
84 | #endif | 84 | #endif |
85 | 85 | ||
86 | static char* skin_buffer; | 86 | static char* skin_buffer; |
87 | /* hack alert: fix skin_parser.c's skin_buffer pointer */ | ||
88 | void skinparser_set_buffer(char* pointer); | ||
89 | 87 | ||
90 | static inline struct skin_element* | 88 | static inline struct skin_element* |
91 | get_child(OFFSETTYPE(struct skin_element**) children, int child) | 89 | get_child(OFFSETTYPE(struct skin_element**) children, int child) |
@@ -720,7 +718,6 @@ void skin_render_viewport(struct skin_element* viewport, struct gui_wps *gwps, | |||
720 | struct align_pos * align = &info.align; | 718 | struct align_pos * align = &info.align; |
721 | bool needs_update; | 719 | bool needs_update; |
722 | skin_buffer = get_skin_buffer(gwps->data); | 720 | skin_buffer = get_skin_buffer(gwps->data); |
723 | skinparser_set_buffer(skin_buffer); | ||
724 | #ifdef HAVE_LCD_BITMAP | 721 | #ifdef HAVE_LCD_BITMAP |
725 | /* Set images to not to be displayed */ | 722 | /* Set images to not to be displayed */ |
726 | struct skin_token_list *imglist = SKINOFFSETTOPTR(skin_buffer, gwps->data->images); | 723 | struct skin_token_list *imglist = SKINOFFSETTOPTR(skin_buffer, gwps->data->images); |
@@ -805,7 +802,6 @@ void skin_render(struct gui_wps *gwps, unsigned refresh_mode) | |||
805 | 802 | ||
806 | int old_refresh_mode = refresh_mode; | 803 | int old_refresh_mode = refresh_mode; |
807 | skin_buffer = get_skin_buffer(gwps->data); | 804 | skin_buffer = get_skin_buffer(gwps->data); |
808 | skinparser_set_buffer(skin_buffer); | ||
809 | 805 | ||
810 | #ifdef HAVE_LCD_CHARCELLS | 806 | #ifdef HAVE_LCD_CHARCELLS |
811 | int i; | 807 | int i; |