From 0ab014a535aa1d2e7e3f35e58887c71b541e0631 Mon Sep 17 00:00:00 2001 From: Oleg Oshmyan Date: Thu, 29 May 2014 23:38:45 +0100 Subject: parse_tag: remove unnecessary malloc --- libass/ass_parse.c | 10 ++-------- libass/ass_utils.c | 10 ++++++---- libass/ass_utils.h | 2 +- 3 files changed, 9 insertions(+), 13 deletions(-) diff --git a/libass/ass_parse.c b/libass/ass_parse.c index 47d22e6..afba8a7 100644 --- a/libass/ass_parse.c +++ b/libass/ass_parse.c @@ -772,16 +772,10 @@ char *parse_tag(ASS_Renderer *render_priv, char *p, char *end, double pwr) break; } } else if (tag("r")) { - char *style; if (nargs) { - char *start = args->start; - end = args->end; - style = malloc(end - start + 1); - strncpy(style, start, end - start); - style[end - start] = '\0'; + int len = args->end - args->start; reset_render_context(render_priv, - lookup_style_strict(render_priv->track, style)); - free(style); + lookup_style_strict(render_priv->track, args->start, len)); } else reset_render_context(render_priv, NULL); } else if (tag("be")) { diff --git a/libass/ass_utils.c b/libass/ass_utils.c index c545012..778da80 100644 --- a/libass/ass_utils.c +++ b/libass/ass_utils.c @@ -337,19 +337,21 @@ int lookup_style(ASS_Track *track, char *name) * \brief find style by name as in \r * \param track track * \param name style name + * \param len style name length * \return style in track->styles * Returns NULL if no style has the given name. */ -ASS_Style *lookup_style_strict(ASS_Track *track, char *name) +ASS_Style *lookup_style_strict(ASS_Track *track, char *name, size_t len) { int i; for (i = track->n_styles - 1; i >= 0; --i) { - if (strcmp(track->styles[i].Name, name) == 0) + if (strncmp(track->styles[i].Name, name, len) == 0 && + track->styles[i].Name[len] == '\0') return track->styles + i; } ass_msg(track->library, MSGL_WARN, - "[%p]: Warning: no style named '%s' found", - track, name); + "[%p]: Warning: no style named '%.*s' found", + track, (int) len, name); return NULL; } diff --git a/libass/ass_utils.h b/libass/ass_utils.h index 40d8953..db47c32 100644 --- a/libass/ass_utils.h +++ b/libass/ass_utils.h @@ -65,7 +65,7 @@ unsigned ass_utf8_get_char(char **str); unsigned ass_utf8_put_char(char *dest, uint32_t ch); void ass_msg(ASS_Library *priv, int lvl, char *fmt, ...); int lookup_style(ASS_Track *track, char *name); -ASS_Style *lookup_style_strict(ASS_Track *track, char *name); +ASS_Style *lookup_style_strict(ASS_Track *track, char *name, size_t len); #ifdef CONFIG_ENCA void *ass_guess_buffer_cp(ASS_Library *library, unsigned char *buffer, int buflen, char *preferred_language, -- cgit v1.2.3