summaryrefslogtreecommitdiff
path: root/y4minput.c
diff options
context:
space:
mode:
Diffstat (limited to 'y4minput.c')
-rw-r--r--y4minput.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/y4minput.c b/y4minput.c
index 15186f86f..90c5310a1 100644
--- a/y4minput.c
+++ b/y4minput.c
@@ -22,13 +22,14 @@
static int file_read(void *buf, size_t size, FILE *file) {
const int kMaxRetries = 5;
int retry_count = 0;
+ int file_error;
size_t len = 0;
do {
const size_t n = fread((uint8_t*)buf + len, 1, size - len, file);
len += n;
- if (ferror(file)) {
+ file_error = ferror(file);
+ if (file_error) {
if (errno == EINTR || errno == EAGAIN) {
- ++retry_count;
clearerr(file);
continue;
} else {
@@ -37,7 +38,14 @@ static int file_read(void *buf, size_t size, FILE *file) {
return 0;
}
}
- } while (!feof(file) && len < size && retry_count < kMaxRetries);
+ } while (!feof(file) && len < size && ++retry_count < kMaxRetries);
+
+ if (!feof(file) && len != size) {
+ fprintf(stderr, "Error reading file: %u of %u bytes read,"
+ " error: %d, retries: %d, %d: %s\n",
+ (uint32_t)len, (uint32_t)size, file_error, retry_count,
+ errno, strerror(errno));
+ }
return len == size;
}