From 1a9c8c35ba148e55039bd04e0237085f7a3625d1 Mon Sep 17 00:00:00 2001 From: Theodore Ts'o Date: Fri, 8 Oct 2004 12:45:24 -0400 Subject: [PATCH] getsize.c (ext2fs_get_device_size): Add support for Windows 9x/NT under Cygwin. Thanks to Sam Robb (samrobb@users.sourceforge.net) for pointing this and the suggested code patch. --- lib/ext2fs/ChangeLog | 7 +++++++ lib/ext2fs/getsize.c | 17 +++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/lib/ext2fs/ChangeLog b/lib/ext2fs/ChangeLog index 036a5028..2bc4c203 100644 --- a/lib/ext2fs/ChangeLog +++ b/lib/ext2fs/ChangeLog @@ -1,3 +1,10 @@ +2004-10-08 Theodore Ts'o + + * getsize.c (ext2fs_get_device_size): Add support for Windows + 9x/NT under Cygwin. Thanks to Sam Robb + (samrobb@users.sourceforge.net) for pointing this and the + suggested code patch. + 2004-09-17 Theodore Ts'o * getsize.c: Clean up header #include's. diff --git a/lib/ext2fs/getsize.c b/lib/ext2fs/getsize.c index 360ecdfc..ad7ac1c3 100644 --- a/lib/ext2fs/getsize.c +++ b/lib/ext2fs/getsize.c @@ -61,6 +61,10 @@ #include "windows.h" #include "winioctl.h" +#if (_WIN32_WINNT >= 0x0500) +#define HAVE_GET_FILE_SIZE_EX 1 +#endif + errcode_t ext2fs_get_device_size(const char *file, int blocksize, blk_t *retblocks) { @@ -68,7 +72,11 @@ errcode_t ext2fs_get_device_size(const char *file, int blocksize, PARTITION_INFORMATION pi; DISK_GEOMETRY gi; DWORD retbytes; +#ifdef HAVE_GET_FILE_SIZE_EX LARGE_INTEGER filesize; +#else + DWORD filesize; +#endif /* HAVE_GET_FILE_SIZE_EX */ dev = CreateFile(file, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE , @@ -93,9 +101,18 @@ errcode_t ext2fs_get_device_size(const char *file, int blocksize, gi.TracksPerCylinder * gi.Cylinders.QuadPart / blocksize; +#ifdef HAVE_GET_FILE_SIZE_EX } else if (GetFileSizeEx(dev, &filesize)) { *retblocks = filesize.QuadPart / blocksize; } +#else + } else { + filesize = GetFileSize(dev, NULL); + if (INVALID_FILE_SIZE != filesize) { + *retblocks = filesize / blocksize; + } + } +#endif /* HAVE_GET_FILE_SIZE_EX */ CloseHandle(dev); return 0;