tools: fw_env: Fix warning when reading too little
authorHarald Seiler <hws@denx.de>
Thu, 28 May 2020 15:54:45 +0000 (17:54 +0200)
committerTom Rini <trini@konsulko.com>
Tue, 2 Jun 2020 17:06:14 +0000 (13:06 -0400)
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

index 8734663cd4c770f4a393b23601b78b78084f1e7d..c6378ecf34f696aac6fa0f3c4cf61d7d5e6656de 100644 (file)
@@ -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,