diff options
author | Joerg Wunsch <joerg@FreeBSD.org> | 1995-06-24 17:07:21 +0000 |
---|---|---|
committer | Joerg Wunsch <joerg@FreeBSD.org> | 1995-06-24 17:07:21 +0000 |
commit | d195e6deecf1b6ac002e5025666068e0aeda9371 (patch) | |
tree | c51f948f7b44cb7b3969cfa88cf28ea9c3bebf04 /sbin | |
parent | a526d6bb6754013a6062f99e3a8becb34e4afdf9 (diff) | |
download | src-d195e6deecf1b6ac002e5025666068e0aeda9371.tar.gz src-d195e6deecf1b6ac002e5025666068e0aeda9371.zip |
When using dump/rdump on large filesytems (my case 3 GB), the lseek
claims multiple times to have failed. The problem is a off_t is
converted into a int and checked for a negative. A true lseek check
should be checking if the off_t is equal to -1 for failure.
(Suggested fix from PR #bin/461)
Submitted by: mark tinguely <tinguely@opus.cs.ndsu.NoDak.edu>
Notes
Notes:
svn path=/head/; revision=9294
Diffstat (limited to 'sbin')
-rw-r--r-- | sbin/dump/traverse.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/sbin/dump/traverse.c b/sbin/dump/traverse.c index 29034e60262b..96d46cb0f277 100644 --- a/sbin/dump/traverse.c +++ b/sbin/dump/traverse.c @@ -558,7 +558,8 @@ bread(blkno, buf, size) extern int errno; loop: - if ((int)lseek(diskfd, ((off_t)blkno << dev_bshift), 0) < 0) + if (lseek(diskfd, ((off_t)blkno << dev_bshift), 0) != + ((off_t)blkno << dev_bshift)) msg("bread: lseek fails\n"); if ((cnt = read(diskfd, buf, size)) == size) return; @@ -598,7 +599,8 @@ loop: */ bzero(buf, size); for (i = 0; i < size; i += dev_bsize, buf += dev_bsize, blkno++) { - if ((int)lseek(diskfd, ((off_t)blkno << dev_bshift), 0) < 0) + if (lseek(diskfd, ((off_t)blkno << dev_bshift), 0) != + ((off_t)blkno << dev_bshift)) msg("bread: lseek2 fails!\n"); if ((cnt = read(diskfd, buf, (int)dev_bsize)) == dev_bsize) continue; |