/*
- * (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
  * 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) {
                                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) {
                if (argc != 2) {
                        fprintf (stderr, "## Error: "
                                "`-n' option requires exactly one argument\n");
-                       return;
+                       return (-1);
                }
        } else {
                n_flag = 0;
                                if (nxt >= &environment.data[ENV_SIZE]) {
                                        fprintf (stderr, "## Error: "
                                                "environment not terminated\n");
-                                       return;
+                                       return (-1);
                                }
                        }
                        val = envmatch (name, env);
                                break;
                        }
                }
-               if (!val)
+               if (!val) {
                        fprintf (stderr, "## Error: \"%s\" not defined\n", name);
+                       rc = -1;
+               }
        }
+
+       return (rc);
 }
 
 /*
 
 /*
- * (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
        "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[]);
 
 
 /*
- * (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"
  */
 
        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,