[U-Boot] [PATCH 1/2] tools: env: Refactor write path of flash_io()
Alex Kiernan
alex.kiernan at gmail.com
Thu Mar 8 11:52:05 UTC 2018
Extract write path of flash_io() into a separate function. This patch
should be a functional no-op.
Signed-off-by: Alex Kiernan <alex.kiernan at gmail.com>
---
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
More information about the U-Boot
mailing list