summaryrefslogtreecommitdiff
path: root/avr/env.c
diff options
context:
space:
mode:
Diffstat (limited to 'avr/env.c')
-rw-r--r--avr/env.c39
1 files changed, 26 insertions, 13 deletions
diff --git a/avr/env.c b/avr/env.c
index 28437a4..7981116 100644
--- a/avr/env.c
+++ b/avr/env.c
@@ -775,28 +775,41 @@ int setenv_hex(const char *varname, unsigned long value)
return setenv(varname, str);
}
+
/**
- * Get an environment variable as a hex value
+ * Decode the integer value of an environment variable and return it.
*
- * @param varname Environment variable to get
- * @param default_val Return this, if variable does not exist
- * @return hex value of variable or default_val
+ * @param name Name of environemnt variable
+ * @param base Number base to use (normally 10, or 16 for hex)
+ * @param default_val Default value to return if the variable is not
+ * found
+ * @return the decoded value, or default_val if not found
*/
-unsigned long getenv_hex(const char *varname, unsigned long default_val)
+unsigned long getenv_ulong(const char *name, int base, unsigned long default_val)
{
- const char *s;
+ char buf[16];
unsigned long value;
- char *endp;
+ char *vp, *endp;
+
+ env_item_t *ep = envlist_search(name);
- s = getenv(varname);
- if (s)
- value = strtoul(s, &endp, 16);
- if (!s || endp == s)
- return default_val;
+ if (ep != NULL ) {
+ if (ep->flags & EF_V_EEP) {
+ varval_get(buf, ep->val.eep, sizeof(buf));
+ vp = buf;
+ } else
+ vp = ep->val.ram;
+ if (vp != NULL) {
+ value = strtoul(vp, &endp, base);
+ if (endp != vp)
+ return value;
+ }
+ }
- return value;
+ return default_val;
}
+
command_ret_t do_env_set(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
{
(void) cmdtp;