(tr_utf8_search_{first,last}): minor refactoring.

Reduce variable scope.
Call strlen(search) before loop.

Signed-off-by: Andrew Borodin <aborodin@vmail.ru>
This commit is contained in:
Andrew Borodin 2024-06-12 09:12:51 +03:00
parent 87f46330d5
commit 2db4f47bdd

View File

@ -992,14 +992,23 @@ str_utf8_release_search_needle (char *needle, gboolean case_sen)
static const char * static const char *
str_utf8_search_first (const char *text, const char *search, gboolean case_sen) str_utf8_search_first (const char *text, const char *search, gboolean case_sen)
{ {
char *fold_text;
char *deco_text; char *deco_text;
const char *match; const char *match;
const char *result = NULL; const char *result = NULL;
const char *m; size_t search_len;
fold_text = case_sen ? (char *) text : g_utf8_casefold (text, -1); if (case_sen)
deco_text = g_utf8_normalize (fold_text, -1, G_NORMALIZE_ALL); deco_text = g_utf8_normalize (text, -1, G_NORMALIZE_ALL);
else
{
char *fold_text;
fold_text = g_utf8_casefold (text, -1);
deco_text = g_utf8_normalize (fold_text, -1, G_NORMALIZE_ALL);
g_free (fold_text);
}
search_len = strlen (search);
match = deco_text; match = deco_text;
do do
@ -1008,10 +1017,11 @@ str_utf8_search_first (const char *text, const char *search, gboolean case_sen)
if (match != NULL) if (match != NULL)
{ {
if ((!str_utf8_iscombiningmark (match) || (match == deco_text)) && if ((!str_utf8_iscombiningmark (match) || (match == deco_text)) &&
!str_utf8_iscombiningmark (match + strlen (search))) !str_utf8_iscombiningmark (match + search_len))
{ {
const char *m = deco_text;
result = text; result = text;
m = deco_text;
while (m < match) while (m < match)
{ {
str_utf8_cnext_noncomb_char (&m); str_utf8_cnext_noncomb_char (&m);
@ -1025,8 +1035,6 @@ str_utf8_search_first (const char *text, const char *search, gboolean case_sen)
while (match != NULL && result == NULL); while (match != NULL && result == NULL);
g_free (deco_text); g_free (deco_text);
if (!case_sen)
g_free (fold_text);
return result; return result;
} }
@ -1036,14 +1044,23 @@ str_utf8_search_first (const char *text, const char *search, gboolean case_sen)
static const char * static const char *
str_utf8_search_last (const char *text, const char *search, gboolean case_sen) str_utf8_search_last (const char *text, const char *search, gboolean case_sen)
{ {
char *fold_text;
char *deco_text; char *deco_text;
char *match; char *match;
const char *result = NULL; const char *result = NULL;
const char *m; size_t search_len;
fold_text = case_sen ? (char *) text : g_utf8_casefold (text, -1); if (case_sen)
deco_text = g_utf8_normalize (fold_text, -1, G_NORMALIZE_ALL); deco_text = g_utf8_normalize (text, -1, G_NORMALIZE_ALL);
else
{
char *fold_text;
fold_text = g_utf8_casefold (text, -1);
deco_text = g_utf8_normalize (fold_text, -1, G_NORMALIZE_ALL);
g_free (fold_text);
}
search_len = strlen (search);
do do
{ {
@ -1051,10 +1068,11 @@ str_utf8_search_last (const char *text, const char *search, gboolean case_sen)
if (match != NULL) if (match != NULL)
{ {
if ((!str_utf8_iscombiningmark (match) || (match == deco_text)) && if ((!str_utf8_iscombiningmark (match) || (match == deco_text)) &&
!str_utf8_iscombiningmark (match + strlen (search))) !str_utf8_iscombiningmark (match + search_len))
{ {
const char *m = deco_text;
result = text; result = text;
m = deco_text;
while (m < match) while (m < match)
{ {
str_utf8_cnext_noncomb_char (&m); str_utf8_cnext_noncomb_char (&m);
@ -1068,8 +1086,6 @@ str_utf8_search_last (const char *text, const char *search, gboolean case_sen)
while (match != NULL && result == NULL); while (match != NULL && result == NULL);
g_free (deco_text); g_free (deco_text);
if (!case_sen)
g_free (fold_text);
return result; return result;
} }