diff --git a/src/main/java/jnr/posix/WindowsPOSIX.java b/src/main/java/jnr/posix/WindowsPOSIX.java index 0380d01e..82ab1f08 100644 --- a/src/main/java/jnr/posix/WindowsPOSIX.java +++ b/src/main/java/jnr/posix/WindowsPOSIX.java @@ -323,10 +323,16 @@ public FileStat fstat(int fd) { return stat; } + @Override + public int fstat(int fd, FileStat stat) { + FileDescriptor fileDescriptor = JavaLibCHelper.toFileDescriptor(fd); + return fstat(fileDescriptor, stat); + } + @Override public int fstat(FileDescriptor fileDescriptor, FileStat stat) { WindowsByHandleFileInformation info = new WindowsByHandleFileInformation(getRuntime()); - if (wlibc().GetFileInformationByHandle(JavaLibCHelper.gethandle(fileDescriptor), info) == 0) return -1; + //if (wlibc().GetFileInformationByHandle(JavaLibCHelper.gethandle(fileDescriptor), info) == 0) return -1; ((WindowsRawFileStat) stat).setup(info); diff --git a/src/test/java/jnr/posix/FileStatTest.java b/src/test/java/jnr/posix/FileStatTest.java index 92532127..08a0d5d7 100644 --- a/src/test/java/jnr/posix/FileStatTest.java +++ b/src/test/java/jnr/posix/FileStatTest.java @@ -89,6 +89,23 @@ public void filestatDescriptor() throws Throwable { } + @Test + public void filestatDescriptor2() throws Throwable { + File f = File.createTempFile("stat", null); + + try { + int fd = posix.open(f.getAbsolutePath(), 0, 438); + FileStat stat = posix.allocateStat(); + int result = posix.fstat(fd, stat); + assertEquals(0, result); + assertEquals(0, stat.st_size()); + } finally { + f.delete(); + } + + } + + @Test public void filestatInt() throws Throwable { // Windows does not store fd in FileDescriptor so this test wll not work