[PATCH v3 2/2] ntdll: Use the F_PREALLOCATE fcntl(2) on Mac OS when posix_fallocate(2/3) isn't available.

Chip Davis cdavis at codeweavers.com
Tue Sep 14 16:57:42 CDT 2021


From: Charles Davis <cdavis5x at gmail.com>

Signed-off-by: Chip Davis <cdavis at codeweavers.com>
---
 dlls/ntdll/unix/file.c | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/dlls/ntdll/unix/file.c b/dlls/ntdll/unix/file.c
index c92cbd1db4a..899cdc9868a 100644
--- a/dlls/ntdll/unix/file.c
+++ b/dlls/ntdll/unix/file.c
@@ -4581,6 +4581,22 @@ NTSTATUS WINAPI NtSetInformationFile( HANDLE handle, IO_STATUS_BLOCK *io,
                     if (err == EOPNOTSUPP) WARN( "posix_fallocate not supported on this filesystem\n" );
                     else status = errno_to_status( err );
                 }
+#elif defined(F_PREALLOCATE)
+                struct stat st;
+
+                if (fstat( fd, &st ) < 0)
+                    status = errno_to_status( errno );
+                else
+                {
+                    struct fstore fst;
+
+                    fst.fst_flags = F_ALLOCATECONTIG|F_ALLOCATEALL;
+                    fst.fst_posmode = F_PEOFPOSMODE;
+                    fst.fst_offset = 0;
+                    fst.fst_length = (off_t)info->ValidDataLength.QuadPart - st.st_blocks * 512;
+                    if (fcntl( fd, F_PREALLOCATE, &fst ) < 0)
+                        status = errno_to_status( errno );
+                }
 #else
                 FIXME( "setting valid data length not supported\n" );
 #endif
-- 
2.33.0




More information about the wine-devel mailing list