mirror of
https://github.com/Fishwaldo/u-boot.git
synced 2025-03-17 20:51:39 +00:00
tools: env: Handle shorter read calls
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>
This commit is contained in:
parent
7befc8490a
commit
6628813f9d
1 changed files with 12 additions and 10 deletions
22
tools/env/fw_env.c
vendored
22
tools/env/fw_env.c
vendored
|
@ -951,21 +951,23 @@ static int flash_read_buf(int dev, int fd, void *buf, size_t count,
|
||||||
DEVNAME(dev), strerror(errno));
|
DEVNAME(dev), strerror(errno));
|
||||||
return -1;
|
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
|
#ifdef DEBUG
|
||||||
fprintf(stderr, "Read 0x%x bytes at 0x%llx on %s\n",
|
fprintf(stderr, "Read 0x%x bytes at 0x%llx on %s\n",
|
||||||
rc, (unsigned long long)blockstart + block_seek,
|
rc, (unsigned long long)blockstart + block_seek,
|
||||||
DEVNAME(dev));
|
DEVNAME(dev));
|
||||||
#endif
|
#endif
|
||||||
processed += readlen;
|
processed += rc;
|
||||||
readlen = min(blocklen, count - processed);
|
if (rc != readlen) {
|
||||||
block_seek = 0;
|
fprintf(stderr,
|
||||||
blockstart += blocklen;
|
"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;
|
return processed;
|
||||||
|
|
Loading…
Add table
Reference in a new issue