From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wolfgang Denk Date: Fri, 14 Oct 2011 23:42:16 +0200 Subject: [U-Boot] [PATCH v3 01/10] Add getenv_ulong() to read an integer from an environment variable In-Reply-To: <1318626284-11161-1-git-send-email-sjg@chromium.org> References: <1318610916-6975-2-git-send-email-sjg@chromium.org> <1318626284-11161-1-git-send-email-sjg@chromium.org> Message-ID: <20111014214216.0461714094B2@gemini.denx.de> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Dear Simon Glass, In message <1318626284-11161-1-git-send-email-sjg@chromium.org> you wrote: > This is not an uncommon operation in U-Boot, so let's put it in a common > function. > > Signed-off-by: Simon Glass ... > +ulong getenv_ulong(const char *name, int base, ulong default_val) > +{ > + char buff[20]; > + const char *str = NULL; > + > + /* > + * Prior to the import of the environment into the hashtable we > + * should not call getenv() > + */ > + if (gd->flags & GD_FLG_ENV_READY) > + str = getenv(name); > + else if (getenv_f(name, buff, sizeof(buff)) > 0) > + str = buff; > + return str ? simple_strtoul(str, NULL, base) : default_val; > +} Sorry, I just changed my mind. The issue with using getenv() before relocation is that it uses just a tiny buffer (usually 32 bytes) in the global data structure to store the result, which is often not sufficient for user provided data (some boards have hwconfig strings that are _much_ longer than that, and only the caller knows what to expect). It's only now that I realize that we are dealing with int / long values here only, so the length of the expected strings is indeed limited - actually the buffer you provide here is way smaller that what getenv() uses. Can we please switch back to the previous version, but insert a comment that explains why getenv_f() is not needed in this specific case? Thanks, and apologies for causing additional efforts. Best regards, Wolfgang Denk -- DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de Status quo. Latin for "the mess we're in."