y4minput: add more error reporting on read failure
Change-Id: Iedb136e4019ec3eb3005ea567efb33902dccfb8d
This commit is contained in:
parent
17d2394c43
commit
d5866987ff
14
y4minput.c
14
y4minput.c
@ -22,13 +22,14 @@
|
|||||||
static int file_read(void *buf, size_t size, FILE *file) {
|
static int file_read(void *buf, size_t size, FILE *file) {
|
||||||
const int kMaxRetries = 5;
|
const int kMaxRetries = 5;
|
||||||
int retry_count = 0;
|
int retry_count = 0;
|
||||||
|
int file_error;
|
||||||
size_t len = 0;
|
size_t len = 0;
|
||||||
do {
|
do {
|
||||||
const size_t n = fread((uint8_t*)buf + len, 1, size - len, file);
|
const size_t n = fread((uint8_t*)buf + len, 1, size - len, file);
|
||||||
len += n;
|
len += n;
|
||||||
if (ferror(file)) {
|
file_error = ferror(file);
|
||||||
|
if (file_error) {
|
||||||
if (errno == EINTR || errno == EAGAIN) {
|
if (errno == EINTR || errno == EAGAIN) {
|
||||||
++retry_count;
|
|
||||||
clearerr(file);
|
clearerr(file);
|
||||||
continue;
|
continue;
|
||||||
} else {
|
} else {
|
||||||
@ -37,7 +38,14 @@ static int file_read(void *buf, size_t size, FILE *file) {
|
|||||||
return 0;
|
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;
|
return len == size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user