diff options
Diffstat (limited to 'avr')
-rw-r--r-- | avr/env.c | 21 |
1 files changed, 17 insertions, 4 deletions
@@ -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]; |