diff options
Diffstat (limited to 'tools')
-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 b60395e..f70c023 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 |