Propagate Error Status to the Shell on fw_printenv Errors
authorGrant Erickson <gerickson@nuovations.com>
Wed, 7 May 2008 03:16:15 +0000 (20:16 -0700)
committerWolfgang Denk <wd@denx.de>
Fri, 9 May 2008 21:40:40 +0000 (23:40 +0200)
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 <gerickson@nuovations.com>
Signed-off-by: Wolfgang Denk <wd@denx.de>
tools/env/fw_env.c
tools/env/fw_env.h
tools/env/fw_env_main.c

index e083a5b11ebdc10aff14bf1e06697a85cfae51b3..b8bca91c38d969500e6ad7fe9b54539b964adcfe 100644 (file)
@@ -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);
 }
 
 /*
index 58607ded5a467a60a4b6afaead8d8734a314d823..248f58c4a004e50d0966844a9461dc60f4ed607a 100644 (file)
@@ -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[]);
 
index 696e30efda4bea6df0959f2ec07eedc10219c8cb..7f631c4494b67839fcf13bc182d2545e3a737b1e 100644 (file)
@@ -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
  * 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,