
8 Mar
2018
8 Mar
'18
4:24 p.m.
On 08/03/2018 12:52, Alex Kiernan wrote:
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@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) {
!(errno == EINVAL || errno == EROFS)) { fprintf (stderr, "fsync failed on %s: %s\n", DEVNAME (dev_current), strerror (errno)); }if (fsync(fd_target) &&
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) {
} else { rc = flash_read (fd_current); }rc = flash_io_write(fd_current);
-exit: if (close (fd_current)) { fprintf (stderr, "I/O error on %s: %s\n",
Reviewed-by: Stefano Babic sbabic@denx.de
Best regards, Stefano Babic
--
=====================================================================
DENX Software Engineering GmbH, Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-53 Fax: +49-8142-66989-80 Email: sbabic@denx.de
=====================================================================