* [e2fsprogs PATCH] libext2fs: fix ext2fs_get_device_size2() return value on Windows
@ 2023-03-01 3:45 Eric Biggers
2023-09-04 17:48 ` Eric Biggers
2024-04-17 2:03 ` Theodore Ts'o
0 siblings, 2 replies; 3+ messages in thread
From: Eric Biggers @ 2023-03-01 3:45 UTC (permalink / raw)
To: linux-ext4; +Cc: Paulo Antonio Alvarez
From: Eric Biggers <ebiggers@google.com>
Creating a file system on Windows without a pre-existing file stopped
working because the Windows version of ext2fs_get_device_size2() doesn't
return ENOENT if the file doesn't exist. Fix this.
Fixes: 53464654bd33 ("mke2fs: fix creating a file system image w/o a pre-existing file")
Signed-off-by: Eric Biggers <ebiggers@google.com>
---
.github/workflows/ci.yml | 1 -
lib/ext2fs/getsize.c | 31 +++++++++++--------------------
lib/ext2fs/windows_io.c | 11 -----------
3 files changed, 11 insertions(+), 32 deletions(-)
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 51b27c88d..35496c573 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -112,5 +112,4 @@ jobs:
- run: make -j8 -C lib/support/ all V=1 CFLAGS_WARN="-Werror"
- run: make -j8 -C lib/e2p/ all V=1 CFLAGS_WARN="-Werror"
- run: make -j8 -C misc/ mke2fs V=1 CFLAGS_WARN="-Werror"
- - run: touch image.ext4
- run: misc/mke2fs.exe -T ext4 image.ext4 128M
diff --git a/lib/ext2fs/getsize.c b/lib/ext2fs/getsize.c
index bcf30208e..a02863443 100644
--- a/lib/ext2fs/getsize.c
+++ b/lib/ext2fs/getsize.c
@@ -71,12 +71,11 @@
#define HAVE_GET_FILE_SIZE_EX 1
#endif
-HANDLE windows_get_handle(io_channel channel);
-
errcode_t ext2fs_get_device_size2(const char *file, int blocksize,
blk64_t *retblocks)
{
- HANDLE dev;
+ int fd;
+ HANDLE h;
PARTITION_INFORMATION pi;
DISK_GEOMETRY gi;
DWORD retbytes;
@@ -86,25 +85,18 @@ errcode_t ext2fs_get_device_size2(const char *file, int blocksize,
DWORD filesize;
#endif /* HAVE_GET_FILE_SIZE_EX */
- io_channel data_io = 0;
- int retval;
-
- retval = windows_io_manager->open(file, 0, &data_io);
- if (retval)
- return retval;
-
- dev = windows_get_handle(data_io);
- if (dev == INVALID_HANDLE_VALUE)
- return EBADF;
-
- if (DeviceIoControl(dev, IOCTL_DISK_GET_PARTITION_INFO,
+ fd = ext2fs_open_file(file, O_RDONLY, 0);
+ if (fd < 0)
+ return errno;
+ h = (HANDLE)_get_osfhandle(fd);
+ if (DeviceIoControl(h, IOCTL_DISK_GET_PARTITION_INFO,
&pi, sizeof(PARTITION_INFORMATION),
&pi, sizeof(PARTITION_INFORMATION),
&retbytes, NULL)) {
*retblocks = pi.PartitionLength.QuadPart / blocksize;
- } else if (DeviceIoControl(dev, IOCTL_DISK_GET_DRIVE_GEOMETRY,
+ } else if (DeviceIoControl(h, IOCTL_DISK_GET_DRIVE_GEOMETRY,
&gi, sizeof(DISK_GEOMETRY),
&gi, sizeof(DISK_GEOMETRY),
&retbytes, NULL)) {
@@ -115,20 +107,19 @@ errcode_t ext2fs_get_device_size2(const char *file, int blocksize,
gi.Cylinders.QuadPart / blocksize;
#ifdef HAVE_GET_FILE_SIZE_EX
- } else if (GetFileSizeEx(dev, &filesize)) {
+ } else if (GetFileSizeEx(h, &filesize)) {
*retblocks = filesize.QuadPart / blocksize;
}
#else
} else {
- filesize = GetFileSize(dev, NULL);
+ filesize = GetFileSize(h, NULL);
if (INVALID_FILE_SIZE != filesize) {
*retblocks = filesize / blocksize;
}
}
#endif /* HAVE_GET_FILE_SIZE_EX */
- windows_io_manager->close(data_io);
-
+ close(fd);
return 0;
}
diff --git a/lib/ext2fs/windows_io.c b/lib/ext2fs/windows_io.c
index 83aea68b6..f01bbb6ad 100644
--- a/lib/ext2fs/windows_io.c
+++ b/lib/ext2fs/windows_io.c
@@ -857,17 +857,6 @@ static errcode_t windows_write_byte(io_channel channel, unsigned long offset,
return EXT2_ET_UNIMPLEMENTED;
}
-HANDLE windows_get_handle(io_channel channel)
-{
- struct windows_private_data *data;
-
- EXT2_CHECK_MAGIC_RETURN(channel, EXT2_ET_MAGIC_IO_CHANNEL, INVALID_HANDLE_VALUE);
- data = (struct windows_private_data *) channel->private_data;
- EXT2_CHECK_MAGIC_RETURN(data, EXT2_ET_MAGIC_WINDOWS_IO_CHANNEL, INVALID_HANDLE_VALUE);
-
- return data->handle;
-}
-
/*
* Flush data buffers to disk.
*/
base-commit: 25ad8a431331b4d1d444a70b6079456cc612ac40
--
2.39.2
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [e2fsprogs PATCH] libext2fs: fix ext2fs_get_device_size2() return value on Windows
2023-03-01 3:45 [e2fsprogs PATCH] libext2fs: fix ext2fs_get_device_size2() return value on Windows Eric Biggers
@ 2023-09-04 17:48 ` Eric Biggers
2024-04-17 2:03 ` Theodore Ts'o
1 sibling, 0 replies; 3+ messages in thread
From: Eric Biggers @ 2023-09-04 17:48 UTC (permalink / raw)
To: linux-ext4; +Cc: Paulo Antonio Alvarez
On Tue, Feb 28, 2023 at 07:45:18PM -0800, Eric Biggers wrote:
> From: Eric Biggers <ebiggers@google.com>
>
> Creating a file system on Windows without a pre-existing file stopped
> working because the Windows version of ext2fs_get_device_size2() doesn't
> return ENOENT if the file doesn't exist. Fix this.
>
> Fixes: 53464654bd33 ("mke2fs: fix creating a file system image w/o a pre-existing file")
> Signed-off-by: Eric Biggers <ebiggers@google.com>
> ---
> .github/workflows/ci.yml | 1 -
> lib/ext2fs/getsize.c | 31 +++++++++++--------------------
> lib/ext2fs/windows_io.c | 11 -----------
> 3 files changed, 11 insertions(+), 32 deletions(-)
Ping.
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [e2fsprogs PATCH] libext2fs: fix ext2fs_get_device_size2() return value on Windows
2023-03-01 3:45 [e2fsprogs PATCH] libext2fs: fix ext2fs_get_device_size2() return value on Windows Eric Biggers
2023-09-04 17:48 ` Eric Biggers
@ 2024-04-17 2:03 ` Theodore Ts'o
1 sibling, 0 replies; 3+ messages in thread
From: Theodore Ts'o @ 2024-04-17 2:03 UTC (permalink / raw)
To: linux-ext4, Eric Biggers; +Cc: Theodore Ts'o, Paulo Antonio Alvarez
On Tue, 28 Feb 2023 19:45:18 -0800, Eric Biggers wrote:
> Creating a file system on Windows without a pre-existing file stopped
> working because the Windows version of ext2fs_get_device_size2() doesn't
> return ENOENT if the file doesn't exist. Fix this.
>
>
Applied, thanks!
[1/1] libext2fs: fix ext2fs_get_device_size2() return value on Windows
commit: 72e30620b1ebd4742a8cda6cd4220a5423ca3180
Best regards,
--
Theodore Ts'o <tytso@mit.edu>
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2024-04-17 2:03 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-03-01 3:45 [e2fsprogs PATCH] libext2fs: fix ext2fs_get_device_size2() return value on Windows Eric Biggers
2023-09-04 17:48 ` Eric Biggers
2024-04-17 2:03 ` Theodore Ts'o
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).