diff mbox series

tools: fw_env: Fix warning when reading too little

Message ID 20200528155445.1031300-1-hws@denx.de
State Accepted
Commit 50bb682c5cc52769e7cbd835a00dbcbc75a4f0e7
Delegated to: Tom Rini
Headers show
Series tools: fw_env: Fix warning when reading too little | expand

Commit Message

Harald Seiler May 28, 2020, 3:54 p.m. UTC
When using CONFIG_ENV_IS_IN_FAT and the config-file specifies a size
larger than what U-Boot wrote into the env-file, a confusing error
message is shown:

    $ fw_printenv
    Read error on /boot/uboot.env: Success

Fix this by showing a different error message when read returns too
little data.

Signed-off-by: Harald Seiler <hws@denx.de>
---
 tools/env/fw_env.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

Comments

Tom Rini June 3, 2020, 4:26 p.m. UTC | #1
On Thu, May 28, 2020 at 05:54:45PM +0200, Harald Seiler wrote:

> When using CONFIG_ENV_IS_IN_FAT and the config-file specifies a size
> larger than what U-Boot wrote into the env-file, a confusing error
> message is shown:
> 
>     $ fw_printenv
>     Read error on /boot/uboot.env: Success
> 
> Fix this by showing a different error message when read returns too
> little data.
> 
> Signed-off-by: Harald Seiler <hws@denx.de>

Applied to u-boot/master, thanks!
diff mbox series

Patch

diff --git a/tools/env/fw_env.c b/tools/env/fw_env.c
index 8734663cd4c7..c6378ecf34f6 100644
--- a/tools/env/fw_env.c
+++ b/tools/env/fw_env.c
@@ -946,11 +946,17 @@  static int flash_read_buf(int dev, int fd, void *buf, size_t count,
 		lseek(fd, blockstart + block_seek, SEEK_SET);
 
 		rc = read(fd, buf + processed, readlen);
-		if (rc != readlen) {
+		if (rc == -1) {
 			fprintf(stderr, "Read error on %s: %s\n",
 				DEVNAME(dev), strerror(errno));
 			return -1;
 		}
+		if (rc != readlen) {
+			fprintf(stderr, "Read error on %s: "
+				"Attempted to read %d 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,