From bc11756daff89a3de09ca80adac962b88cf06e6e Mon Sep 17 00:00:00 2001 From: Grant Erickson Date: Tue, 6 May 2008 20:16:15 -0700 Subject: [PATCH] Propagate Error Status to the Shell on fw_printenv Errors Changed implementation such that fw_printenv returns failure status when one or more specified variables do not exist or when incorrect command syntax is used. This aids scripting fw_printenv such that the script can key of the return status rather than relying on standard error "scraping". Signed-off-by: Grant Erickson Signed-off-by: Wolfgang Denk --- tools/env/fw_env.c | 21 +++++++++++++-------- tools/env/fw_env.h | 4 ++-- tools/env/fw_env_main.c | 25 ++++++++++++++----------- 3 files changed, 29 insertions(+), 21 deletions(-) diff --git a/tools/env/fw_env.c b/tools/env/fw_env.c index e083a5b11e..b8bca91c38 100644 --- a/tools/env/fw_env.c +++ b/tools/env/fw_env.c @@ -1,5 +1,5 @@ /* - * (C) Copyright 2000-2003 + * (C) Copyright 2000-2008 * Wolfgang Denk, DENX Software Engineering, wd@denx.de. * * See file CREDITS for list of people who contributed to this @@ -209,13 +209,14 @@ char *fw_getenv (char *name) * Print the current definition of one, or more, or all * environment variables */ -void fw_printenv (int argc, char *argv[]) +int fw_printenv (int argc, char *argv[]) { char *env, *nxt; int i, n_flag; + int rc = 0; if (env_init ()) - return; + return (-1); if (argc == 1) { /* Print all env variables */ for (env = environment.data; *env; env = nxt + 1) { @@ -223,13 +224,13 @@ void fw_printenv (int argc, char *argv[]) if (nxt >= &environment.data[ENV_SIZE]) { fprintf (stderr, "## Error: " "environment not terminated\n"); - return; + return (-1); } } printf ("%s\n", env); } - return; + return (0); } if (strcmp (argv[1], "-n") == 0) { @@ -239,7 +240,7 @@ void fw_printenv (int argc, char *argv[]) if (argc != 2) { fprintf (stderr, "## Error: " "`-n' option requires exactly one argument\n"); - return; + return (-1); } } else { n_flag = 0; @@ -255,7 +256,7 @@ void fw_printenv (int argc, char *argv[]) if (nxt >= &environment.data[ENV_SIZE]) { fprintf (stderr, "## Error: " "environment not terminated\n"); - return; + return (-1); } } val = envmatch (name, env); @@ -268,9 +269,13 @@ void fw_printenv (int argc, char *argv[]) break; } } - if (!val) + if (!val) { fprintf (stderr, "## Error: \"%s\" not defined\n", name); + rc = -1; + } } + + return (rc); } /* diff --git a/tools/env/fw_env.h b/tools/env/fw_env.h index 58607ded5a..248f58c4a0 100644 --- a/tools/env/fw_env.h +++ b/tools/env/fw_env.h @@ -1,5 +1,5 @@ /* - * (C) Copyright 2002 + * (C) Copyright 2002-2008 * Wolfgang Denk, DENX Software Engineering, wd@denx.de. * * See file CREDITS for list of people who contributed to this @@ -47,7 +47,7 @@ "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off; " \ "bootm" -extern void fw_printenv(int argc, char *argv[]); +extern int fw_printenv(int argc, char *argv[]); extern char *fw_getenv (char *name); extern int fw_setenv (int argc, char *argv[]); diff --git a/tools/env/fw_env_main.c b/tools/env/fw_env_main.c index 696e30efda..7f631c4494 100644 --- a/tools/env/fw_env_main.c +++ b/tools/env/fw_env_main.c @@ -1,5 +1,5 @@ /* - * (C) Copyright 2000 + * (C) Copyright 2000-2008 * Wolfgang Denk, DENX Software Engineering, wd@denx.de. * * See file CREDITS for list of people who contributed to this @@ -25,15 +25,16 @@ * Command line user interface to firmware (=U-Boot) environment. * * Implements: - * fw_printenv [ name ... ] - * - prints the values of the environment variables - * "name", or the whole environment if no names are - * specified + * fw_printenv [[ -n name ] | [ name ... ]] + * - prints the value of a single environment variable + * "name", the ``name=value'' pairs of one or more + * environment variables "name", or the whole + * environment if no names are specified. * fw_setenv name [ value ... ] * - If a name without any values is given, the variable * with this name is deleted from the environment; * otherwise, all "value" arguments are concatenated, - * separated by sinlge blank characters, and the + * separated by single blank characters, and the * resulting string is assigned to the environment * variable "name" */ @@ -58,16 +59,18 @@ main(int argc, char *argv[]) if (strcmp(cmdname, CMD_PRINTENV) == 0) { - fw_printenv (argc, argv); + if (fw_printenv (argc, argv) != 0) + return (EXIT_FAILURE); - return (EXIT_SUCCESS); + return (EXIT_SUCCESS); } else if (strcmp(cmdname, CMD_SETENV) == 0) { - if (fw_setenv (argc, argv) != 0) - return (EXIT_FAILURE); + if (fw_setenv (argc, argv) != 0) + return (EXIT_FAILURE); + + return (EXIT_SUCCESS); - return (EXIT_SUCCESS); } fprintf (stderr, -- 2.25.1