From 73b4a0ef5f4ca29c35c359e29dc0e198c7feb51e Mon Sep 17 00:00:00 2001 From: "Jasper St. Pierre" Date: Mon, 5 Nov 2012 13:36:40 -0500 Subject: [PATCH] st-theme: Optimize string_in_list Rather than using a complicated set of function calls across library boundaries and our own scanning logic, use strtok(), which glibc already provides, and is probably much more optimized. https://bugzilla.gnome.org/show_bug.cgi?id=687465 --- src/st/st-theme.c | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/st/st-theme.c b/src/st/st-theme.c index 77076c09e..298cdc8e6 100644 --- a/src/st/st-theme.c +++ b/src/st/st-theme.c @@ -450,26 +450,26 @@ static gboolean string_in_list (GString *stryng, const char *list) { - const char *cur; + char *cur; + char *l = g_strdup (list); + char *temp; + gboolean found = FALSE; - for (cur = list; *cur;) + cur = strtok_r (l, " \t\f\r\n", &temp); + while (cur != NULL) { - while (*cur && cr_utils_is_white_space (*cur)) - cur++; - - if (strncmp (cur, stryng->str, stryng->len) == 0) + if (!strqcmp (cur, stryng->str, stryng->len)) { - cur += stryng->len; - if ((!*cur) || cr_utils_is_white_space (*cur)) - return TRUE; + found = TRUE; + goto out; } - /* skip to next whitespace character */ - while (*cur && !cr_utils_is_white_space (*cur)) - cur++; + cur = strtok_r (NULL, " \t\f\r\n", &temp); } - return FALSE; + out: + g_free (l); + return found; } static gboolean