aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThibault Ferrante <thibaultferrante@gmail.com>2021-08-24 17:29:50 +0200
committerTom Rini <trini@konsulko.com>2021-09-02 09:48:41 -0400
commitf26600ecd34612d3009d9e349a37a00f429e5bae (patch)
tree10c93e20822bc1eeee65c0673e619f1569e6b743
parent130379a663374c7fdc048895fa3af2687bc608ee (diff)
downloadu-boot-WIP/2021-09-02-assorted-platform-and-bugfixes.zip
u-boot-WIP/2021-09-02-assorted-platform-and-bugfixes.tar.gz
u-boot-WIP/2021-09-02-assorted-platform-and-bugfixes.tar.bz2
tools: env: Handle shorter read callsWIP/2021-09-02-assorted-platform-and-bugfixes
On some cases, the actual number of bytes read can be shorter than what was requested. This can be handled gracefully by taking this difference into account instead of exiting. Signed-off-by: Thibault Ferrante <thibault.ferrante@gmail.com>
-rw-r--r--tools/env/fw_env.c22
1 files changed, 12 insertions, 10 deletions
diff --git a/tools/env/fw_env.c b/tools/env/fw_env.c
index 2a61a5d..e39c39e 100644
--- a/tools/env/fw_env.c
+++ b/tools/env/fw_env.c
@@ -951,21 +951,23 @@ static int flash_read_buf(int dev, int fd, void *buf, size_t count,
DEVNAME(dev), strerror(errno));
return -1;
}
- if (rc != readlen) {
- fprintf(stderr,
- "Read error on %s: Attempted to read %zd bytes but got %d\n",
- DEVNAME(dev), readlen, rc);
- return -1;
- }
#ifdef DEBUG
fprintf(stderr, "Read 0x%x bytes at 0x%llx on %s\n",
rc, (unsigned long long)blockstart + block_seek,
DEVNAME(dev));
#endif
- processed += readlen;
- readlen = min(blocklen, count - processed);
- block_seek = 0;
- blockstart += blocklen;
+ processed += rc;
+ if (rc != readlen) {
+ fprintf(stderr,
+ "Warning on %s: Attempted to read %zd bytes but got %d\n",
+ DEVNAME(dev), readlen, rc);
+ readlen -= rc;
+ block_seek += rc;
+ } else {
+ blockstart += blocklen;
+ readlen = min(blocklen, count - processed);
+ block_seek = 0;
+ }
}
return processed;