summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWilliam Wilgus <wilgus.william@gmail.com>2024-12-30 23:17:57 -0500
committerWilliam Wilgus <wilgus.william@gmail.com>2024-12-30 23:17:57 -0500
commitea5ca58dc6e4fc68d2c5656443ae12db06720bd2 (patch)
treeb691a29aeb447ea183f8e78e0ddb38604fa66a47
parent186ad1234b14e9e4a31a9c0f2c032ac92e3a46f1 (diff)
downloadrockbox-ea5ca58dc6.tar.gz
rockbox-ea5ca58dc6.zip
optimize language.c lang_english_to_id()
speed up comparisons by getting length of the supplied english string and filter based on length finally use our length to do memcmp since we know where the null is already Change-Id: I595f03ae4b08ee0d59bb9adacbe3b69f08991a9e
-rw-r--r--apps/language.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/apps/language.c b/apps/language.c
index 53b7f8aeb5..112a25957c 100644
--- a/apps/language.c
+++ b/apps/language.c
@@ -137,11 +137,12 @@ int lang_english_to_id(const char *english)
{
int i;
unsigned char *ptr = (unsigned char *) core_language_builtin;
-
+ size_t ptrlen, len = strlen(english);
for (i = 0; i < LANG_LAST_INDEX_IN_ARRAY; i++) {
- if (!strcmp(ptr, english))
+ ptrlen = strlen((char *)ptr);
+ if ((ptrlen == len) && memcmp(ptr, english, ptrlen) == 0)
return i;
- ptr += strlen((char *)ptr) + 1; /* advance pointer to next string */
+ ptr += ptrlen + 1; /* advance pointer to next string */
}
return -1;
}