From d466cb9bebd85c52049ddadb8fa62f1c89586070 Mon Sep 17 00:00:00 2001 From: Jonathan Gordon Date: Fri, 4 Sep 2009 06:17:38 +0000 Subject: minor line handling fixes, be smarter (well dumber actually) about increasing the size of the tokens array, that loop isnt the only place the data->num_tokens variable gets increased... also add one last WPS_NO_TOKEN token to the end to make sure we dont accidently overrun into the next skin on the last line of a skin. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@22618 a1c6a512-1295-4272-9138-f99709370657 --- apps/gui/skin_engine/skin_parser.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) (limited to 'apps/gui/skin_engine') diff --git a/apps/gui/skin_engine/skin_parser.c b/apps/gui/skin_engine/skin_parser.c index 07f38bbee5..5ecbda1315 100644 --- a/apps/gui/skin_engine/skin_parser.c +++ b/apps/gui/skin_engine/skin_parser.c @@ -668,7 +668,8 @@ static int parse_viewport(const char *wps_bufptr, skin_vp->label = VP_NO_LABEL; skin_vp->pb = NULL; skin_vp->lines = NULL; - + if (curr_line) + curr_line->curr_subline->last_token_idx = wps_data->num_tokens; curr_line = NULL; if (!skin_start_new_line(skin_vp, wps_data->num_tokens)) return WPS_ERROR_INVALID_PARAM; @@ -1346,7 +1347,7 @@ static bool wps_parse(struct wps_data *data, const char *wps_bufptr, bool debug) while (*wps_bufptr && !fail) { /* first make sure there is enough room for tokens */ - if (max_tokens -1 == data->num_tokens) + if (max_tokens <= data->num_tokens + 5) { int extra_tokens = TOKEN_BLOCK_SIZE; size_t needed = extra_tokens * sizeof(struct wps_token); @@ -1552,12 +1553,12 @@ static bool wps_parse(struct wps_data *data, const char *wps_bufptr, bool debug) fail = PARSE_FAIL_LIMITS_EXCEEDED; /* Success! */ + curr_line->curr_subline->last_token_idx = data->num_tokens; + data->tokens[data->num_tokens++].type = WPS_NO_TOKEN; /* freeup unused tokens */ skin_buffer_free_from_front(sizeof(struct wps_token) * (max_tokens - data->num_tokens)); - /* close the last subline */ - curr_line->curr_subline->last_token_idx = data->num_tokens; - + #if defined(DEBUG) || defined(SIMULATOR) if (debug) print_debug_info(data, fail, line_number); -- cgit v1.2.3