2001-07-27 Theodore Tso <tytso@valinux.com>
+ * getsize.c (ext2fs_get_device_size): Add support for the
+ BLKGETSIZE64 ioctl. (Ioctl defined by unofficial patches
+ from Ben LaHaise, but it's likely this interface won't
+ change.)
+
* mkjournal.c (ext2fs_add_journal_device): Use the correct block
when writing the journal superblock, too. (Oops! Needed
to make 1k filesystems with external journal to work.)
#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"
blk_t *retblocks)
{
int fd;
+#ifdef BLKGETSIZE64
+ unsigned long long size64;
+#endif
#ifdef BLKGETSIZE
unsigned long size;
#endif
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);