From d04c2fedf2729db314ae21664b14e6fa4a53e300 Mon Sep 17 00:00:00 2001 From: Leo C Date: Mon, 25 Aug 2014 16:44:27 +0200 Subject: [PATCH] envlist_search --- avr/env.c | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/avr/env.c b/avr/env.c index b162767..343d882 100644 --- a/avr/env.c +++ b/avr/env.c @@ -321,10 +321,23 @@ int env_init(void) } -static + env_item_t *envlist_search(const __memx char *name) { - return bsearch(name, env_list, entrycount, + char *p = (char *) name; + +#ifdef __MEMX + char buf[CONFIG_SYS_ENV_NAMELEN+1]; + + if (__builtin_avr_flash_segment(name) != -1) { + p = buf; + while ((*p++ = *name++) != '\0') + ; + p = buf; + } +#endif /* __MEMX */ + + return bsearch(p, env_list, entrycount, sizeof(env_item_t), comp_env_key_item); } @@ -569,7 +582,7 @@ int env_item_print(env_item_t *ep) * Returns -1 in case of error, or length of printed string */ static -int env_print(char *name) +int env_print(const __memx char *name) { int len = -1; @@ -767,7 +780,7 @@ int setenv_ulong(const char *varname, unsigned long value) * @param value Value to set it to * @return 0 if ok, 1 on error */ -int setenv_hex(const char *varname, unsigned long value) +int setenv_hex(const __memx char *varname, unsigned long value) { char str[sizeof(unsigned long) *2 + 1]; -- 2.39.2