From d990a53095f44d3730ae33f9d441090bc2b46fe5 Mon Sep 17 00:00:00 2001 From: Andrew Borodin Date: Sat, 6 Mar 2010 13:28:07 +0300 Subject: [PATCH] Fixed memory leak in mc_search__cond_struct_new_regex_accum_append(). Minor optimization. Signed-off-by: Andrew Borodin --- lib/search/regex.c | 37 +++++++++++++++++++------------------ 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/lib/search/regex.c b/lib/search/regex.c index 0fb3866e0..bb2a7b8a3 100644 --- a/lib/search/regex.c +++ b/lib/search/regex.c @@ -144,31 +144,32 @@ mc_search__cond_struct_new_regex_accum_append (const char *charset, GString * st GString * str_from) { GString *recoded_part; - gchar *one_char; - gsize loop; - gboolean just_letters; + gsize loop = 0; - loop = 0; - recoded_part = g_string_new (""); + recoded_part = g_string_sized_new (32); while (loop < str_from->len) { + gchar *one_char; + gsize one_char_len; + gboolean just_letters; + one_char = mc_search__get_one_symbol (charset, &(str_from->str[loop]), - (str_from->len - loop > 6) ? 6 : str_from->len - loop, - &just_letters); - if (!strlen (one_char)) { + min (str_from->len - loop, 6), &just_letters); + one_char_len = strlen (one_char); + + if (one_char_len == 0) loop++; - continue; - } - if (just_letters) { - mc_search__cond_struct_new_regex_hex_add (charset, recoded_part, one_char, - strlen (one_char)); - } else { - g_string_append (recoded_part, one_char); + else { + loop += one_char_len; + + if (just_letters) + mc_search__cond_struct_new_regex_hex_add (charset, recoded_part, one_char, + one_char_len); + else + g_string_append_len (recoded_part, one_char, one_char_len); } - loop += strlen (one_char); - if (!strlen (one_char)) - loop++; + g_free (one_char); } -- 2.11.4.GIT