Extract write path of flash_io() into a separate function. This patch
should be a functional no-op.

Signed-off-by: Alex Kiernan <alex.kier...@gmail.com>
Reviewed-by: Stefano Babic <sba...@denx.de>
---

Changes in v2:
- Acommodate white space changes from predecessor commit

 tools/env/fw_env.c | 92 +++++++++++++++++++++++++++++-------------------------
 1 file changed, 50 insertions(+), 42 deletions(-)

diff --git a/tools/env/fw_env.c b/tools/env/fw_env.c
index f3bfee4..600fe5d 100644
--- a/tools/env/fw_env.c
+++ b/tools/env/fw_env.c
@@ -1225,9 +1225,57 @@ static int flash_read(int fd)
        return 0;
 }
 
+static int flash_io_write(int fd_current)
+{
+       int fd_target, rc, dev_target;
+
+       if (have_redund_env) {
+               /* switch to next partition for writing */
+               dev_target = !dev_current;
+               /* dev_target: fd_target, erase_target */
+               fd_target = open(DEVNAME(dev_target), O_RDWR);
+               if (fd_target < 0) {
+                       fprintf(stderr,
+                               "Can't open %s: %s\n",
+                               DEVNAME(dev_target), strerror(errno));
+                       rc = -1;
+                       goto exit;
+               }
+       } else {
+               dev_target = dev_current;
+               fd_target = fd_current;
+       }
+
+       rc = flash_write(fd_current, fd_target, dev_target);
+
+       if (fsync(fd_current) && !(errno == EINVAL || errno == EROFS)) {
+               fprintf(stderr,
+                       "fsync failed on %s: %s\n",
+                       DEVNAME(dev_current), strerror(errno));
+       }
+
+       if (have_redund_env) {
+               if (fsync(fd_target) &&
+                   !(errno == EINVAL || errno == EROFS)) {
+                       fprintf(stderr,
+                               "fsync failed on %s: %s\n",
+                               DEVNAME(dev_current), strerror(errno));
+               }
+
+               if (close(fd_target)) {
+                       fprintf(stderr,
+                               "I/O error on %s: %s\n",
+                               DEVNAME(dev_target), strerror(errno));
+                       rc = -1;
+               }
+       }
+ exit:
+       return rc;
+}
+
 static int flash_io(int mode)
 {
-       int fd_current, fd_target, rc, dev_target;
+       int fd_current, rc;
 
        /* dev_current: fd_current, erase_current */
        fd_current = open(DEVNAME(dev_current), mode);
@@ -1239,51 +1287,11 @@ static int flash_io(int mode)
        }
 
        if (mode == O_RDWR) {
-               if (have_redund_env) {
-                       /* switch to next partition for writing */
-                       dev_target = !dev_current;
-                       /* dev_target: fd_target, erase_target */
-                       fd_target = open(DEVNAME(dev_target), mode);
-                       if (fd_target < 0) {
-                               fprintf(stderr,
-                                       "Can't open %s: %s\n",
-                                       DEVNAME(dev_target), strerror(errno));
-                               rc = -1;
-                               goto exit;
-                       }
-               } else {
-                       dev_target = dev_current;
-                       fd_target = fd_current;
-               }
-
-               rc = flash_write(fd_current, fd_target, dev_target);
-
-               if (fsync(fd_current) && !(errno == EINVAL || errno == EROFS)) {
-                       fprintf(stderr,
-                               "fsync failed on %s: %s\n",
-                               DEVNAME(dev_current), strerror(errno));
-               }
-
-               if (have_redund_env) {
-                       if (fsync(fd_target) &&
-                           !(errno == EINVAL || errno == EROFS)) {
-                               fprintf(stderr,
-                                       "fsync failed on %s: %s\n",
-                                       DEVNAME(dev_current), strerror(errno));
-                       }
-
-                       if (close(fd_target)) {
-                               fprintf(stderr,
-                                       "I/O error on %s: %s\n",
-                                       DEVNAME(dev_target), strerror(errno));
-                               rc = -1;
-                       }
-               }
+               rc = flash_io_write(fd_current);
        } else {
                rc = flash_read(fd_current);
        }
 
- exit:
        if (close(fd_current)) {
                fprintf(stderr,
                        "I/O error on %s: %s\n",
-- 
2.7.4

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot

Reply via email to