Rebase against e0e3b6bc91f7db956e3a66f2938eea45d4055a39.

This commit is contained in:
Zebediah Figura
2020-07-07 17:59:50 -05:00
parent 21a97e1f88
commit b1765ff74e
28 changed files with 205 additions and 1491 deletions

View File

@@ -1,4 +1,4 @@
From f886d8af24ba52e791535c7a606c4ca97cc5ed8e Mon Sep 17 00:00:00 2001
From e043e7d570fcdc0f7bc662d794d111baaa15b015 Mon Sep 17 00:00:00 2001
From: "Erich E. Hoover" <erich.e.hoover@gmail.com>
Date: Thu, 16 Jan 2014 20:56:49 -0700
Subject: [PATCH] ntdll: Add support for junction point creation.
@@ -18,10 +18,10 @@ Signed-off-by: Erich E. Hoover <erich.e.hoover@gmail.com>
create mode 100644 libs/port/renameat2.c
diff --git a/configure.ac b/configure.ac
index 9c5f76669df..201ae3c2d98 100644
index a403c9436ca..dbd07791de7 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2203,6 +2203,8 @@ AC_CHECK_FUNCS(\
@@ -2218,6 +2218,8 @@ AC_CHECK_FUNCS(\
pwrite \
readdir \
readlink \
@@ -31,7 +31,7 @@ index 9c5f76669df..201ae3c2d98 100644
select \
setproctitle \
diff --git a/dlls/ntdll/tests/file.c b/dlls/ntdll/tests/file.c
index 184b7cdad59..8b5ddbb0da1 100644
index a502a8eec75..bce34f03920 100644
--- a/dlls/ntdll/tests/file.c
+++ b/dlls/ntdll/tests/file.c
@@ -38,6 +38,7 @@
@@ -155,7 +155,7 @@ index 184b7cdad59..8b5ddbb0da1 100644
+ test_reparse_points();
}
diff --git a/dlls/ntdll/unix/file.c b/dlls/ntdll/unix/file.c
index ca6899b50f5..44cb12f90ee 100644
index b76d07a8175..271151ed1be 100644
--- a/dlls/ntdll/unix/file.c
+++ b/dlls/ntdll/unix/file.c
@@ -32,6 +32,7 @@
@@ -174,7 +174,7 @@ index ca6899b50f5..44cb12f90ee 100644
#include "wine/server.h"
#include "wine/list.h"
#include "wine/debug.h"
@@ -5607,6 +5609,104 @@ static void ignore_server_ioctl_struct_holes( ULONG code, const void *in_buffer,
@@ -5661,6 +5663,104 @@ static void ignore_server_ioctl_struct_holes( ULONG code, const void *in_buffer,
}
@@ -204,7 +204,7 @@ index ca6899b50f5..44cb12f90ee 100644
+ src_allocated = TRUE;
+ nt_dest.Buffer = dest;
+ nt_dest.Length = dest_len;
+ status = nt_to_unix_file_name( &nt_dest, &unix_dest, 0, FALSE );
+ status = nt_to_unix_file_name( &nt_dest, &unix_dest, 0 );
+ if (status != STATUS_SUCCESS && status != STATUS_NO_SUCH_FILE)
+ goto cleanup;
+ dest_allocated = TRUE;
@@ -279,7 +279,7 @@ index ca6899b50f5..44cb12f90ee 100644
/******************************************************************************
* NtFsControlFile (NTDLL.@)
*/
@@ -5671,6 +5771,23 @@ NTSTATUS WINAPI NtFsControlFile( HANDLE handle, HANDLE event, PIO_APC_ROUTINE ap
@@ -5748,6 +5848,23 @@ NTSTATUS WINAPI NtFsControlFile( HANDLE handle, HANDLE event, PIO_APC_ROUTINE ap
io->Information = 0;
status = STATUS_SUCCESS;
break;
@@ -304,10 +304,10 @@ index ca6899b50f5..44cb12f90ee 100644
return server_ioctl_file( handle, event, apc, apc_context, io, code,
in_buffer, in_size, out_buffer, out_size );
diff --git a/include/Makefile.in b/include/Makefile.in
index 9f70e72b4c7..1c5c456aa39 100644
index 216adf0d7ae..7dc16c230b6 100644
--- a/include/Makefile.in
+++ b/include/Makefile.in
@@ -518,6 +518,7 @@ SOURCES = \
@@ -520,6 +520,7 @@ SOURCES = \
ntddvdeo.h \
ntdef.h \
ntdsapi.h \
@@ -364,7 +364,7 @@ index 00000000000..21d42e17325
+
+#endif /* __WINE_NTIFS_H */
diff --git a/include/wine/port.h b/include/wine/port.h
index 928730a41d7..e8434c73cca 100644
index 930efeeea1f..7d2c7388707 100644
--- a/include/wine/port.h
+++ b/include/wine/port.h
@@ -334,6 +334,15 @@ double rint(double x);
@@ -384,7 +384,7 @@ index 928730a41d7..e8434c73cca 100644
int statvfs( const char *path, struct statvfs *buf );
#endif
diff --git a/libs/port/Makefile.in b/libs/port/Makefile.in
index 7bc67fa3fee..1963afe2423 100644
index d1de285d527..4b1ecab7516 100644
--- a/libs/port/Makefile.in
+++ b/libs/port/Makefile.in
@@ -14,6 +14,7 @@ C_SRCS = \

View File

@@ -1,4 +1,4 @@
From b53336eeca65aa2dbf11c2d80a731ca904fe81de Mon Sep 17 00:00:00 2001
From 67cacb66b16c354aa30f4c94bba9da44f7e45619 Mon Sep 17 00:00:00 2001
From: "Erich E. Hoover" <erich.e.hoover@gmail.com>
Date: Thu, 16 Jan 2014 21:02:11 -0700
Subject: [PATCH] kernel32,ntdll: Add support for deleting junction points with
@@ -11,10 +11,10 @@ Signed-off-by: Erich E. Hoover <erich.e.hoover@gmail.com>
2 files changed, 46 insertions(+), 7 deletions(-)
diff --git a/dlls/kernel32/path.c b/dlls/kernel32/path.c
index b580e367561..9fa7d4c9f27 100644
index db2c1fb0240..6b7912359cf 100644
--- a/dlls/kernel32/path.c
+++ b/dlls/kernel32/path.c
@@ -1058,6 +1058,7 @@ BOOL WINAPI CreateDirectoryExA( LPCSTR template, LPCSTR path, LPSECURITY_ATTRIBU
@@ -233,6 +233,7 @@ BOOL WINAPI CreateDirectoryExA( LPCSTR template, LPCSTR path, LPSECURITY_ATTRIBU
*/
BOOL WINAPI RemoveDirectoryW( LPCWSTR path )
{
@@ -22,10 +22,10 @@ index b580e367561..9fa7d4c9f27 100644
OBJECT_ATTRIBUTES attr;
UNICODE_STRING nt_name;
ANSI_STRING unix_name;
@@ -1089,15 +1090,21 @@ BOOL WINAPI RemoveDirectoryW( LPCWSTR path )
@@ -264,15 +265,21 @@ BOOL WINAPI RemoveDirectoryW( LPCWSTR path )
}
status = wine_nt_to_unix_file_name( &nt_name, &unix_name, FILE_OPEN, FALSE );
status = wine_nt_to_unix_file_name( &nt_name, &unix_name, FILE_OPEN );
- RtlFreeUnicodeString( &nt_name );
- if (!set_ntstatus( status ))
+ if (status == STATUS_SUCCESS)
@@ -51,10 +51,10 @@ index b580e367561..9fa7d4c9f27 100644
return ret;
}
diff --git a/dlls/ntdll/tests/file.c b/dlls/ntdll/tests/file.c
index d7b2f9aa0d9..e8cdb661772 100644
index c7107500939..5b71f6f658b 100644
--- a/dlls/ntdll/tests/file.c
+++ b/dlls/ntdll/tests/file.c
@@ -4938,7 +4938,7 @@ static void test_reparse_points(void)
@@ -5009,7 +5009,7 @@ static void test_reparse_points(void)
REPARSE_GUID_DATA_BUFFER guid_buffer;
static const WCHAR dotW[] = {'.',0};
REPARSE_DATA_BUFFER *buffer = NULL;
@@ -63,7 +63,7 @@ index d7b2f9aa0d9..e8cdb661772 100644
INT buffer_len, string_len;
IO_STATUS_BLOCK iosb;
UNICODE_STRING nameW;
@@ -5027,6 +5027,38 @@ static void test_reparse_points(void)
@@ -5098,6 +5098,38 @@ static void test_reparse_points(void)
"Junction point folder's access time does not match.\n");
CloseHandle(handle);
@@ -103,5 +103,5 @@ index d7b2f9aa0d9..e8cdb661772 100644
/* Cleanup */
pRtlFreeUnicodeString(&nameW);
--
2.23.0
2.27.0

View File

@@ -1,4 +1,4 @@
From 6a13b364b9b8a92d706b8ee2f4e69743ab3bee5a Mon Sep 17 00:00:00 2001
From 2fe2cb6a67925f22e9b3fbffefd20c2fe0040775 Mon Sep 17 00:00:00 2001
From: "Erich E. Hoover" <erich.e.hoover@gmail.com>
Date: Thu, 11 Apr 2019 12:16:49 -0600
Subject: [PATCH] ntdll: Add support for relative symlink creation.
@@ -11,7 +11,7 @@ Signed-off-by: Erich E. Hoover <erich.e.hoover@gmail.com>
3 files changed, 77 insertions(+), 13 deletions(-)
diff --git a/dlls/ntdll/tests/file.c b/dlls/ntdll/tests/file.c
index df912e18496..515a84da4d6 100644
index b93ba0e87ed..975a72e7103 100644
--- a/dlls/ntdll/tests/file.c
+++ b/dlls/ntdll/tests/file.c
@@ -4972,7 +4972,8 @@ static void test_file_readonly_access(void)
@@ -101,10 +101,10 @@ index df912e18496..515a84da4d6 100644
/* Cleanup */
pRtlFreeUnicodeString(&nameW);
diff --git a/dlls/ntdll/unix/file.c b/dlls/ntdll/unix/file.c
index e35ea49d17f..eb39dc0873b 100644
index fe945cef477..a1d1863133a 100644
--- a/dlls/ntdll/unix/file.c
+++ b/dlls/ntdll/unix/file.c
@@ -5615,16 +5615,19 @@ static void ignore_server_ioctl_struct_holes( ULONG code, const void *in_buffer,
@@ -5669,16 +5669,19 @@ static void ignore_server_ioctl_struct_holes( ULONG code, const void *in_buffer,
*/
NTSTATUS FILE_CreateSymlink(HANDLE handle, REPARSE_DATA_BUFFER *buffer)
{
@@ -126,7 +126,7 @@ index e35ea49d17f..eb39dc0873b 100644
int i;
switch(buffer->ReparseTag)
@@ -5633,11 +5636,13 @@ NTSTATUS FILE_CreateSymlink(HANDLE handle, REPARSE_DATA_BUFFER *buffer)
@@ -5687,11 +5690,13 @@ NTSTATUS FILE_CreateSymlink(HANDLE handle, REPARSE_DATA_BUFFER *buffer)
dest_len = buffer->MountPointReparseBuffer.SubstituteNameLength;
offset = buffer->MountPointReparseBuffer.SubstituteNameOffset;
dest = &buffer->MountPointReparseBuffer.PathBuffer[offset];
@@ -140,7 +140,7 @@ index e35ea49d17f..eb39dc0873b 100644
break;
default:
return STATUS_NOT_IMPLEMENTED;
@@ -5649,17 +5654,54 @@ NTSTATUS FILE_CreateSymlink(HANDLE handle, REPARSE_DATA_BUFFER *buffer)
@@ -5703,17 +5708,54 @@ NTSTATUS FILE_CreateSymlink(HANDLE handle, REPARSE_DATA_BUFFER *buffer)
if ((status = server_get_unix_name( handle, &unix_src )))
goto cleanup;
src_allocated = TRUE;
@@ -173,7 +173,7 @@ index e35ea49d17f..eb39dc0873b 100644
+ nt_dest.Length = dest_len;
+ }
+ nt_dest_allocated = TRUE;
status = nt_to_unix_file_name( &nt_dest, &unix_dest, 0, FALSE );
status = nt_to_unix_file_name( &nt_dest, &unix_dest, 0 );
if (status != STATUS_SUCCESS && status != STATUS_NO_SUCH_FILE)
goto cleanup;
dest_allocated = TRUE;
@@ -199,7 +199,7 @@ index e35ea49d17f..eb39dc0873b 100644
for (i = 0; i < sizeof(ULONG)*8; i++)
{
if ((buffer->ReparseTag >> i) & 1)
@@ -5678,7 +5720,7 @@ NTSTATUS FILE_CreateSymlink(HANDLE handle, REPARSE_DATA_BUFFER *buffer)
@@ -5732,7 +5774,7 @@ NTSTATUS FILE_CreateSymlink(HANDLE handle, REPARSE_DATA_BUFFER *buffer)
strcat( magic_dest, "." );
strcat( magic_dest, "/" );
}
@@ -208,7 +208,7 @@ index e35ea49d17f..eb39dc0873b 100644
/* Produce the link in a temporary location in the same folder */
strcpy( tmpdir, unix_src.Buffer );
@@ -5728,7 +5770,9 @@ NTSTATUS FILE_CreateSymlink(HANDLE handle, REPARSE_DATA_BUFFER *buffer)
@@ -5782,7 +5824,9 @@ NTSTATUS FILE_CreateSymlink(HANDLE handle, REPARSE_DATA_BUFFER *buffer)
cleanup:
if (tempdir_created) rmdir( tmpdir );

View File

@@ -1,4 +1,4 @@
From 1f399151685c3d7827d39b7039abe7b3b941a3bc Mon Sep 17 00:00:00 2001
From c1f3ec8ecefd4488bd8f49da22deb2f4f56d489c Mon Sep 17 00:00:00 2001
From: "Erich E. Hoover" <erich.e.hoover@gmail.com>
Date: Tue, 30 Apr 2019 16:24:54 -0600
Subject: [PATCH] ntdll: Allow creation of dangling reparse points to
@@ -11,10 +11,10 @@ Signed-off-by: Erich E. Hoover <erich.e.hoover@gmail.com>
2 files changed, 15 insertions(+), 1 deletion(-)
diff --git a/dlls/ntdll/unix/file.c b/dlls/ntdll/unix/file.c
index fb1e6bd3c1c..c47aea62a38 100644
index 3cfd633df86..fc79a2fa735 100644
--- a/dlls/ntdll/unix/file.c
+++ b/dlls/ntdll/unix/file.c
@@ -3218,6 +3218,19 @@ static NTSTATUS lookup_unix_name( const WCHAR *name, int name_len, char **buffer
@@ -3273,6 +3273,19 @@ static NTSTATUS lookup_unix_name( const WCHAR *name, int name_len, char **buffer
status = STATUS_OBJECT_NAME_COLLISION;
}
}
@@ -34,20 +34,20 @@ index fb1e6bd3c1c..c47aea62a38 100644
if (status != STATUS_SUCCESS) break;
@@ -5682,7 +5695,7 @@ NTSTATUS FILE_CreateSymlink(HANDLE handle, REPARSE_DATA_BUFFER *buffer)
@@ -5736,7 +5749,7 @@ NTSTATUS FILE_CreateSymlink(HANDLE handle, REPARSE_DATA_BUFFER *buffer)
nt_dest.Length = dest_len;
}
nt_dest_allocated = TRUE;
- status = nt_to_unix_file_name( &nt_dest, &unix_dest, 0, FALSE );
+ status = nt_to_unix_file_name( &nt_dest, &unix_dest, FILE_WINE_PATH, FALSE );
- status = nt_to_unix_file_name( &nt_dest, &unix_dest, 0 );
+ status = nt_to_unix_file_name( &nt_dest, &unix_dest, FILE_WINE_PATH );
if (status != STATUS_SUCCESS && status != STATUS_NO_SUCH_FILE)
goto cleanup;
dest_allocated = TRUE;
diff --git a/include/winternl.h b/include/winternl.h
index 0957561063a..0af566f518d 100644
index 4ee32d3c9e9..3d444e7485e 100644
--- a/include/winternl.h
+++ b/include/winternl.h
@@ -1839,6 +1839,7 @@ typedef struct _RTL_HANDLE_TABLE
@@ -1869,6 +1869,7 @@ typedef struct _RTL_HANDLE_TABLE
#define FILE_OVERWRITE 4
#define FILE_OVERWRITE_IF 5
#define FILE_MAXIMUM_DISPOSITION 5