ini_handler() lowercases four strings when CONFIG_INI_CASE_INSENSITIVE is set, each with a hand-rolled loop whose strlen() in the condition makes it quadratic in the string length.
Replace each loop with strlower() and fold the #ifdef pair into a runtime IS_ENABLED() check so the body reads linearly. Signed-off-by: Simon Glass <[email protected]> --- cmd/ini.c | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/cmd/ini.c b/cmd/ini.c index 96399017691..cf0a3ce8b3d 100644 --- a/cmd/ini.c +++ b/cmd/ini.c @@ -202,22 +202,17 @@ static int ini_parse(char *filestart, size_t filelen, static int ini_handler(void *user, char *section, char *name, char *value) { char *requested_section = (char *)user; -#ifdef CONFIG_INI_CASE_INSENSITIVE - int i; - for (i = 0; i < strlen(requested_section); i++) - requested_section[i] = tolower(requested_section[i]); - for (i = 0; i < strlen(section); i++) - section[i] = tolower(section[i]); -#endif + if (IS_ENABLED(CONFIG_INI_CASE_INSENSITIVE)) { + strlower(requested_section); + strlower(section); + } if (!strcmp(section, requested_section)) { -#ifdef CONFIG_INI_CASE_INSENSITIVE - for (i = 0; i < strlen(name); i++) - name[i] = tolower(name[i]); - for (i = 0; i < strlen(value); i++) - value[i] = tolower(value[i]); -#endif + if (IS_ENABLED(CONFIG_INI_CASE_INSENSITIVE)) { + strlower(name); + strlower(value); + } env_set(name, value); printf("ini: Imported %s as %s\n", name, value); } -- 2.43.0

