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

Signed-off-by: Alex Kiernan <[email protected]>
---

 tools/env/fw_env.c | 98 +++++++++++++++++++++++++++++-------------------------
 1 file changed, 53 insertions(+), 45 deletions(-)

diff --git a/tools/env/fw_env.c b/tools/env/fw_env.c
index 0e3e343..2df3504 100644
--- a/tools/env/fw_env.c
+++ b/tools/env/fw_env.c
@@ -1229,68 +1229,76 @@ static int flash_read (int fd)
        return 0;
 }
 
-static int flash_io (int mode)
+static int flash_io_write (int fd_current)
 {
-       int fd_current, fd_target, rc, dev_target;
+       int fd_target, rc, dev_target;
 
-       /* dev_current: fd_current, erase_current */
-       fd_current = open (DEVNAME (dev_current), mode);
-       if (fd_current < 0) {
-               fprintf (stderr,
-                        "Can't open %s: %s\n",
-                        DEVNAME (dev_current), strerror (errno));
-               return -1;
+       if (HaveRedundEnv) {
+               /* 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;
        }
 
-       if (mode == O_RDWR) {
-               if (HaveRedundEnv) {
-                       /* 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);
 
-               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 (fsync(fd_current) &&
+       if (HaveRedundEnv) {
+               if (fsync(fd_target) &&
                    !(errno == EINVAL || errno == EROFS)) {
                        fprintf (stderr,
                                 "fsync failed on %s: %s\n",
                                 DEVNAME (dev_current), strerror (errno));
                }
 
-               if (HaveRedundEnv) {
-                       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;
-                       }
+               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, rc;
+
+       /* dev_current: fd_current, erase_current */
+       fd_current = open (DEVNAME (dev_current), mode);
+       if (fd_current < 0) {
+               fprintf (stderr,
+                        "Can't open %s: %s\n",
+                        DEVNAME (dev_current), strerror (errno));
+               return -1;
+       }
+
+       if (mode == O_RDWR) {
+               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
[email protected]
https://lists.denx.de/listinfo/u-boot

Reply via email to