From 04cffff06efa61b5300105d0db98c0f4fbfa8d47 Mon Sep 17 00:00:00 2001 From: Leo C Date: Tue, 2 Sep 2014 21:41:46 +0200 Subject: [PATCH] envlist_search: eliminate temp buffer --- avr/env.c | 41 ++++++++++++++++++++++------------------- 1 file changed, 22 insertions(+), 19 deletions(-) diff --git a/avr/env.c b/avr/env.c index 5d1c5c0..017053c 100644 --- a/avr/env.c +++ b/avr/env.c @@ -74,35 +74,43 @@ char env_get_char(uint16_t index) } +static const FLASH char *comp_key; + static int comp_env_items(const void *m1, const void *m2) { env_item_t *ep1 = (env_item_t *) m1; env_item_t *ep2 = (env_item_t *) m2; - return strcmp(ep1->envvar, ep2->envvar); + if (ep1 == NULL) + return - strcmp_P(ep2->envvar, comp_key); + else + return strcmp(ep1->envvar, ep2->envvar); } env_item_t *envlist_search(const MEMX char *name) { - env_item_t e; - - e.envvar = (char *) name; - #ifdef __MEMX - char buf[CONFIG_SYS_ENV_NAMELEN+1]; - if (__builtin_avr_flash_segment(name) != -1) { - char *p = buf; - while ((*p++ = *name++) != '\0') - ; - e.envvar = buf; + comp_key = name; + return bsearch(0, env_list, entrycount, + sizeof(env_item_t), comp_env_items); + } else { + + env_item_t e; + e.envvar = (char *) name; + + return bsearch(&e, env_list, entrycount, + sizeof(env_item_t), comp_env_items); } -#endif /* __MEMX */ +#else + env_item_t e; + e.envvar = (char *) name; return bsearch(&e, env_list, entrycount, sizeof(env_item_t), comp_env_items); +#endif /* __MEMX */ } @@ -148,14 +156,9 @@ int env_item_delete(env_item_t *ep) } static -int envlist_delete(const char *name) +int envlist_delete(const MEMX char *name) { - env_item_t e; - - e.envvar = (char *) name; - - env_item_t *ep = bsearch(&e, env_list, entrycount, - sizeof(env_item_t), comp_env_items); + env_item_t *ep = envlist_search(name); if (ep != NULL) return env_item_delete(ep); -- 2.39.2