diff -ur e2fsprogs-1.22/lib/ext2fs/getsize.c e2fsprogs-1.22-work/lib/ext2fs/getsize.c --- e2fsprogs-1.22/lib/ext2fs/getsize.c Sat Jun 23 00:25:59 2001 +++ e2fsprogs-1.22-work/lib/ext2fs/getsize.c Sat Jun 30 20:59:08 2001 @@ -32,6 +32,9 @@ #if defined(__linux__) && defined(_IO) && !defined(BLKGETSIZE) #define BLKGETSIZE _IO(0x12,96) /* return device size */ #endif +#if defined(__linux__) && defined(_IO) && !defined(BLKGETSIZE64) +#define BLKGETSIZE64 _IO(0x12,109) /* return device size */ +#endif #include "ext2_fs.h" #include "ext2fs.h" @@ -54,6 +57,9 @@ blk_t *retblocks) { int fd; +#ifdef BLKGETSIZE64 + unsigned long long size64; +#endif #ifdef BLKGETSIZE unsigned long size; #endif @@ -76,6 +82,17 @@ if (fd < 0) return errno; +#ifdef BLKGETSIZE64 + if (ioctl(fd, BLKGETSIZE64, &size64) >= 0) { + close(fd); + size64 = size64 / (blocksize / 512); + *retblocks = size64; + if (*retblocks != size64) { + return EFBIG; + } + return 0; + } +#endif #ifdef BLKGETSIZE if (ioctl(fd, BLKGETSIZE, &size) >= 0) { close(fd);