diff options
author | William Wilgus <wilgus.william@gmail.com> | 2024-12-30 23:17:57 -0500 |
---|---|---|
committer | William Wilgus <wilgus.william@gmail.com> | 2024-12-30 23:17:57 -0500 |
commit | ea5ca58dc6e4fc68d2c5656443ae12db06720bd2 (patch) | |
tree | b691a29aeb447ea183f8e78e0ddb38604fa66a47 | |
parent | 186ad1234b14e9e4a31a9c0f2c032ac92e3a46f1 (diff) | |
download | rockbox-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.c | 7 |
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; } |