diff options
author | B. Watson <urchlay@slackware.uk> | 2024-04-30 03:00:11 -0400 |
---|---|---|
committer | B. Watson <urchlay@slackware.uk> | 2024-04-30 03:00:11 -0400 |
commit | 3c4599d7202d685ab24935d1348ad9ab167fce02 (patch) | |
tree | 928461888b5b27f54bf314621538b045d9b2416c | |
parent | ca5b5bda7477386f6050c1a65802c5a68dc2de55 (diff) | |
download | bw-atari8-tools-3c4599d7202d685ab24935d1348ad9ab167fce02.tar.gz |
xex.c: detect short reads.
-rw-r--r-- | xex.c | 6 | ||||
-rw-r--r-- | xexamine.c | 5 |
2 files changed, 9 insertions, 2 deletions
@@ -165,18 +165,20 @@ int xex_fread_seg_data(xex_segment *seg, FILE *file) { xex_sys_errno = errno; if(xex_verbose) { - fprintf(stderr, "xex_fread_seg_data(): read data:\n"); + fprintf(stderr, "xex_fread_seg_data(): read data, len==%d, res==%d:\n", seg->len, res); xex_print_seg_info(seg); } - if(res == seg->len) + if(res == seg->len) { return 1; + } if(ferror(file)) { xex_errno = XERR_SYSCALL; } else { /* EOF or short read */ xex_errno = XERR_TRUNCATED; + seg->len = res; } return xex_check_seg(seg); @@ -358,6 +358,11 @@ int main(int argc, char **argv) { while(xex_fread_seg(&seg, f)) { segcount++; + xex_check_seg(&seg); + if(xex_errno) { + xex_perror(filename); + } + crc = 0; crc32(seg.object, seg.len, &crc); |