diff options
Diffstat (limited to 'tools/env/fw_env.c')
| -rw-r--r-- | tools/env/fw_env.c | 484 | 
1 files changed, 240 insertions, 244 deletions
| diff --git a/tools/env/fw_env.c b/tools/env/fw_env.c index b60395ecb..f70c023e3 100644 --- a/tools/env/fw_env.c +++ b/tools/env/fw_env.c @@ -1,5 +1,5 @@  /* - * (C) Copyright 2000 + * (C) Copyright 2000-2003   * Wolfgang Denk, DENX Software Engineering, wd@denx.de.   *   * See file CREDITS for list of people who contributed to this @@ -12,7 +12,7 @@   *   * This program is distributed in the hope that it will be useful,   * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the   * GNU General Public License for more details.   *   * You should have received a copy of the GNU General Public License @@ -34,16 +34,16 @@  #include <linux/mtd/mtd.h>  #include "fw_env.h" -typedef	unsigned char	uchar; +typedef unsigned char uchar;  #define	CMD_GETENV	"fw_printenv"  #define	CMD_SETENV	"fw_setenv"  typedef struct envdev_s { -	uchar devname[16]; /* Device name */ -	ulong devoff;      /* Device offset */ -	ulong env_size;    /* environment size */ -	ulong erase_size;  /* device erase size */ +	uchar devname[16];		/* Device name */ +	ulong devoff;			/* Device offset */ +	ulong env_size;			/* environment size */ +	ulong erase_size;		/* device erase size */  } envdev_t;  static envdev_t envdevices[2]; @@ -59,8 +59,8 @@ static int curdev;  #define ENV_SIZE      getenvsize()  typedef struct environment_s { -	ulong	crc;		/* CRC32 over data bytes	*/ -	uchar   flags;      /* active or obsolete */ +	ulong crc;			/* CRC32 over data bytes    */ +	uchar flags;			/* active or obsolete */  	uchar *data;  } env_t; @@ -77,92 +77,94 @@ static uchar obsolete_flag = 0;  static uchar default_environment[] = {  #if defined(CONFIG_BOOTARGS) -	"bootargs="	CONFIG_BOOTARGS			"\0" +	"bootargs=" CONFIG_BOOTARGS "\0"  #endif  #if defined(CONFIG_BOOTCOMMAND) -	"bootcmd="	CONFIG_BOOTCOMMAND		"\0" +	"bootcmd=" CONFIG_BOOTCOMMAND "\0"  #endif  #if defined(CONFIG_RAMBOOTCOMMAND) -	"ramboot="	CONFIG_RAMBOOTCOMMAND		"\0" +	"ramboot=" CONFIG_RAMBOOTCOMMAND "\0"  #endif  #if defined(CONFIG_NFSBOOTCOMMAND) -	"nfsboot="	CONFIG_NFSBOOTCOMMAND		"\0" +	"nfsboot=" CONFIG_NFSBOOTCOMMAND "\0"  #endif  #if defined(CONFIG_BOOTDELAY) && (CONFIG_BOOTDELAY >= 0) -	"bootdelay="	MK_STR(CONFIG_BOOTDELAY)	"\0" +	"bootdelay=" MK_STR (CONFIG_BOOTDELAY) "\0"  #endif  #if defined(CONFIG_BAUDRATE) && (CONFIG_BAUDRATE >= 0) -	"baudrate="	MK_STR(CONFIG_BAUDRATE)		"\0" +	"baudrate=" MK_STR (CONFIG_BAUDRATE) "\0"  #endif  #ifdef	CONFIG_LOADS_ECHO -	"loads_echo="	MK_STR(CONFIG_LOADS_ECHO)	"\0" +	"loads_echo=" MK_STR (CONFIG_LOADS_ECHO) "\0"  #endif  #ifdef	CONFIG_ETHADDR -	"ethaddr="	MK_STR(CONFIG_ETHADDR)		"\0" +	"ethaddr=" MK_STR (CONFIG_ETHADDR) "\0"  #endif  #ifdef	CONFIG_ETH1ADDR -	"eth1addr="	MK_STR(CONFIG_ETH1ADDR)		"\0" +	"eth1addr=" MK_STR (CONFIG_ETH1ADDR) "\0"  #endif  #ifdef	CONFIG_ETH2ADDR -	"eth2addr="	MK_STR(CONFIG_ETH2ADDR)		"\0" +	"eth2addr=" MK_STR (CONFIG_ETH2ADDR) "\0"  #endif  #ifdef	CONFIG_ETHPRIME -	"ethprime="	CONFIG_ETHPRIME			"\0" +	"ethprime=" CONFIG_ETHPRIME "\0"  #endif  #ifdef	CONFIG_IPADDR -	"ipaddr="	MK_STR(CONFIG_IPADDR)		"\0" +	"ipaddr=" MK_STR (CONFIG_IPADDR) "\0"  #endif  #ifdef	CONFIG_SERVERIP -	"serverip="	MK_STR(CONFIG_SERVERIP)		"\0" +	"serverip=" MK_STR (CONFIG_SERVERIP) "\0"  #endif  #ifdef	CFG_AUTOLOAD -	"autoload="	CFG_AUTOLOAD			"\0" +	"autoload=" CFG_AUTOLOAD "\0"  #endif  #ifdef	CONFIG_ROOTPATH -	"rootpath="	MK_STR(CONFIG_ROOTPATH)		"\0" +	"rootpath=" MK_STR (CONFIG_ROOTPATH) "\0"  #endif  #ifdef	CONFIG_GATEWAYIP -	"gatewayip="	MK_STR(CONFIG_GATEWAYIP)	"\0" +	"gatewayip=" MK_STR (CONFIG_GATEWAYIP) "\0"  #endif  #ifdef	CONFIG_NETMASK -	"netmask="	MK_STR(CONFIG_NETMASK)		"\0" +	"netmask=" MK_STR (CONFIG_NETMASK) "\0"  #endif  #ifdef	CONFIG_HOSTNAME -	"hostname="	MK_STR(CONFIG_HOSTNAME)		"\0" +	"hostname=" MK_STR (CONFIG_HOSTNAME) "\0"  #endif  #ifdef	CONFIG_BOOTFILE -	"bootfile="	MK_STR(CONFIG_BOOTFILE)		"\0" +	"bootfile=" MK_STR (CONFIG_BOOTFILE) "\0"  #endif  #ifdef	CONFIG_LOADADDR -	"loadaddr="	MK_STR(CONFIG_LOADADDR)		"\0" +	"loadaddr=" MK_STR (CONFIG_LOADADDR) "\0"  #endif  #ifdef	CONFIG_PREBOOT -	"preboot="	CONFIG_PREBOOT			"\0" +	"preboot=" CONFIG_PREBOOT "\0"  #endif  #ifdef	CONFIG_CLOCKS_IN_MHZ -	"clocks_in_mhz=" "1"				"\0" +	"clocks_in_mhz=" "1" "\0"  #endif  #if defined(CONFIG_PCI_BOOTDELAY) && (CONFIG_PCI_BOOTDELAY > 0) -	"pcidelay="	MK_STR(CONFIG_PCI_BOOTDELAY)	"\0" +	"pcidelay=" MK_STR (CONFIG_PCI_BOOTDELAY) "\0"  #endif  #ifdef  CONFIG_EXTRA_ENV_SETTINGS  	CONFIG_EXTRA_ENV_SETTINGS  #endif -	"\0"		/* Termimate env_t data with 2 NULs */ +	"\0"			/* Termimate env_t data with 2 NULs */  }; -static int  flash_io (int mode); -static uchar *envmatch(uchar *s1, uchar *s2); -static int env_init(void); -static int parse_config(void); +static int flash_io (int mode); +static uchar *envmatch (uchar * s1, uchar * s2); +static int env_init (void); +static int parse_config (void); +  #if defined(CONFIG_FILE) -static int get_config(char *); +static int get_config (char *);  #endif -static inline ulong getenvsize(void) +static inline ulong getenvsize (void)  { -	ulong rc = CFG_ENV_SIZE - sizeof(long); +	ulong rc = CFG_ENV_SIZE - sizeof (long); +  	if (HaveRedundEnv) -		rc -= sizeof(char); +		rc -= sizeof (char);  	return rc;  } @@ -174,20 +176,20 @@ unsigned char *fw_getenv (unsigned char *name)  {  	uchar *env, *nxt; -	if (env_init()) +	if (env_init ())  		return (NULL); -	for (env=environment.data; *env; env=nxt+1) { +	for (env = environment.data; *env; env = nxt + 1) {  		uchar *val; -		for (nxt=env; *nxt; ++nxt) { +		for (nxt = env; *nxt; ++nxt) {  			if (nxt >= &environment.data[ENV_SIZE]) {  				fprintf (stderr, "## Error: "  					"environment not terminated\n");  				return (NULL);  			}  		} -		val=envmatch(name, env); +		val = envmatch (name, env);  		if (!val)  			continue;  		return (val); @@ -199,17 +201,17 @@ unsigned char *fw_getenv (unsigned char *name)   * Print the current definition of one, or more, or all   * environment variables   */ -void fw_printenv(int argc, char *argv[]) +void fw_printenv (int argc, char *argv[])  {  	uchar *env, *nxt;  	int i, n_flag; -	if (env_init()) +	if (env_init ())  		return; -	if (argc == 1) {		/* Print all env variables	*/ -		for (env=environment.data; *env; env=nxt+1) { -			for (nxt=env; *nxt; ++nxt) { +	if (argc == 1) {		/* Print all env variables  */ +		for (env = environment.data; *env; env = nxt + 1) { +			for (nxt = env; *nxt; ++nxt) {  				if (nxt >= &environment.data[ENV_SIZE]) {  					fprintf (stderr, "## Error: "  						"environment not terminated\n"); @@ -217,12 +219,12 @@ void fw_printenv(int argc, char *argv[])  				}  			} -			printf("%s\n", env); +			printf ("%s\n", env);  		}  		return;  	} -	if (strcmp(argv[1], "-n") == 0) { +	if (strcmp (argv[1], "-n") == 0) {  		n_flag = 1;  		++argv;  		--argc; @@ -235,32 +237,31 @@ void fw_printenv(int argc, char *argv[])  		n_flag = 0;  	} -	for (i=1; i<argc; ++i) {	/* print single env variables	*/ +	for (i = 1; i < argc; ++i) {	/* print single env variables   */  		uchar *name = argv[i];  		uchar *val = NULL; -		for (env=environment.data; *env; env=nxt+1) { +		for (env = environment.data; *env; env = nxt + 1) { -			for (nxt=env; *nxt; ++nxt) { +			for (nxt = env; *nxt; ++nxt) {  				if (nxt >= &environment.data[ENV_SIZE]) {  					fprintf (stderr, "## Error: "  						"environment not terminated\n");  					return;  				}  			} -			val=envmatch(name, env); +			val = envmatch (name, env);  			if (val) {  				if (!n_flag) {  					fputs (name, stdout); -					putc  ('=',  stdout); +					putc ('=', stdout);  				} -				puts  (val); +				puts (val);  				break;  			}  		}  		if (!val) -			fprintf (stderr, "## Error: \"%s\" not defined\n", -			 name); +			fprintf (stderr, "## Error: \"%s\" not defined\n", name);  	}  } @@ -274,7 +275,7 @@ void fw_printenv(int argc, char *argv[])   */  int fw_setenv (int argc, char *argv[])  { -	int  i, len; +	int i, len;  	uchar *env, *nxt;  	uchar *oldval = NULL;  	uchar *name; @@ -283,7 +284,7 @@ int fw_setenv (int argc, char *argv[])  		return (EINVAL);  	} -	if (env_init()) +	if (env_init ())  		return (errno);  	name = argv[1]; @@ -291,15 +292,15 @@ int fw_setenv (int argc, char *argv[])  	/*  	 * search if variable with this name already exists  	 */ -	for (env=environment.data; *env; env=nxt+1) { -		for (nxt=env; *nxt; ++nxt) { +	for (nxt = env = environment.data; *env; env = nxt + 1) { +		for (nxt = env; *nxt; ++nxt) {  			if (nxt >= &environment.data[ENV_SIZE]) {  				fprintf (stderr, "## Error: "  					"environment not terminated\n");  				return (EINVAL);  			}  		} -		if ((oldval=envmatch(name, env)) != NULL) +		if ((oldval = envmatch (name, env)) != NULL)  			break;  	} @@ -311,7 +312,7 @@ int fw_setenv (int argc, char *argv[])  		 * Ethernet Address and serial# can be set only once  		 */  		if ((strcmp (name, "ethaddr") == 0) || -		    (strcmp (name, "serial#") == 0) ) { +			(strcmp (name, "serial#") == 0)) {  			fprintf (stderr, "Can't overwrite \"%s\"\n", name);  			return (EROFS);  		} @@ -336,20 +337,19 @@ int fw_setenv (int argc, char *argv[])  	/*  	 * Append new definition at the end  	 */ -	for (env=environment.data; *env || *(env+1); ++env) -		; +	for (env = environment.data; *env || *(env + 1); ++env);  	if (env > environment.data)  		++env;  	/*  	 * Overflow when:  	 * "name" + "=" + "val" +"\0\0"  > CFG_ENV_SIZE - (env-environment)  	 */ -	len = strlen(name) + 2; +	len = strlen (name) + 2;  	/* add '=' for first arg, ' ' for all others */ -	for (i=2; i<argc; ++i) { -		len += strlen(argv[i]) + 1; +	for (i = 2; i < argc; ++i) { +		len += strlen (argv[i]) + 1;  	} -	if (len > (&environment.data[ENV_SIZE]-env)) { +	if (len > (&environment.data[ENV_SIZE] - env)) {  		fprintf (stderr,  			"Error: environment overflow, \"%s\" deleted\n",  			name); @@ -357,26 +357,24 @@ int fw_setenv (int argc, char *argv[])  	}  	while ((*env = *name++) != '\0')  		env++; -	for (i=2; i<argc; ++i) { +	for (i = 2; i < argc; ++i) {  		uchar *val = argv[i]; -		*env = (i==2) ? '=' : ' '; -		while ((*++env = *val++) != '\0') -			; +		*env = (i == 2) ? '=' : ' '; +		while ((*++env = *val++) != '\0');  	}  	/* end is marked with double '\0' */  	*++env = '\0'; -WRITE_FLASH: +  WRITE_FLASH:  	/* Update CRC */ -	environment.crc = crc32(0, environment.data, ENV_SIZE); +	environment.crc = crc32 (0, environment.data, ENV_SIZE);  	/* write environment back to flash */  	if (flash_io (O_RDWR)) { -		fprintf (stderr, -			"Error: can't write fw_env to flash\n"); +		fprintf (stderr, "Error: can't write fw_env to flash\n");  		return (-1);  	} @@ -389,166 +387,172 @@ static int flash_io (int mode)  	erase_info_t erase;  	char *data; -	if ((fd = open(DEVNAME(curdev), mode)) < 0) { -		fprintf (stderr,  -				 "Can't open %s: %s\n",  -				 DEVNAME(curdev), strerror(errno)); +	if ((fd = open (DEVNAME (curdev), mode)) < 0) { +		fprintf (stderr, +			"Can't open %s: %s\n", +			DEVNAME (curdev), strerror (errno));  		return (-1);  	} -	len = sizeof(environment.crc); +	len = sizeof (environment.crc);  	if (HaveRedundEnv) { -		len += sizeof(environment.flags); +		len += sizeof (environment.flags);  	}  	if (mode == O_RDWR) {  		if (HaveRedundEnv) {  			/* switch to next partition for writing */  			otherdev = !curdev; -			if ((fdr = open(DEVNAME(otherdev), mode)) < 0) { -				fprintf (stderr,  -						 "Can't open %s: %s\n",  -						 DEVNAME(otherdev), strerror(errno)); +			if ((fdr = open (DEVNAME (otherdev), mode)) < 0) { +				fprintf (stderr, +					"Can't open %s: %s\n", +					DEVNAME (otherdev), +					strerror (errno));  				return (-1);  			}  		} else {  			otherdev = curdev;  			fdr = fd;  		} -		printf("Unlocking flash...\n"); -		erase.length = DEVESIZE(otherdev); -		erase.start = DEVOFFSET(otherdev); +		printf ("Unlocking flash...\n"); +		erase.length = DEVESIZE (otherdev); +		erase.start = DEVOFFSET (otherdev);  		ioctl (fdr, MEMUNLOCK, &erase);  		if (HaveRedundEnv) { -			erase.length = DEVESIZE(curdev); -			erase.start = DEVOFFSET(curdev); +			erase.length = DEVESIZE (curdev); +			erase.start = DEVOFFSET (curdev);  			ioctl (fd, MEMUNLOCK, &erase);  			environment.flags = active_flag;  		} -		printf("Done\n"); -		resid = DEVESIZE(otherdev) - CFG_ENV_SIZE; +		printf ("Done\n"); +		resid = DEVESIZE (otherdev) - CFG_ENV_SIZE;  		if (resid) { -			if ((data = malloc(resid)) == NULL) { -				fprintf(stderr,  -				  "Cannot malloc %d bytes: %s\n", -				  resid, strerror(errno)); +			if ((data = malloc (resid)) == NULL) { +				fprintf (stderr, +					"Cannot malloc %d bytes: %s\n", +					resid, +					strerror (errno));  				return (-1);  			} -			if (lseek (fdr, DEVOFFSET(otherdev) + CFG_ENV_SIZE, SEEK_SET) == -1) { -				fprintf (stderr, -				  "seek error on %s: %s\n",  -				   DEVNAME(otherdev), strerror(errno)); +			if (lseek (fdr, DEVOFFSET (otherdev) + CFG_ENV_SIZE, SEEK_SET) +				== -1) { +				fprintf (stderr, "seek error on %s: %s\n", +					DEVNAME (otherdev), +					strerror (errno));  				return (-1);  			}  			if ((rc = read (fdr, data, resid)) != resid) {  				fprintf (stderr, -				  "read error on %s: %s\n",  -				  DEVNAME(otherdev), strerror(errno)); +					"read error on %s: %s\n", +					DEVNAME (otherdev), +					strerror (errno));  				return (-1);  			}  		} -		printf("Erasing old environment...\n"); +		printf ("Erasing old environment...\n"); -		erase.length = DEVESIZE(otherdev); -		erase.start = DEVOFFSET(otherdev); +		erase.length = DEVESIZE (otherdev); +		erase.start = DEVOFFSET (otherdev);  		if (ioctl (fdr, MEMERASE, &erase) != 0) {  			fprintf (stderr, "MTD erase error on %s: %s\n", -			  DEVNAME(otherdev), strerror(errno)); +				DEVNAME (otherdev), +				strerror (errno));  			return (-1);  		} -		printf("Done\n"); +		printf ("Done\n"); -		printf("Writing environment to %s...\n",DEVNAME(otherdev)); -		if (lseek (fdr, DEVOFFSET(otherdev), SEEK_SET) == -1) { +		printf ("Writing environment to %s...\n", DEVNAME (otherdev)); +		if (lseek (fdr, DEVOFFSET (otherdev), SEEK_SET) == -1) {  			fprintf (stderr, -			  "seek error on %s: %s\n",  -			  DEVNAME(otherdev), strerror(errno)); +				"seek error on %s: %s\n", +				DEVNAME (otherdev), strerror (errno));  			return (-1);  		} -		if (write(fdr, &environment, len) != len) { +		if (write (fdr, &environment, len) != len) {  			fprintf (stderr, -			  "CRC write error on %s: %s\n",  -			  DEVNAME(otherdev), strerror(errno)); +				"CRC write error on %s: %s\n", +				DEVNAME (otherdev), strerror (errno));  			return (-1);  		} -		if (write(fdr, environment.data, ENV_SIZE) != ENV_SIZE) { +		if (write (fdr, environment.data, ENV_SIZE) != ENV_SIZE) {  			fprintf (stderr, -			  "Write error on %s: %s\n",  -			  DEVNAME(otherdev), strerror(errno)); +				"Write error on %s: %s\n", +				DEVNAME (otherdev), strerror (errno));  			return (-1);  		}  		if (resid) {  			if (write (fdr, data, resid) != resid) {  				fprintf (stderr, -				 "write error on %s: %s\n",  -				  DEVNAME(curdev), strerror(errno)); +					"write error on %s: %s\n", +					DEVNAME (curdev), strerror (errno));  				return (-1);  			} -			free(data); +			free (data);  		}  		if (HaveRedundEnv) {  			/* change flag on current active env partition */ -			if (lseek (fd, DEVOFFSET(curdev) + sizeof(ulong), SEEK_SET) == -1) { -				fprintf (stderr, -						 "seek error on %s: %s\n",  -						 DEVNAME(curdev), strerror(errno)); +			if (lseek (fd, DEVOFFSET (curdev) + sizeof (ulong), SEEK_SET) +				== -1) { +				fprintf (stderr, "seek error on %s: %s\n", +					DEVNAME (curdev), strerror (errno));  				return (-1);  			} -			if (write (fd, &obsolete_flag, sizeof(obsolete_flag)) !=  -				sizeof(obsolete_flag)) { +			if (write (fd, &obsolete_flag, sizeof (obsolete_flag)) != +				sizeof (obsolete_flag)) {  				fprintf (stderr, -						 "Write error on %s: %s\n",  -						 DEVNAME(curdev), strerror(errno)); +					"Write error on %s: %s\n", +					DEVNAME (curdev), strerror (errno));  				return (-1);  			}  		} -		printf("Done\n"); -		printf("Locking ...\n"); -		erase.length = DEVESIZE(otherdev); -		erase.start = DEVOFFSET(otherdev); +		printf ("Done\n"); +		printf ("Locking ...\n"); +		erase.length = DEVESIZE (otherdev); +		erase.start = DEVOFFSET (otherdev);  		ioctl (fdr, MEMLOCK, &erase);  		if (HaveRedundEnv) { -			erase.length = DEVESIZE(curdev); -			erase.start = DEVOFFSET(curdev); +			erase.length = DEVESIZE (curdev); +			erase.start = DEVOFFSET (curdev);  			ioctl (fd, MEMLOCK, &erase); -			if (close(fdr)) { +			if (close (fdr)) {  				fprintf (stderr, -						 "I/O error on %s: %s\n",  -						 DEVNAME(otherdev), strerror(errno)); +					"I/O error on %s: %s\n", +					DEVNAME (otherdev), +					strerror (errno));  				return (-1);  			}  		} -		printf("Done\n"); +		printf ("Done\n");  	} else { -		if (lseek (fd, DEVOFFSET(curdev), SEEK_SET) == -1) { +		if (lseek (fd, DEVOFFSET (curdev), SEEK_SET) == -1) {  			fprintf (stderr, -					 "seek error on %s: %s\n",  -					 DEVNAME(curdev), strerror(errno)); +				"seek error on %s: %s\n", +				DEVNAME (curdev), strerror (errno));  			return (-1);  		}  		if (read (fd, &environment, len) != len) {  			fprintf (stderr, -			 "CRC read error on %s: %s\n",  -			 DEVNAME(curdev), strerror(errno)); +				"CRC read error on %s: %s\n", +				DEVNAME (curdev), strerror (errno));  			return (-1);  		}  		if ((rc = read (fd, environment.data, ENV_SIZE)) != ENV_SIZE) {  			fprintf (stderr, -			 "Read error on %s: %s\n",  -			  DEVNAME(curdev), strerror(errno)); +				"Read error on %s: %s\n", +				DEVNAME (curdev), strerror (errno));  			return (-1);  		}  	} -	if (close(fd)) { +	if (close (fd)) {  		fprintf (stderr, -		  "I/O error on %s: %s\n",  -		  DEVNAME(curdev), strerror(errno)); +			"I/O error on %s: %s\n", +			DEVNAME (curdev), strerror (errno));  		return (-1);  	} @@ -562,22 +566,21 @@ static int flash_io (int mode)   * If the names match, return the value of s2, else NULL.   */ -static uchar * -envmatch (uchar *s1, uchar *s2) +static uchar *envmatch (uchar * s1, uchar * s2)  {  	while (*s1 == *s2++)  		if (*s1++ == '=') -			return(s2); -	if (*s1 == '\0' && *(s2-1) == '=') -		return(s2); -	return(NULL); +			return (s2); +	if (*s1 == '\0' && *(s2 - 1) == '=') +		return (s2); +	return (NULL);  }  /*   * Prevent confusion if running from erased flash memory   */ -static int env_init(void) +static int env_init (void)  {  	int crc1, crc1_ok;  	uchar *addr1; @@ -585,151 +588,142 @@ static int env_init(void)  	int crc2, crc2_ok;  	uchar flag1, flag2, *addr2; -	if (parse_config()) /* should fill envdevices */ +	if (parse_config ())		/* should fill envdevices */  		return 1; -	 +  	if ((addr1 = calloc (1, ENV_SIZE)) == NULL) { -		fprintf (stderr,  -				 "Not enough memory for environment (%ld bytes)\n", -				 ENV_SIZE); +		fprintf (stderr, +			"Not enough memory for environment (%ld bytes)\n", +			ENV_SIZE);  		return (errno);  	} -	 +  	/* read environment from FLASH to local buffer */  	environment.data = addr1;  	curdev = 0;  	if (flash_io (O_RDONLY)) {  		return (errno);  	} -	 -	crc1_ok = ((crc1 = crc32(0, environment.data, ENV_SIZE))  + +	crc1_ok = ((crc1 = crc32 (0, environment.data, ENV_SIZE))  			   == environment.crc);  	if (!HaveRedundEnv) {  		if (!crc1_ok) { -			fprintf (stderr,  -					 "Warning: Bad CRC, using default environment\n"); +			fprintf (stderr, +				"Warning: Bad CRC, using default environment\n");  			environment.data = default_environment; -			free(addr1); +			free (addr1);  		}  	} else {  		flag1 = environment.flags; -		 +  		curdev = 1;  		if ((addr2 = calloc (1, ENV_SIZE)) == NULL) { -			fprintf (stderr,  -					 "Not enough memory for environment (%ld bytes)\n", -					 ENV_SIZE); +			fprintf (stderr, +				"Not enough memory for environment (%ld bytes)\n", +				ENV_SIZE);  			return (errno); -		}		 +		}  		environment.data = addr2; -		 +  		if (flash_io (O_RDONLY)) {  			return (errno);  		} -		 -		crc2_ok = ((crc2 = crc32(0, environment.data, ENV_SIZE))  + +		crc2_ok = ((crc2 = crc32 (0, environment.data, ENV_SIZE))  				   == environment.crc);  		flag2 = environment.flags; -		 -		if (crc1_ok && ! crc2_ok) { -			environment.data  = addr1; + +		if (crc1_ok && !crc2_ok) { +			environment.data = addr1;  			environment.flags = flag1;  			environment.crc = crc1;  			curdev = 0; -			free(addr2); -		} -		else if (! crc1_ok && crc2_ok) { -			environment.data  = addr2; +			free (addr2); +		} else if (!crc1_ok && crc2_ok) { +			environment.data = addr2;  			environment.flags = flag2;  			environment.crc = crc2;  			curdev = 1; -			free(addr1); -		} -		else if (! crc1_ok && ! crc2_ok) { -			fprintf (stderr,  -					 "Warning: Bad CRC, using default environment\n"); +			free (addr1); +		} else if (!crc1_ok && !crc2_ok) { +			fprintf (stderr, +				"Warning: Bad CRC, using default environment\n");  			environment.data = default_environment;  			curdev = 0; -			free(addr2); -			free(addr1); -		} -		else if (flag1 == active_flag && flag2 == obsolete_flag) { -			environment.data  = addr1; +			free (addr2); +			free (addr1); +		} else if (flag1 == active_flag && flag2 == obsolete_flag) { +			environment.data = addr1;  			environment.flags = flag1;  			environment.crc = crc1;  			curdev = 0; -			free(addr2); -		} -		else if (flag1 == obsolete_flag && flag2 == active_flag) { -			environment.data  = addr2; +			free (addr2); +		} else if (flag1 == obsolete_flag && flag2 == active_flag) { +			environment.data = addr2;  			environment.flags = flag2;  			environment.crc = crc2;  			curdev = 1; -			free(addr1); -		} -		else if (flag1 == flag2) { -			environment.data  = addr1; +			free (addr1); +		} else if (flag1 == flag2) { +			environment.data = addr1;  			environment.flags = flag1;  			environment.crc = crc1;  			curdev = 0; -			free(addr2); -		} -		else if (flag1 == 0xFF)	{ -			environment.data  = addr1; +			free (addr2); +		} else if (flag1 == 0xFF) { +			environment.data = addr1;  			environment.flags = flag1;  			environment.crc = crc1;  			curdev = 0; -			free(addr2); -		} -		else if (flag2 == 0xFF) { -			environment.data  = addr2; +			free (addr2); +		} else if (flag2 == 0xFF) { +			environment.data = addr2;  			environment.flags = flag2;  			environment.crc = crc2;  			curdev = 1; -			free(addr1); +			free (addr1);  		}  	}  	return (0);  } -static int parse_config() +static int parse_config ()  {  	struct stat st;  #if defined(CONFIG_FILE)  	/* Fills in DEVNAME(), ENVSIZE(), DEVESIZE(). Or don't. */ -	if (get_config(CONFIG_FILE)) { +	if (get_config (CONFIG_FILE)) {  		fprintf (stderr, -				 "Cannot parse config file: %s\n", -				 strerror(errno)); +			"Cannot parse config file: %s\n", strerror (errno));  		return 1;  	} -  #else -	strcpy(DEVNAME(0), DEVICE1_NAME); -	DEVOFFSET(0) = DEVICE1_OFFSET; -	ENVSIZE(0) = ENV1_SIZE; -	DEVESIZE(0) = DEVICE1_ESIZE; +	strcpy (DEVNAME (0), DEVICE1_NAME); +	DEVOFFSET (0) = DEVICE1_OFFSET; +	ENVSIZE (0) = ENV1_SIZE; +	DEVESIZE (0) = DEVICE1_ESIZE;  #ifdef HAVE_REDUND -	strcpy(DEVNAME(1), DEVICE2_NAME); -	DEVOFFSET(1) = DEVICE2_OFFSET; -	ENVSIZE(1) = ENV2_SIZE; -	DEVESIZE(1) = DEVICE2_ESIZE; +	strcpy (DEVNAME (1), DEVICE2_NAME); +	DEVOFFSET (1) = DEVICE2_OFFSET; +	ENVSIZE (1) = ENV2_SIZE; +	DEVESIZE (1) = DEVICE2_ESIZE;  	HaveRedundEnv = 1;  #endif  #endif -	if (stat (DEVNAME(0), &st)) { -		fprintf (stderr,  -		 "Cannot access MTD device %s: %s\n",  -		 DEVNAME(0), strerror(errno)); +	if (stat (DEVNAME (0), &st)) { +		fprintf (stderr, +			"Cannot access MTD device %s: %s\n", +			DEVNAME (0), strerror (errno));  		return 1;  	} -	 -	if (HaveRedundEnv && stat (DEVNAME(1), &st)) { -		fprintf (stderr,  -		 "Cannot access MTD device %s: %s\n",  -		 DEVNAME(2), strerror(errno)); + +	if (HaveRedundEnv && stat (DEVNAME (1), &st)) { +		fprintf (stderr, +			"Cannot access MTD device %s: %s\n", +			DEVNAME (2), strerror (errno));  		return 1;  	}  	return 0; @@ -743,26 +737,28 @@ static int get_config (char *fname)  	int rc;  	char dump[128]; -	if ((fp = fopen(fname, "r")) == NULL) { +	if ((fp = fopen (fname, "r")) == NULL) {  		return 1;  	} -	while ((i < 2) &&  -		   ((rc = fscanf (fp, "%s %lx %lx %lx", -						  DEVNAME(i), &DEVOFFSET(i), &ENVSIZE(i), &DEVESIZE(i))) != EOF)) { +	while ((i < 2) && ((rc = fscanf (fp, "%s %lx %lx %lx", +				  DEVNAME (i), +				  &DEVOFFSET (i), +				  &ENVSIZE (i), +				  &DEVESIZE (i)  )) != EOF)) {  		/* Skip incomplete conversions and comment strings */ -		if ((rc < 3) || (*DEVNAME(i) == '#')) {  -			fgets (dump, sizeof(dump), fp); /* Consume till end */ +		if ((rc < 3) || (*DEVNAME (i) == '#')) { +			fgets (dump, sizeof (dump), fp);	/* Consume till end */  			continue;  		}  		i++;  	} -	fclose(fp); -	 +	fclose (fp); +  	HaveRedundEnv = i - 1; -	if (!i) { /* No valid entries found */ +	if (!i) {			/* No valid entries found */  		errno = EINVAL;  		return 1;  	} else |