Commit d5866987 authored by James Zern's avatar James Zern
Browse files

y4minput: add more error reporting on read failure

Change-Id: Iedb136e4019ec3eb3005ea567efb33902dccfb8d
Showing with 11 additions and 3 deletions
...@@ -22,13 +22,14 @@ ...@@ -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) { ...@@ -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;
} }
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment