From eac2ed1a81c1c4af7b154ef40627eed7cab9a467 Mon Sep 17 00:00:00 2001 From: Mark Wooding Date: Sun, 6 Mar 2022 23:57:20 +0000 Subject: [PATCH] chkdvdimg.c: Retrieve device size using the new function. ... which works on block devices as well as ordinary files. --- chkdvdimg.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/chkdvdimg.c b/chkdvdimg.c index 0fbb48e..0adc6df 100644 --- a/chkdvdimg.c +++ b/chkdvdimg.c @@ -96,23 +96,23 @@ static int all_zero_p(const unsigned char *p, size_t sz) static void check_img(const char *file) { int fd = -1; - struct stat st; unsigned char b[SECTORSZ], bb[SECTORSZ]; + off_t volsz; + int blksz; secaddr end; unsigned i, j; fd = open(file, (flags&F_FIX) ? O_RDWR : O_RDONLY); if (fd < 0) { gripe_syserr(2, errno, "failed to open `%s'", file); goto end; } - if (fstat(fd, &st)) { - gripe_syserr(2, errno, "failed to retrieve file status for `%s'", file); - goto end; - } - if (st.st_size%SECTORSZ) { + blksz = SECTORSZ; volsz = device_size(fd, file, &blksz); + if (SECTORSZ != 2048) + { gripe(2, "device sector size %d /= 2048", blksz); goto end; } + if (volsz%SECTORSZ) { gripe(2, "bad length for `%s' -- not whole number of sectors", file); goto end; } - end = st.st_size/SECTORSZ; + end = volsz/SECTORSZ; if (carefully_read(fd, 256*SECTORSZ, b, SECTORSZ, file) || check_anchor_header(b, 256, CAHF_GRIPE | CAHF_FULL, file)) -- 2.11.0