From 35e9ec0c03a150e3fe6a3350549573e4c02be67b Mon Sep 17 00:00:00 2001 From: Leo C Date: Sun, 24 Aug 2014 14:16:18 +0200 Subject: getenv_ulong(), TWI int opt --- avr/env.c | 39 ++++++++++++++++++++++++++------------- 1 file changed, 26 insertions(+), 13 deletions(-) (limited to 'avr/env.c') 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; -- cgit v1.2.3