Use consistent naming for active and redundant environment variables, remove redundant erase struct initialisation by using separate structs for the active and redundant environments.
Signed-off-by: Guennadi Liakhovetski <[EMAIL PROTECTED]> --- tools/env/fw_env.c | 129 +++++++++++++++++++++++++-------------------------- 1 files changed, 63 insertions(+), 66 deletions(-) diff --git a/tools/env/fw_env.c b/tools/env/fw_env.c index 2c82970..556aa85 100644 --- a/tools/env/fw_env.c +++ b/tools/env/fw_env.c @@ -52,14 +52,14 @@ typedef struct envdev_s { } envdev_t; static envdev_t envdevices[2]; -static int curdev; +static int dev_current; #define DEVNAME(i) envdevices[(i)].devname #define DEVOFFSET(i) envdevices[(i)].devoff #define ENVSIZE(i) envdevices[(i)].env_size #define DEVESIZE(i) envdevices[(i)].erase_size -#define CFG_ENV_SIZE ENVSIZE(curdev) +#define CFG_ENV_SIZE ENVSIZE(dev_current) #define ENV_SIZE getenvsize() @@ -415,45 +415,47 @@ int fw_setenv (int argc, char *argv[]) static int flash_write (void) { - int fd, fdr, rc, otherdev, resid; - erase_info_t erase; + int fd_current, fd_target, rc, dev_target, resid; + erase_info_t erase_current = {}, erase_target; char *data = NULL; - if ((fd = open (DEVNAME (curdev), O_RDWR)) < 0) { + /* dev_current: fd_current, erase_current */ + if ((fd_current = open (DEVNAME (dev_current), O_RDWR)) < 0) { fprintf (stderr, "Can't open %s: %s\n", - DEVNAME (curdev), strerror (errno)); + DEVNAME (dev_current), strerror (errno)); return -1; } if (HaveRedundEnv) { /* switch to next partition for writing */ - otherdev = !curdev; - if ((fdr = open (DEVNAME (otherdev), O_RDWR)) < 0) { + dev_target = !dev_current; + /* dev_target: fd_target, erase_target */ + if ((fd_target = open (DEVNAME (dev_target), O_RDWR)) < 0) { fprintf (stderr, "Can't open %s: %s\n", - DEVNAME (otherdev), + DEVNAME (dev_target), strerror (errno)); return -1; } } else { - otherdev = curdev; - fdr = fd; + dev_target = dev_current; + fd_target = fd_current; } printf ("Unlocking flash...\n"); - erase.length = DEVESIZE (otherdev); - erase.start = DEVOFFSET (otherdev); - ioctl (fdr, MEMUNLOCK, &erase); + erase_target.length = DEVESIZE (dev_target); + erase_target.start = DEVOFFSET (dev_target); + ioctl (fd_target, MEMUNLOCK, &erase_target); if (HaveRedundEnv) { - erase.length = DEVESIZE (curdev); - erase.start = DEVOFFSET (curdev); - ioctl (fd, MEMUNLOCK, &erase); + erase_current.length = DEVESIZE (dev_current); + erase_current.start = DEVOFFSET (dev_current); + ioctl (fd_current, MEMUNLOCK, &erase_current); ENV_FLAGS(environment) = active_flag; } printf ("Done\n"); - resid = DEVESIZE (otherdev) - CFG_ENV_SIZE; + resid = DEVESIZE (dev_target) - CFG_ENV_SIZE; if (resid) { if ((data = malloc (resid)) == NULL) { fprintf (stderr, @@ -462,17 +464,17 @@ static int flash_write (void) strerror (errno)); return -1; } - if (lseek (fdr, DEVOFFSET (otherdev) + CFG_ENV_SIZE, SEEK_SET) - == -1) { + if (lseek (fd_target, DEVOFFSET (dev_target) + CFG_ENV_SIZE, + SEEK_SET) == -1) { fprintf (stderr, "seek error on %s: %s\n", - DEVNAME (otherdev), + DEVNAME (dev_target), strerror (errno)); return -1; } - if ((rc = read (fdr, data, resid)) != resid) { + if ((rc = read (fd_target, data, resid)) != resid) { fprintf (stderr, "read error on %s: %s\n", - DEVNAME (otherdev), + DEVNAME (dev_target), strerror (errno)); return -1; } @@ -480,80 +482,75 @@ static int flash_write (void) printf ("Erasing old environment...\n"); - erase.length = DEVESIZE (otherdev); - erase.start = DEVOFFSET (otherdev); - if (ioctl (fdr, MEMERASE, &erase) != 0) { + if (ioctl (fd_target, MEMERASE, &erase_target) != 0) { fprintf (stderr, "MTD erase error on %s: %s\n", - DEVNAME (otherdev), + DEVNAME (dev_target), strerror (errno)); return -1; } 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 (dev_target)); + if (lseek (fd_target, DEVOFFSET (dev_target), SEEK_SET) == -1) { fprintf (stderr, "seek error on %s: %s\n", - DEVNAME (otherdev), strerror (errno)); + DEVNAME (dev_target), strerror (errno)); return -1; } - if (write (fdr, environment.image, CFG_ENV_SIZE) != CFG_ENV_SIZE) { + if (write (fd_target, environment.image, CFG_ENV_SIZE) != + CFG_ENV_SIZE) { fprintf (stderr, "Write error on %s: %s\n", - DEVNAME (otherdev), strerror (errno)); + DEVNAME (dev_target), strerror (errno)); return -1; } if (resid) { - if (write (fdr, data, resid) != resid) { + if (write (fd_target, data, resid) != resid) { fprintf (stderr, "write error on %s: %s\n", - DEVNAME (curdev), strerror (errno)); + DEVNAME (dev_current), strerror (errno)); return -1; } free (data); } if (HaveRedundEnv) { /* change flag on current active env partition */ - if (lseek (fd, DEVOFFSET (curdev) + sizeof (ulong), SEEK_SET) - == -1) { + if (lseek (fd_current, DEVOFFSET (dev_current) + sizeof (ulong), + SEEK_SET) == -1) { fprintf (stderr, "seek error on %s: %s\n", - DEVNAME (curdev), strerror (errno)); + DEVNAME (dev_current), strerror (errno)); return -1; } - if (write (fd, &obsolete_flag, sizeof (obsolete_flag)) != - sizeof (obsolete_flag)) { + if (write (fd_current, &obsolete_flag, + sizeof (obsolete_flag)) != sizeof (obsolete_flag)) { fprintf (stderr, "Write error on %s: %s\n", - DEVNAME (curdev), strerror (errno)); + DEVNAME (dev_current), strerror (errno)); return -1; } } printf ("Done\n"); printf ("Locking ...\n"); - erase.length = DEVESIZE (otherdev); - erase.start = DEVOFFSET (otherdev); - ioctl (fdr, MEMLOCK, &erase); + ioctl (fd_target, MEMLOCK, &erase_target); if (HaveRedundEnv) { - erase.length = DEVESIZE (curdev); - erase.start = DEVOFFSET (curdev); - ioctl (fd, MEMLOCK, &erase); - if (close (fdr)) { + ioctl (fd_current, MEMLOCK, &erase_current); + if (close (fd_target)) { fprintf (stderr, "I/O error on %s: %s\n", - DEVNAME (otherdev), + DEVNAME (dev_target), strerror (errno)); return -1; } } printf ("Done\n"); - if (close (fd)) { + if (close (fd_current)) { fprintf (stderr, "I/O error on %s: %s\n", - DEVNAME (curdev), strerror (errno)); + DEVNAME (dev_current), strerror (errno)); return -1; } @@ -565,30 +562,30 @@ static int flash_read (void) { int fd; - if ((fd = open (DEVNAME (curdev), O_RDONLY)) < 0) { + if ((fd = open (DEVNAME (dev_current), O_RDONLY)) < 0) { fprintf (stderr, "Can't open %s: %s\n", - DEVNAME (curdev), strerror (errno)); + DEVNAME (dev_current), strerror (errno)); return -1; } - if (lseek (fd, DEVOFFSET (curdev), SEEK_SET) == -1) { + if (lseek (fd, DEVOFFSET (dev_current), SEEK_SET) == -1) { fprintf (stderr, "seek error on %s: %s\n", - DEVNAME (curdev), strerror (errno)); + DEVNAME (dev_current), strerror (errno)); return -1; } if (read (fd, environment.image, CFG_ENV_SIZE) != CFG_ENV_SIZE) { fprintf (stderr, "Read error on %s: %s\n", - DEVNAME (curdev), strerror (errno)); + DEVNAME (dev_current), strerror (errno)); return -1; } if (close (fd)) { fprintf (stderr, "I/O error on %s: %s\n", - DEVNAME (curdev), strerror (errno)); + DEVNAME (dev_current), strerror (errno)); return -1; } @@ -638,7 +635,7 @@ static int env_init (void) environment.image = (union env_image *)addr1; environment.data = HaveRedundEnv ? environment.image->redund.data : environment.image->single.data; - curdev = 0; + dev_current = 0; if (flash_read ()) { return errno; } @@ -654,7 +651,7 @@ static int env_init (void) } else { flag1 = ENV_FLAGS(environment); - curdev = 1; + dev_current = 1; if ((addr2 = calloc (1, CFG_ENV_SIZE)) == NULL) { fprintf (stderr, "Not enough memory for environment (%ld bytes)\n", @@ -676,47 +673,47 @@ static int env_init (void) environment.image = (union env_image *)addr1; ENV_FLAGS(environment) = flag1; environment.image->redund.crc = crc1; - curdev = 0; + dev_current = 0; free (addr2); } else if (!crc1_ok && crc2_ok) { environment.image = (union env_image *)addr2; ENV_FLAGS(environment) = flag2; environment.image->redund.crc = crc2; - curdev = 1; + dev_current = 1; free (addr1); } else if (!crc1_ok && !crc2_ok) { fprintf (stderr, "Warning: Bad CRC, using default environment\n"); memcpy(environment.image->redund.data, default_environment, sizeof default_environment); - curdev = 0; + dev_current = 0; free (addr1); /* From here: both CRCs correct */ } else if (flag1 == active_flag && flag2 == obsolete_flag) { environment.image = (union env_image *)addr1; ENV_FLAGS(environment) = flag1; environment.image->redund.crc = crc1; - curdev = 0; + dev_current = 0; free (addr2); } else if (flag1 == obsolete_flag && flag2 == active_flag) { environment.image = (union env_image *)addr2; ENV_FLAGS(environment) = flag2; environment.image->redund.crc = crc2; - curdev = 1; + dev_current = 1; free (addr1); /* From here: invalid flag configuration */ } else if (flag1 == flag2) { environment.image = (union env_image *)addr1; ENV_FLAGS(environment) = flag1; environment.image->redund.crc = crc1; - curdev = 0; + dev_current = 0; free (addr2); } else if (flag1 == obsolete_flag || flag1 == active_flag) { /* flag1 valid, update flag2 */ environment.image = (union env_image *)addr1; ENV_FLAGS(environment) = flag1; environment.image->redund.crc = crc1; - curdev = 0; + dev_current = 0; free (addr2); } else { if (flag2 != obsolete_flag && flag2 != active_flag) @@ -725,7 +722,7 @@ static int env_init (void) environment.image = (union env_image *)addr2; ENV_FLAGS(environment) = flag2; environment.image->redund.crc = crc2; - curdev = 1; + dev_current = 1; free (addr1); } environment.data = environment.image->redund.data; -- 1.5.4 _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot