[U-Boot] [PATCH] Suppressing Diagnostic Output for 'fw_setenv'

Grant Erickson gerickson at nuovations.com
Sat Aug 30 08:52:41 CEST 2008


Added support for a ``-v'' option for fw_setenv to explicitly enable
what was formerly default verbose diagnostic output when updating the
environment.

Signed-off-by: Grant Erickson <gerickson at nuovations.com>
---
 tools/env/fw_env.c      |   43 +++++++++++++++++++++++++++++--------------
 tools/env/fw_env_main.c |    4 +++-
 2 files changed, 32 insertions(+), 15 deletions(-)

diff --git a/tools/env/fw_env_main.c b/tools/env/fw_env_main.c
index 7f631c4..c195de9 100644
--- a/tools/env/fw_env_main.c
+++ b/tools/env/fw_env_main.c
@@ -30,13 +30,15 @@
  *                "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 ... ]
+ *	fw_setenv [ -v ] 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 single blank characters, and the
  *		  resulting string is assigned to the environment
  *		  variable "name"
+ *		- With the ``-v''option asserted, verbose progress is
+ *		  displayed as the environment is updated.
  */
 
 #include <stdio.h>
diff --git a/tools/env/fw_env.c b/tools/env/fw_env.c
index b8bca91..836a9b9 100644
--- a/tools/env/fw_env.c
+++ b/tools/env/fw_env.c
@@ -23,6 +23,7 @@
 
 #include <errno.h>
 #include <fcntl.h>
+#include <stdbool.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <stddef.h>
@@ -159,7 +160,7 @@ static char default_environment[] = {
 	"\0"			/* Termimate env_t data with 2 NULs */
 };
 
-static int flash_io (int mode);
+static int flash_io (int mode, bool v_flag);
 static char *envmatch (char * s1, char * s2);
 static int env_init (void);
 static int parse_config (void);
@@ -288,7 +289,7 @@ int fw_printenv (int argc, char *argv[])
  */
 int fw_setenv (int argc, char *argv[])
 {
-	int i, len;
+	int i, len, v_flag;
 	char *env, *nxt;
 	char *oldval = NULL;
 	char *name;
@@ -297,6 +298,16 @@ int fw_setenv (int argc, char *argv[])
 		return (EINVAL);
 	}
 
+	if (strcmp (argv[1], "-v") == 0) {
+		v_flag = true;
+		++argv;
+		--argc;
+		if (argc < 2)
+		    return (EINVAL);
+	} else {
+		v_flag = false;
+	}
+
 	if (env_init ())
 		return (errno);
 
@@ -386,7 +397,7 @@ int fw_setenv (int argc, char *argv[])
 	environment.crc = crc32 (0, (uint8_t*) environment.data, ENV_SIZE);
 
 	/* write environment back to flash */
-	if (flash_io (O_RDWR)) {
+	if (flash_io (O_RDWR, v_flag)) {
 		fprintf (stderr, "Error: can't write fw_env to flash\n");
 		return (-1);
 	}
@@ -394,11 +405,14 @@ int fw_setenv (int argc, char *argv[])
 	return (0);
 }
 
-static int flash_io (int mode)
+static int flash_io (int mode, bool v_flag)
 {
 	int fd, fdr, rc, otherdev, len, resid;
 	erase_info_t erase;
 	char *data = NULL;
+	FILE *diag = NULL;
+
+	diag = (v_flag ? stdout : fopen("/dev/null", "r+"));
 
 	if ((fd = open (DEVNAME (curdev), mode)) < 0) {
 		fprintf (stderr,
@@ -427,7 +441,7 @@ static int flash_io (int mode)
 			otherdev = curdev;
 			fdr = fd;
 		}
-		printf ("Unlocking flash...\n");
+		fprintf (diag, "Unlocking flash...\n");
 		erase.length = DEVESIZE (otherdev);
 		erase.start = DEVOFFSET (otherdev);
 		ioctl (fdr, MEMUNLOCK, &erase);
@@ -439,7 +453,7 @@ static int flash_io (int mode)
 			environment.flags = active_flag;
 		}
 
-		printf ("Done\n");
+		fprintf (diag, "Done\n");
 		resid = DEVESIZE (otherdev) - CFG_ENV_SIZE;
 		if (resid) {
 			if ((data = malloc (resid)) == NULL) {
@@ -465,7 +479,7 @@ static int flash_io (int mode)
 			}
 		}
 
-		printf ("Erasing old environment...\n");
+		fprintf (diag, "Erasing old environment...\n");
 
 		erase.length = DEVESIZE (otherdev);
 		erase.start = DEVOFFSET (otherdev);
@@ -476,9 +490,10 @@ static int flash_io (int mode)
 			return (-1);
 		}
 
-		printf ("Done\n");
+		fprintf (diag, "Done\n");
 
-		printf ("Writing environment to %s...\n", DEVNAME (otherdev));
+		fprintf (diag, "Writing environment to %s...\n",
+			 DEVNAME (otherdev));
 		if (lseek (fdr, DEVOFFSET (otherdev), SEEK_SET) == -1) {
 			fprintf (stderr,
 				"seek error on %s: %s\n",
@@ -522,8 +537,8 @@ static int flash_io (int mode)
 				return (-1);
 			}
 		}
-		printf ("Done\n");
-		printf ("Locking ...\n");
+		fprintf (diag, "Done\n");
+		fprintf (diag, "Locking ...\n");
 		erase.length = DEVESIZE (otherdev);
 		erase.start = DEVOFFSET (otherdev);
 		ioctl (fdr, MEMLOCK, &erase);
@@ -539,7 +554,7 @@ static int flash_io (int mode)
 				return (-1);
 			}
 		}
-		printf ("Done\n");
+		fprintf (diag, "Done\n");
 	} else {
 
 		if (lseek (fd, DEVOFFSET (curdev), SEEK_SET) == -1) {
@@ -614,7 +629,7 @@ static int env_init (void)
 	/* read environment from FLASH to local buffer */
 	environment.data = addr1;
 	curdev = 0;
-	if (flash_io (O_RDONLY)) {
+	if (flash_io (O_RDONLY, false)) {
 		return (errno);
 	}
 
@@ -638,8 +653,7 @@ static int env_init (void)
 		}
 		environment.data = addr2;
 
-		if (flash_io (O_RDONLY)) {
+		if (flash_io (O_RDONLY, false)) {
 			return (errno);
 		}
 
-- 
1.6.0


More information about the U-Boot mailing list