[U-Boot] Recent changes break our update scripts, because of getenv_yesno()

Hello,
in common/image.c:
int getenv_yesno (char *var) { char *s = getenv (var); return (s && (*s == 'n')) ? 0 : 1; }
Is that supposed to return TRUE when the env variable does NOT exist?
Because each TFTP/USB/whatever load of an image will automatically start it!
(and why is such a generic function in image.c?)
Best Regards, Reinhard

On 31.12.2010 11:33, Reinhard Meyer wrote:
Hello,
in common/image.c:
int getenv_yesno (char *var) { char *s = getenv (var); return (s&& (*s == 'n')) ? 0 : 1; }
Is that supposed to return TRUE when the env variable does NOT exist?
Because each TFTP/USB/whatever load of an image will automatically start it!
(and why is such a generic function in image.c?)
OK, digging deeper, the culprit actually is:
2010-11-28 Mike Frysinger boot cmds: convert to getenv_yesno() with autostart
Example: index c657b03..973fa21 100644 (file) --- a/common/cmd_net.c +++ b/common/cmd_net.c @@ -211,7 +211,7 @@ netboot_common (proto_t proto, cmd_tbl_t *cmdtp, int argc, char * const argv[]) flush_cache(load_addr, size);
/* Loading ok, check if we should attempt an auto-start */ - if (((s = getenv("autostart")) != NULL) && (strcmp(s,"yes") == 0)) { + if (getenv_yesno("autostart")) { char *local_args[2]; local_args[0] = argv[0]; local_args[1] = NULL;
Originally, a missing env var resulted in FALSE, with the helper function it results in TRUE!!
Reinhard

On 12/31/2010 11:41 AM, Reinhard Meyer wrote:
/* Loading ok, check if we should attempt an auto-start */
if (((s = getenv("autostart")) != NULL) && (strcmp(s,"yes") == 0)) {
if (getenv_yesno("autostart")) { char *local_args[2]; local_args[0] = argv[0]; local_args[1] = NULL;
Originally, a missing env var resulted in FALSE, with the helper function it results in TRUE!!
Thanks, this explains why it happens ! We should check again for a missing env var.
Best regards, Stefano Babic

Dear Reinhard Meyer,
In message 4D1DB35A.3090105@emk-elektronik.de you wrote:
OK, digging deeper, the culprit actually is:
2010-11-28 Mike Frysinger boot cmds: convert to getenv_yesno() with autostart
There has been agreement to revert that commit.
Best regards,
Wolfgang Denk

Dear Wolfgang Denk,
Dear Reinhard Meyer,
In message4D1DB35A.3090105@emk-elektronik.de you wrote:
OK, digging deeper, the culprit actually is:
2010-11-28 Mike Frysinger boot cmds: convert to getenv_yesno() with autostart
There has been agreement to revert that commit.
OK, I must have missed that agreement ;)
What about adding a second parameter to getenv_yesno(), that gives the default value when the env var does not exist?
And maybe move that function into env related source?
Best Regards, Reinhard

On Friday, December 31, 2010 06:54:17 Reinhard Meyer wrote:
OK, digging deeper, the culprit actually is:
2010-11-28
Mike Frysinger boot cmds: convert to getenv_yesno() with autostart
There has been agreement to revert that commit.
OK, I must have missed that agreement ;)
What about adding a second parameter to getenv_yesno(), that gives the default value when the env var does not exist?
that's what i proposed, but Wolfgang would rather revert it seems -mike

On 12/31/2010 11:33 AM, Reinhard Meyer wrote:
Hello,
in common/image.c:
int getenv_yesno (char *var) { char *s = getenv (var); return (s && (*s == 'n')) ? 0 : 1; }
Is that supposed to return TRUE when the env variable does NOT exist?
Because each TFTP/USB/whatever load of an image will automatically start it!
You are right. I am stucking with the same issue, and inverting the test makes things working again.
However, I see this behavior only with 2010.12 and the suspicious function is really old, I am wondering why we see this behavior only now.
(and why is such a generic function in image.c?)
Another good point...
Best regards, Stefano Babic
participants (4)
-
Mike Frysinger
-
Reinhard Meyer
-
Stefano Babic
-
Wolfgang Denk