summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLeo C2014-08-25 16:44:27 +0200
committerLeo C2014-08-30 13:38:54 +0200
commitd04c2fedf2729db314ae21664b14e6fa4a53e300 (patch)
tree8c58016f31cd58b2d00e3f6bbe58d0e04d2749eb
parente2aab84a226d6e216bb18069b7ec2086bc536089 (diff)
downloadz180-stamp-d04c2fedf2729db314ae21664b14e6fa4a53e300.zip
envlist_search
-rw-r--r--avr/env.c21
1 files 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];