mirror of
https://gitlab.winehq.org/wine/wine-staging.git
synced 2025-01-28 22:04:43 -08:00
Updated ntdll-Junction_Points patchset
This commit is contained in:
parent
05f918ddb4
commit
7d9b7bbdf5
@ -1,4 +1,4 @@
|
||||
From e4f4a5fdd7688699cabbe98bedf1314df6bca246 Mon Sep 17 00:00:00 2001
|
||||
From 87bbbc7d6c67c2ec3e13f84a7eecccb71e486ac0 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: ntdll: Add support for junction point creation.
|
||||
@ -6,22 +6,22 @@ Subject: ntdll: Add support for junction point creation.
|
||||
Signed-off-by: Erich E. Hoover <erich.e.hoover@gmail.com>
|
||||
---
|
||||
configure.ac | 2 +
|
||||
dlls/ntdll/file.c | 116 ++++++++++++++++++++++++++++++++++++++++
|
||||
dlls/ntdll/file.c | 118 ++++++++++++++++++++++++++++++++++++++++
|
||||
dlls/ntdll/tests/file.c | 101 ++++++++++++++++++++++++++++++++++
|
||||
include/Makefile.in | 1 +
|
||||
include/ntifs.h | 42 +++++++++++++++
|
||||
include/wine/port.h | 9 ++++
|
||||
include/ntifs.h | 42 ++++++++++++++
|
||||
include/wine/port.h | 9 +++
|
||||
libs/port/Makefile.in | 1 +
|
||||
libs/port/renameat2.c | 55 +++++++++++++++++++
|
||||
8 files changed, 327 insertions(+)
|
||||
8 files changed, 329 insertions(+)
|
||||
create mode 100644 include/ntifs.h
|
||||
create mode 100644 libs/port/renameat2.c
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index c2f97e0f7d..10c60429e6 100644
|
||||
index d1502bacf7..84307f0f54 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -2189,6 +2189,8 @@ AC_CHECK_FUNCS(\
|
||||
@@ -2207,6 +2207,8 @@ AC_CHECK_FUNCS(\
|
||||
pwrite \
|
||||
readdir \
|
||||
readlink \
|
||||
@ -31,7 +31,7 @@ index c2f97e0f7d..10c60429e6 100644
|
||||
select \
|
||||
setproctitle \
|
||||
diff --git a/dlls/ntdll/file.c b/dlls/ntdll/file.c
|
||||
index 3dafdcfb44..5f2da14398 100644
|
||||
index 3dafdcfb44..c0992ea657 100644
|
||||
--- a/dlls/ntdll/file.c
|
||||
+++ b/dlls/ntdll/file.c
|
||||
@@ -21,6 +21,7 @@
|
||||
@ -50,7 +50,7 @@ index 3dafdcfb44..5f2da14398 100644
|
||||
|
||||
WINE_DEFAULT_DEBUG_CHANNEL(ntdll);
|
||||
WINE_DECLARE_DEBUG_CHANNEL(winediag);
|
||||
@@ -1648,6 +1650,102 @@ NTSTATUS WINAPI NtDeviceIoControlFile(HANDLE handle, HANDLE event,
|
||||
@@ -1648,6 +1650,104 @@ NTSTATUS WINAPI NtDeviceIoControlFile(HANDLE handle, HANDLE event,
|
||||
}
|
||||
|
||||
|
||||
@ -64,7 +64,7 @@ index 3dafdcfb44..5f2da14398 100644
|
||||
+ int dest_len = buffer->MountPointReparseBuffer.SubstituteNameLength;
|
||||
+ int offset = buffer->MountPointReparseBuffer.SubstituteNameOffset;
|
||||
+ WCHAR *dest = &buffer->MountPointReparseBuffer.PathBuffer[offset];
|
||||
+ char tmpdir[PATH_MAX], tmplink[PATH_MAX];
|
||||
+ char tmpdir[PATH_MAX], tmplink[PATH_MAX], *d;
|
||||
+ ANSI_STRING unix_src, unix_dest;
|
||||
+ char magic_dest[PATH_MAX];
|
||||
+ int dest_fd, needs_close;
|
||||
@ -80,7 +80,8 @@ index 3dafdcfb44..5f2da14398 100644
|
||||
+ src_allocated = TRUE;
|
||||
+ nt_dest.Buffer = dest;
|
||||
+ nt_dest.Length = dest_len;
|
||||
+ if ((status = wine_nt_to_unix_file_name( &nt_dest, &unix_dest, FILE_OPEN, FALSE )))
|
||||
+ status = wine_nt_to_unix_file_name( &nt_dest, &unix_dest, 0, FALSE );
|
||||
+ if (status != STATUS_SUCCESS && status != STATUS_NO_SUCH_FILE)
|
||||
+ goto cleanup;
|
||||
+ dest_allocated = TRUE;
|
||||
+
|
||||
@ -98,7 +99,8 @@ index 3dafdcfb44..5f2da14398 100644
|
||||
+
|
||||
+ /* Produce the link in a temporary location in the same folder */
|
||||
+ strcpy( tmpdir, unix_src.Buffer );
|
||||
+ dirname( tmpdir) ;
|
||||
+ d = dirname( tmpdir);
|
||||
+ if (d != tmpdir) strcpy( tmpdir, d );
|
||||
+ strcat( tmpdir, "/.winelink.XXXXXX" );
|
||||
+ if (mkdtemp( tmpdir ) == NULL)
|
||||
+ {
|
||||
@ -153,7 +155,7 @@ index 3dafdcfb44..5f2da14398 100644
|
||||
/**************************************************************************
|
||||
* NtFsControlFile [NTDLL.@]
|
||||
* ZwFsControlFile [NTDLL.@]
|
||||
@@ -1732,6 +1830,24 @@ NTSTATUS WINAPI NtFsControlFile(HANDLE handle, HANDLE event, PIO_APC_ROUTINE apc
|
||||
@@ -1732,6 +1832,24 @@ NTSTATUS WINAPI NtFsControlFile(HANDLE handle, HANDLE event, PIO_APC_ROUTINE apc
|
||||
io->Information = 0;
|
||||
status = STATUS_SUCCESS;
|
||||
break;
|
||||
@ -303,10 +305,10 @@ index 8e54dbb541..322dadefe3 100644
|
||||
+ test_reparse_points();
|
||||
}
|
||||
diff --git a/include/Makefile.in b/include/Makefile.in
|
||||
index 09c84d8254..616f265900 100644
|
||||
index 4a0f927082..519a34c856 100644
|
||||
--- a/include/Makefile.in
|
||||
+++ b/include/Makefile.in
|
||||
@@ -479,6 +479,7 @@ SOURCES = \
|
||||
@@ -480,6 +480,7 @@ SOURCES = \
|
||||
ntddvdeo.h \
|
||||
ntdef.h \
|
||||
ntdsapi.h \
|
||||
|
@ -1,4 +1,4 @@
|
||||
From 7c01bde97a63851a367aa0bd76c9aee398857b4e Mon Sep 17 00:00:00 2001
|
||||
From 38245bc3099137dd16dc78e3f41c6d50b7f0f804 Mon Sep 17 00:00:00 2001
|
||||
From: "Erich E. Hoover" <erich.e.hoover@gmail.com>
|
||||
Date: Thu, 16 Jan 2014 20:57:57 -0700
|
||||
Subject: ntdll: Add support for reading junction points.
|
||||
@ -10,10 +10,10 @@ Signed-off-by: Erich E. Hoover <erich.e.hoover@gmail.com>
|
||||
2 files changed, 119 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/dlls/ntdll/file.c b/dlls/ntdll/file.c
|
||||
index 5f2da14398..ee561d9268 100644
|
||||
index c0992ea657..e0984b4567 100644
|
||||
--- a/dlls/ntdll/file.c
|
||||
+++ b/dlls/ntdll/file.c
|
||||
@@ -1746,6 +1746,106 @@ cleanup:
|
||||
@@ -1748,6 +1748,106 @@ cleanup:
|
||||
}
|
||||
|
||||
|
||||
@ -120,7 +120,7 @@ index 5f2da14398..ee561d9268 100644
|
||||
/**************************************************************************
|
||||
* NtFsControlFile [NTDLL.@]
|
||||
* ZwFsControlFile [NTDLL.@]
|
||||
@@ -1831,6 +1931,12 @@ NTSTATUS WINAPI NtFsControlFile(HANDLE handle, HANDLE event, PIO_APC_ROUTINE apc
|
||||
@@ -1833,6 +1933,12 @@ NTSTATUS WINAPI NtFsControlFile(HANDLE handle, HANDLE event, PIO_APC_ROUTINE apc
|
||||
status = STATUS_SUCCESS;
|
||||
break;
|
||||
|
||||
|
@ -1,20 +1,20 @@
|
||||
From 8e8839dfe0b2eeae7b0d124b65725257792e3813 Mon Sep 17 00:00:00 2001
|
||||
From 9f0a95668d86bacd6cd006e6fe6c6d463cfb5e9b Mon Sep 17 00:00:00 2001
|
||||
From: "Erich E. Hoover" <erich.e.hoover@gmail.com>
|
||||
Date: Thu, 16 Jan 2014 21:00:21 -0700
|
||||
Subject: ntdll: Add support for deleting junction points.
|
||||
|
||||
Signed-off-by: Erich E. Hoover <erich.e.hoover@gmail.com>
|
||||
---
|
||||
dlls/ntdll/file.c | 96 +++++++++++++++++++++++++++++++++++++++++
|
||||
dlls/ntdll/file.c | 97 +++++++++++++++++++++++++++++++++++++++++
|
||||
dlls/ntdll/tests/file.c | 23 +++++++++-
|
||||
include/ntifs.h | 12 ++++++
|
||||
3 files changed, 130 insertions(+), 1 deletion(-)
|
||||
include/ntifs.h | 12 +++++
|
||||
3 files changed, 131 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/dlls/ntdll/file.c b/dlls/ntdll/file.c
|
||||
index ee561d9268..1730d816d9 100644
|
||||
index e0984b4567..54768695b3 100644
|
||||
--- a/dlls/ntdll/file.c
|
||||
+++ b/dlls/ntdll/file.c
|
||||
@@ -1846,6 +1846,86 @@ cleanup:
|
||||
@@ -1848,6 +1848,87 @@ cleanup:
|
||||
}
|
||||
|
||||
|
||||
@ -24,7 +24,7 @@ index ee561d9268..1730d816d9 100644
|
||||
+ */
|
||||
+NTSTATUS FILE_RemoveSymlink(HANDLE handle, REPARSE_GUID_DATA_BUFFER *buffer)
|
||||
+{
|
||||
+ char tmpdir[PATH_MAX], tmpfile[PATH_MAX];
|
||||
+ char tmpdir[PATH_MAX], tmpfile[PATH_MAX], *d;
|
||||
+ BOOL tempdir_created = FALSE;
|
||||
+ int dest_fd, needs_close;
|
||||
+ ANSI_STRING unix_name;
|
||||
@ -46,7 +46,8 @@ index ee561d9268..1730d816d9 100644
|
||||
+ goto cleanup;
|
||||
+ }
|
||||
+ strcpy( tmpdir, unix_name.Buffer );
|
||||
+ dirname( tmpdir) ;
|
||||
+ d = dirname( tmpdir);
|
||||
+ if (d != tmpdir) strcpy( tmpdir, d );
|
||||
+ strcat( tmpdir, "/.winelink.XXXXXX" );
|
||||
+ if (mkdtemp( tmpdir ) == NULL)
|
||||
+ {
|
||||
@ -101,7 +102,7 @@ index ee561d9268..1730d816d9 100644
|
||||
/**************************************************************************
|
||||
* NtFsControlFile [NTDLL.@]
|
||||
* ZwFsControlFile [NTDLL.@]
|
||||
@@ -1931,6 +2011,22 @@ NTSTATUS WINAPI NtFsControlFile(HANDLE handle, HANDLE event, PIO_APC_ROUTINE apc
|
||||
@@ -1933,6 +2014,22 @@ NTSTATUS WINAPI NtFsControlFile(HANDLE handle, HANDLE event, PIO_APC_ROUTINE apc
|
||||
status = STATUS_SUCCESS;
|
||||
break;
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
From c94b245b19d852b13048227551641c655c591da1 Mon Sep 17 00:00:00 2001
|
||||
From 52fb88dc16f22188dd2b3800fc1cd0034dbd118e Mon Sep 17 00:00:00 2001
|
||||
From: "Erich E. Hoover" <erich.e.hoover@gmail.com>
|
||||
Date: Thu, 16 Jan 2014 21:01:25 -0700
|
||||
Subject: ntdll: Add a test for junction point advertisement.
|
||||
|
@ -1,4 +1,4 @@
|
||||
From 8b1d430506bf0127a4782594937e1ae1505d64f0 Mon Sep 17 00:00:00 2001
|
||||
From db064094e068f3e6434f4b4302c5b2eadf8395ef 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: kernel32,ntdll: Add support for deleting junction points with
|
||||
@ -11,7 +11,7 @@ Signed-off-by: Erich E. Hoover <erich.e.hoover@gmail.com>
|
||||
2 files changed, 46 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/dlls/kernel32/path.c b/dlls/kernel32/path.c
|
||||
index cf1c768970..6369225b3e 100644
|
||||
index b8f49bd597..76a9512c77 100644
|
||||
--- a/dlls/kernel32/path.c
|
||||
+++ b/dlls/kernel32/path.c
|
||||
@@ -1696,6 +1696,7 @@ BOOL WINAPI CreateDirectoryExW( LPCWSTR template, LPCWSTR path, LPSECURITY_ATTRI
|
||||
|
@ -1,24 +1,120 @@
|
||||
From 602c311b76c08f4d06c71ee0925ea7c3329d7d73 Mon Sep 17 00:00:00 2001
|
||||
From aa5ad3e25315a3ca2113df9a80e178fdfef58296 Mon Sep 17 00:00:00 2001
|
||||
From: "Erich E. Hoover" <erich.e.hoover@gmail.com>
|
||||
Date: Thu, 16 Jan 2014 21:03:47 -0700
|
||||
Subject: kernel32: Advertise junction point support.
|
||||
|
||||
Signed-off-by: Erich E. Hoover <erich.e.hoover@gmail.com>
|
||||
---
|
||||
dlls/kernel32/volume.c | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
dlls/kernel32/volume.c | 85 +++++++++++++++++++++++++++++++++++++++++-
|
||||
1 file changed, 84 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/dlls/kernel32/volume.c b/dlls/kernel32/volume.c
|
||||
index 12084369cb..b8ab8896b9 100644
|
||||
index 12084369cb..76bb32b850 100644
|
||||
--- a/dlls/kernel32/volume.c
|
||||
+++ b/dlls/kernel32/volume.c
|
||||
@@ -824,7 +824,8 @@ fill_fs_info: /* now fill in the information that depends on the file system ty
|
||||
@@ -44,6 +44,19 @@
|
||||
#include "wine/unicode.h"
|
||||
#include "wine/debug.h"
|
||||
|
||||
+#ifdef HAVE_SYS_MOUNT_H
|
||||
+# include <sys/mount.h>
|
||||
+#endif
|
||||
+#ifdef HAVE_SYS_STATFS_H
|
||||
+# include <sys/statfs.h>
|
||||
+#endif
|
||||
+#ifdef HAVE_SYS_SYSCALL_H
|
||||
+# include <sys/syscall.h>
|
||||
+#endif
|
||||
+#ifdef HAVE_SYS_VFS_H
|
||||
+# include <sys/vfs.h>
|
||||
+#endif
|
||||
+
|
||||
WINE_DEFAULT_DEBUG_CHANNEL(volume);
|
||||
|
||||
#define BLOCK_SIZE 2048
|
||||
@@ -680,6 +693,75 @@ static DWORD VOLUME_GetAudioCDSerial( const CDROM_TOC *toc )
|
||||
}
|
||||
|
||||
|
||||
+static DWORD WINAPI get_fs_flags( UNICODE_STRING *nt_name )
|
||||
+{
|
||||
+#if defined(__NR_renameat2) || defined(RENAME_SWAP)
|
||||
+ ANSI_STRING unix_name;
|
||||
+#if defined(HAVE_FSTATFS)
|
||||
+ struct statfs stfs;
|
||||
+#elif defined(HAVE_FSTATVFS)
|
||||
+ struct statvfs stfs;
|
||||
+#endif
|
||||
+ NTSTATUS status;
|
||||
+ DWORD flags = 0;
|
||||
+
|
||||
+ status = wine_nt_to_unix_file_name( nt_name, &unix_name, FILE_OPEN, FALSE );
|
||||
+ if (status != STATUS_SUCCESS)
|
||||
+ return flags;
|
||||
+#if defined(HAVE_FSTATFS)
|
||||
+ if (statfs(unix_name.Buffer, &stfs))
|
||||
+ return flags;
|
||||
+#elif defined(HAVE_FSTATVFS)
|
||||
+ if (statvfs(unix_name.Buffer, &stfs))
|
||||
+ return flags;
|
||||
+#endif
|
||||
+#if defined(HAVE_FSTATFS) && defined(linux)
|
||||
+ switch (stfs.f_type)
|
||||
+ {
|
||||
+ case 0x6969: /* nfs */
|
||||
+ case 0xff534d42: /* cifs */
|
||||
+ case 0x564c: /* ncpfs */
|
||||
+ case 0x01021994: /* tmpfs */
|
||||
+ case 0x28cd3d45: /* cramfs */
|
||||
+ case 0x1373: /* devfs */
|
||||
+ case 0x9fa0: /* procfs */
|
||||
+ case 0xef51: /* old ext2 */
|
||||
+ case 0xef53: /* ext2/3/4 */
|
||||
+ case 0x4244: /* hfs */
|
||||
+ case 0xf995e849: /* hpfs */
|
||||
+ case 0x5346544e: /* ntfs */
|
||||
+ flags |= FILE_SUPPORTS_REPARSE_POINTS;
|
||||
+ break;
|
||||
+ default:
|
||||
+ break;
|
||||
+ }
|
||||
+#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__OpenBSD__) || defined(__DragonFly__) || defined(__APPLE__) || defined(__NetBSD__)
|
||||
+ if (!strcmp("apfs", stfs.f_fstypename) ||
|
||||
+ !strcmp("nfs", stfs.f_fstypename) ||
|
||||
+ !strcmp("cifs", stfs.f_fstypename) ||
|
||||
+ !strcmp("ncpfs", stfs.f_fstypename) ||
|
||||
+ !strcmp("tmpfs", stfs.f_fstypename) ||
|
||||
+ !strcmp("cramfs", stfs.f_fstypename) ||
|
||||
+ !strcmp("devfs", stfs.f_fstypename) ||
|
||||
+ !strcmp("procfs", stfs.f_fstypename) ||
|
||||
+ !strcmp("ext2", stfs.f_fstypename) ||
|
||||
+ !strcmp("ext3", stfs.f_fstypename) ||
|
||||
+ !strcmp("ext4", stfs.f_fstypename) ||
|
||||
+ !strcmp("hfs", stfs.f_fstypename) ||
|
||||
+ !strcmp("hpfs", stfs.f_fstypename) ||
|
||||
+ !strcmp("ntfs", stfs.f_fstypename))
|
||||
+ {
|
||||
+ flags |= FILE_SUPPORTS_REPARSE_POINTS;
|
||||
+ }
|
||||
+#endif
|
||||
+ RtlFreeAnsiString( &unix_name );
|
||||
+ return flags;
|
||||
+#else
|
||||
+ return 0;
|
||||
+#endif
|
||||
+}
|
||||
+
|
||||
+
|
||||
/***********************************************************************
|
||||
* GetVolumeInformationW (KERNEL32.@)
|
||||
*/
|
||||
@@ -824,7 +906,8 @@ fill_fs_info: /* now fill in the information that depends on the file system ty
|
||||
default:
|
||||
if (fsname) lstrcpynW( fsname, ntfsW, fsname_len );
|
||||
if (filename_len) *filename_len = 255;
|
||||
- if (flags) *flags = FILE_CASE_PRESERVED_NAMES | FILE_PERSISTENT_ACLS;
|
||||
+ if (flags) *flags = FILE_CASE_PRESERVED_NAMES | FILE_PERSISTENT_ACLS
|
||||
+ | FILE_SUPPORTS_REPARSE_POINTS;
|
||||
+ | get_fs_flags( &nt_name );
|
||||
break;
|
||||
}
|
||||
ret = TRUE;
|
||||
|
@ -1,4 +1,4 @@
|
||||
From 6c1d1b1d7819118d3511aaa314a8e3da05f4c7ea Mon Sep 17 00:00:00 2001
|
||||
From 8547ee103b062ae2c8e1a5fd058ea3e9dc8a2146 Mon Sep 17 00:00:00 2001
|
||||
From: "Erich E. Hoover" <erich.e.hoover@gmail.com>
|
||||
Date: Thu, 16 Jan 2014 21:06:24 -0700
|
||||
Subject: ntdll: Add support for absolute symlink creation.
|
||||
@ -11,7 +11,7 @@ Signed-off-by: Erich E. Hoover <erich.e.hoover@gmail.com>
|
||||
3 files changed, 139 insertions(+), 15 deletions(-)
|
||||
|
||||
diff --git a/dlls/ntdll/file.c b/dlls/ntdll/file.c
|
||||
index 1730d816d9..78ea4c5b00 100644
|
||||
index 54768695b3..18630c12c9 100644
|
||||
--- a/dlls/ntdll/file.c
|
||||
+++ b/dlls/ntdll/file.c
|
||||
@@ -1657,17 +1657,33 @@ NTSTATUS WINAPI NtDeviceIoControlFile(HANDLE handle, HANDLE event,
|
||||
@ -21,7 +21,7 @@ index 1730d816d9..78ea4c5b00 100644
|
||||
- int dest_len = buffer->MountPointReparseBuffer.SubstituteNameLength;
|
||||
- int offset = buffer->MountPointReparseBuffer.SubstituteNameOffset;
|
||||
- WCHAR *dest = &buffer->MountPointReparseBuffer.PathBuffer[offset];
|
||||
char tmpdir[PATH_MAX], tmplink[PATH_MAX];
|
||||
char tmpdir[PATH_MAX], tmplink[PATH_MAX], *d;
|
||||
ANSI_STRING unix_src, unix_dest;
|
||||
char magic_dest[PATH_MAX];
|
||||
int dest_fd, needs_close;
|
||||
@ -51,7 +51,7 @@ index 1730d816d9..78ea4c5b00 100644
|
||||
if ((status = server_get_unix_fd( handle, FILE_SPECIAL_ACCESS, &dest_fd, &needs_close, NULL, NULL )))
|
||||
return status;
|
||||
|
||||
@@ -1690,6 +1706,18 @@ NTSTATUS FILE_CreateSymlink(HANDLE handle, REPARSE_DATA_BUFFER *buffer)
|
||||
@@ -1691,6 +1707,18 @@ NTSTATUS FILE_CreateSymlink(HANDLE handle, REPARSE_DATA_BUFFER *buffer)
|
||||
strcat( magic_dest, "." );
|
||||
strcat( magic_dest, "/" );
|
||||
}
|
||||
@ -70,7 +70,7 @@ index 1730d816d9..78ea4c5b00 100644
|
||||
strcat( magic_dest, unix_dest.Buffer );
|
||||
|
||||
/* Produce the link in a temporary location in the same folder */
|
||||
@@ -2040,6 +2068,7 @@ NTSTATUS WINAPI NtFsControlFile(HANDLE handle, HANDLE event, PIO_APC_ROUTINE apc
|
||||
@@ -2043,6 +2071,7 @@ NTSTATUS WINAPI NtFsControlFile(HANDLE handle, HANDLE event, PIO_APC_ROUTINE apc
|
||||
switch(buffer->ReparseTag)
|
||||
{
|
||||
case IO_REPARSE_TAG_MOUNT_POINT:
|
||||
|
@ -1,4 +1,4 @@
|
||||
From 498e0feb3c25f92c9930e4007259b12c6ff4e567 Mon Sep 17 00:00:00 2001
|
||||
From b9fa01baf73dc3975bd56b9b0ce0d26eddb45e81 Mon Sep 17 00:00:00 2001
|
||||
From: "Erich E. Hoover" <erich.e.hoover@gmail.com>
|
||||
Date: Wed, 13 Mar 2019 12:55:20 -0600
|
||||
Subject: ntdll: Add support for reading absolute symlinks.
|
||||
@ -10,10 +10,10 @@ Signed-off-by: Erich E. Hoover <erich.e.hoover@gmail.com>
|
||||
2 files changed, 34 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/dlls/ntdll/file.c b/dlls/ntdll/file.c
|
||||
index 78ea4c5b00..812bfd0e36 100644
|
||||
index 18630c12c9..80d3e9b089 100644
|
||||
--- a/dlls/ntdll/file.c
|
||||
+++ b/dlls/ntdll/file.c
|
||||
@@ -1787,6 +1787,7 @@ NTSTATUS FILE_GetSymlink(HANDLE handle, REPARSE_DATA_BUFFER *buffer, ULONG out_s
|
||||
@@ -1789,6 +1789,7 @@ NTSTATUS FILE_GetSymlink(HANDLE handle, REPARSE_DATA_BUFFER *buffer, ULONG out_s
|
||||
UNICODE_STRING nt_dest;
|
||||
DWORD max_length;
|
||||
NTSTATUS status;
|
||||
@ -21,7 +21,7 @@ index 78ea4c5b00..812bfd0e36 100644
|
||||
INT prefix_len;
|
||||
ssize_t ret;
|
||||
char *p;
|
||||
@@ -1833,6 +1834,17 @@ NTSTATUS FILE_GetSymlink(HANDLE handle, REPARSE_DATA_BUFFER *buffer, ULONG out_s
|
||||
@@ -1835,6 +1836,17 @@ NTSTATUS FILE_GetSymlink(HANDLE handle, REPARSE_DATA_BUFFER *buffer, ULONG out_s
|
||||
}
|
||||
buffer->ReparseTag |= (val << i);
|
||||
}
|
||||
@ -39,7 +39,7 @@ index 78ea4c5b00..812bfd0e36 100644
|
||||
unix_dest.Length -= (p - unix_dest.Buffer);
|
||||
memmove(unix_dest.Buffer, p, unix_dest.Length);
|
||||
|
||||
@@ -1851,6 +1863,16 @@ NTSTATUS FILE_GetSymlink(HANDLE handle, REPARSE_DATA_BUFFER *buffer, ULONG out_s
|
||||
@@ -1853,6 +1865,16 @@ NTSTATUS FILE_GetSymlink(HANDLE handle, REPARSE_DATA_BUFFER *buffer, ULONG out_s
|
||||
buffer->MountPointReparseBuffer.PrintNameLength = nt_dest.Length - prefix_len*sizeof(WCHAR);
|
||||
print_name = &buffer->MountPointReparseBuffer.PathBuffer[buffer->MountPointReparseBuffer.PrintNameOffset/sizeof(WCHAR)];
|
||||
break;
|
||||
|
@ -1,4 +1,4 @@
|
||||
From c32fc6d0a84e857f17c1c51af9bab5aab6a5ff1e Mon Sep 17 00:00:00 2001
|
||||
From 90921ac6aba0f98fb9b33104c82d77e07cc82278 Mon Sep 17 00:00:00 2001
|
||||
From: "Erich E. Hoover" <erich.e.hoover@gmail.com>
|
||||
Date: Wed, 13 Mar 2019 13:02:22 -0600
|
||||
Subject: ntdll: Add support for deleting symlinks.
|
||||
@ -10,10 +10,10 @@ Signed-off-by: Erich E. Hoover <erich.e.hoover@gmail.com>
|
||||
2 files changed, 17 insertions(+)
|
||||
|
||||
diff --git a/dlls/ntdll/file.c b/dlls/ntdll/file.c
|
||||
index 812bfd0e36..262d24b9d2 100644
|
||||
index 80d3e9b089..60affd59a2 100644
|
||||
--- a/dlls/ntdll/file.c
|
||||
+++ b/dlls/ntdll/file.c
|
||||
@@ -2068,6 +2068,7 @@ NTSTATUS WINAPI NtFsControlFile(HANDLE handle, HANDLE event, PIO_APC_ROUTINE apc
|
||||
@@ -2071,6 +2071,7 @@ NTSTATUS WINAPI NtFsControlFile(HANDLE handle, HANDLE event, PIO_APC_ROUTINE apc
|
||||
switch(buffer->ReparseTag)
|
||||
{
|
||||
case IO_REPARSE_TAG_MOUNT_POINT:
|
||||
|
@ -1,17 +1,17 @@
|
||||
From 273149c2baf56e80063a33ebb5d143819a138436 Mon Sep 17 00:00:00 2001
|
||||
From 4cfe8631a57057a13afa650f41576c8c3ae465d5 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: ntdll: Add support for relative symlink creation.
|
||||
|
||||
Signed-off-by: Erich E. Hoover <erich.e.hoover@gmail.com>
|
||||
---
|
||||
dlls/ntdll/file.c | 57 ++++++++++++++++++++++++++++++++++++-----
|
||||
dlls/ntdll/tests/file.c | 30 +++++++++++++++++-----
|
||||
dlls/ntdll/file.c | 58 ++++++++++++++++++++++++++++++++++++-----
|
||||
dlls/ntdll/tests/file.c | 30 ++++++++++++++++-----
|
||||
include/ntifs.h | 2 ++
|
||||
3 files changed, 76 insertions(+), 13 deletions(-)
|
||||
3 files changed, 77 insertions(+), 13 deletions(-)
|
||||
|
||||
diff --git a/dlls/ntdll/file.c b/dlls/ntdll/file.c
|
||||
index 262d24b9d2..186156159c 100644
|
||||
index 60affd59a2..8487bb5158 100644
|
||||
--- a/dlls/ntdll/file.c
|
||||
+++ b/dlls/ntdll/file.c
|
||||
@@ -1656,16 +1656,19 @@ NTSTATUS WINAPI NtDeviceIoControlFile(HANDLE handle, HANDLE event,
|
||||
@ -21,9 +21,9 @@ index 262d24b9d2..186156159c 100644
|
||||
- BOOL src_allocated = FALSE, dest_allocated = FALSE, tempdir_created = FALSE;
|
||||
+ BOOL src_allocated = FALSE, path_allocated = FALSE, dest_allocated = FALSE;
|
||||
+ BOOL nt_dest_allocated = FALSE, tempdir_created = FALSE;
|
||||
+ ANSI_STRING unix_src, unix_dest, unix_path;
|
||||
char tmpdir[PATH_MAX], tmplink[PATH_MAX];
|
||||
char tmpdir[PATH_MAX], tmplink[PATH_MAX], *d;
|
||||
- ANSI_STRING unix_src, unix_dest;
|
||||
+ ANSI_STRING unix_src, unix_dest, unix_path;
|
||||
char magic_dest[PATH_MAX];
|
||||
int dest_fd, needs_close;
|
||||
+ int relative_offset = 0;
|
||||
@ -50,7 +50,7 @@ index 262d24b9d2..186156159c 100644
|
||||
break;
|
||||
default:
|
||||
return STATUS_NOT_IMPLEMENTED;
|
||||
@@ -1690,16 +1695,52 @@ NTSTATUS FILE_CreateSymlink(HANDLE handle, REPARSE_DATA_BUFFER *buffer)
|
||||
@@ -1690,17 +1695,54 @@ NTSTATUS FILE_CreateSymlink(HANDLE handle, REPARSE_DATA_BUFFER *buffer)
|
||||
if ((status = server_get_unix_name( handle, &unix_src )))
|
||||
goto cleanup;
|
||||
src_allocated = TRUE;
|
||||
@ -64,7 +64,8 @@ index 262d24b9d2..186156159c 100644
|
||||
+ unix_path.Buffer = RtlAllocateHeap( GetProcessHeap(), 0, unix_path.MaximumLength );
|
||||
+ path_allocated = TRUE;
|
||||
+ strcpy( unix_path.Buffer, unix_src.Buffer );
|
||||
+ dirname( unix_path.Buffer );
|
||||
+ d = dirname( unix_path.Buffer );
|
||||
+ if (d != unix_path.Buffer) strcpy( unix_path.Buffer, d );
|
||||
+ strcat( unix_path.Buffer, "/");
|
||||
+ unix_path.Length = strlen( unix_path.Buffer );
|
||||
+ if ((status = wine_unix_to_nt_file_name( &unix_path, &nt_path )))
|
||||
@ -82,7 +83,8 @@ index 262d24b9d2..186156159c 100644
|
||||
+ nt_dest.Length = dest_len;
|
||||
+ }
|
||||
+ nt_dest_allocated = TRUE;
|
||||
if ((status = wine_nt_to_unix_file_name( &nt_dest, &unix_dest, FILE_OPEN, FALSE )))
|
||||
status = wine_nt_to_unix_file_name( &nt_dest, &unix_dest, 0, FALSE );
|
||||
if (status != STATUS_SUCCESS && status != STATUS_NO_SUCH_FILE)
|
||||
goto cleanup;
|
||||
dest_allocated = TRUE;
|
||||
+ if (flags == SYMLINK_FLAG_RELATIVE)
|
||||
@ -107,7 +109,7 @@ index 262d24b9d2..186156159c 100644
|
||||
for (i = 0; i < sizeof(ULONG)*8; i++)
|
||||
{
|
||||
if ((buffer->ReparseTag >> i) & 1)
|
||||
@@ -1718,7 +1759,7 @@ NTSTATUS FILE_CreateSymlink(HANDLE handle, REPARSE_DATA_BUFFER *buffer)
|
||||
@@ -1719,7 +1761,7 @@ NTSTATUS FILE_CreateSymlink(HANDLE handle, REPARSE_DATA_BUFFER *buffer)
|
||||
strcat( magic_dest, "." );
|
||||
strcat( magic_dest, "/" );
|
||||
}
|
||||
@ -116,7 +118,7 @@ index 262d24b9d2..186156159c 100644
|
||||
|
||||
/* Produce the link in a temporary location in the same folder */
|
||||
strcpy( tmpdir, unix_src.Buffer );
|
||||
@@ -1767,7 +1808,9 @@ NTSTATUS FILE_CreateSymlink(HANDLE handle, REPARSE_DATA_BUFFER *buffer)
|
||||
@@ -1769,7 +1811,9 @@ NTSTATUS FILE_CreateSymlink(HANDLE handle, REPARSE_DATA_BUFFER *buffer)
|
||||
|
||||
cleanup:
|
||||
if (tempdir_created) rmdir( tmpdir );
|
||||
|
@ -1,19 +1,19 @@
|
||||
From 2618729bcbd286d60e0a80c3ad1ef840c58c5689 Mon Sep 17 00:00:00 2001
|
||||
From cdd6070ee2b8876877c66bfdaa44b4b152633b1d Mon Sep 17 00:00:00 2001
|
||||
From: "Erich E. Hoover" <erich.e.hoover@gmail.com>
|
||||
Date: Thu, 11 Apr 2019 12:31:16 -0600
|
||||
Subject: ntdll: Add support for reading relative symlinks.
|
||||
|
||||
Signed-off-by: Erich E. Hoover <erich.e.hoover@gmail.com>
|
||||
---
|
||||
dlls/ntdll/file.c | 42 ++++++++++++++++++++++++++++++++++++++++-
|
||||
dlls/ntdll/tests/file.c | 13 ++++++++++++-
|
||||
2 files changed, 53 insertions(+), 2 deletions(-)
|
||||
dlls/ntdll/file.c | 44 ++++++++++++++++++++++++++++++++++++++++-
|
||||
dlls/ntdll/tests/file.c | 13 +++++++++++-
|
||||
2 files changed, 55 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/dlls/ntdll/file.c b/dlls/ntdll/file.c
|
||||
index 186156159c..8795eb6e9d 100644
|
||||
index 8487bb5158..5df2d8c3fa 100644
|
||||
--- a/dlls/ntdll/file.c
|
||||
+++ b/dlls/ntdll/file.c
|
||||
@@ -1828,6 +1828,7 @@ NTSTATUS FILE_GetSymlink(HANDLE handle, REPARSE_DATA_BUFFER *buffer, ULONG out_s
|
||||
@@ -1831,6 +1831,7 @@ NTSTATUS FILE_GetSymlink(HANDLE handle, REPARSE_DATA_BUFFER *buffer, ULONG out_s
|
||||
BOOL dest_allocated = FALSE;
|
||||
int dest_fd, needs_close;
|
||||
UNICODE_STRING nt_dest;
|
||||
@ -21,7 +21,7 @@ index 186156159c..8795eb6e9d 100644
|
||||
DWORD max_length;
|
||||
NTSTATUS status;
|
||||
ULONG flags = 0;
|
||||
@@ -1855,6 +1856,11 @@ NTSTATUS FILE_GetSymlink(HANDLE handle, REPARSE_DATA_BUFFER *buffer, ULONG out_s
|
||||
@@ -1858,6 +1859,11 @@ NTSTATUS FILE_GetSymlink(HANDLE handle, REPARSE_DATA_BUFFER *buffer, ULONG out_s
|
||||
|
||||
/* Decode the reparse tag from the symlink */
|
||||
p = unix_dest.Buffer;
|
||||
@ -33,7 +33,7 @@ index 186156159c..8795eb6e9d 100644
|
||||
if (*p++ != '/')
|
||||
{
|
||||
status = STATUS_NOT_IMPLEMENTED;
|
||||
@@ -1891,10 +1897,44 @@ NTSTATUS FILE_GetSymlink(HANDLE handle, REPARSE_DATA_BUFFER *buffer, ULONG out_s
|
||||
@@ -1894,10 +1900,46 @@ NTSTATUS FILE_GetSymlink(HANDLE handle, REPARSE_DATA_BUFFER *buffer, ULONG out_s
|
||||
unix_dest.Length -= (p - unix_dest.Buffer);
|
||||
memmove(unix_dest.Buffer, p, unix_dest.Length);
|
||||
|
||||
@ -41,11 +41,13 @@ index 186156159c..8795eb6e9d 100644
|
||||
+ if (flags == SYMLINK_FLAG_RELATIVE)
|
||||
+ {
|
||||
+ int offset = unix_src.Length + 2;
|
||||
+ char *d;
|
||||
+ memcpy( &unix_dest.Buffer[offset], unix_dest.Buffer, unix_dest.Length );
|
||||
+ unix_dest.Buffer[offset+unix_dest.Length] = 0;
|
||||
+ memcpy( unix_dest.Buffer, unix_src.Buffer, unix_src.Length );
|
||||
+ unix_dest.Buffer[unix_src.Length] = 0;
|
||||
+ dirname( unix_dest.Buffer );
|
||||
+ d = dirname( unix_dest.Buffer );
|
||||
+ if (d != unix_dest.Buffer) strcpy( unix_dest.Buffer, d );
|
||||
+ strcat( unix_dest.Buffer, "/" );
|
||||
+ path_len = strlen( unix_dest.Buffer );
|
||||
+ memmove( &unix_dest.Buffer[path_len], &unix_dest.Buffer[offset], unix_dest.Length + 1 );
|
||||
|
@ -1,4 +1,4 @@
|
||||
From 0cf6512a8532b065dc92d6ac16678dff180a1107 Mon Sep 17 00:00:00 2001
|
||||
From 05a16c210c3dabb07cc5b5514e9745f00fb364ea Mon Sep 17 00:00:00 2001
|
||||
From: "Erich E. Hoover" <erich.e.hoover@gmail.com>
|
||||
Date: Thu, 11 Apr 2019 17:57:53 -0600
|
||||
Subject: ntdll: Add support for file symlinks.
|
||||
@ -10,7 +10,7 @@ Signed-off-by: Erich E. Hoover <erich.e.hoover@gmail.com>
|
||||
2 files changed, 55 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/dlls/ntdll/file.c b/dlls/ntdll/file.c
|
||||
index 8795eb6e9d..a9fe846e08 100644
|
||||
index 5df2d8c3fa..03a07d46cd 100644
|
||||
--- a/dlls/ntdll/file.c
|
||||
+++ b/dlls/ntdll/file.c
|
||||
@@ -1665,6 +1665,7 @@ NTSTATUS FILE_CreateSymlink(HANDLE handle, REPARSE_DATA_BUFFER *buffer)
|
||||
@ -21,7 +21,7 @@ index 8795eb6e9d..a9fe846e08 100644
|
||||
NTSTATUS status;
|
||||
struct stat st;
|
||||
WCHAR *dest;
|
||||
@@ -1755,7 +1756,8 @@ NTSTATUS FILE_CreateSymlink(HANDLE handle, REPARSE_DATA_BUFFER *buffer)
|
||||
@@ -1757,7 +1758,8 @@ NTSTATUS FILE_CreateSymlink(HANDLE handle, REPARSE_DATA_BUFFER *buffer)
|
||||
status = FILE_GetNtStatus();
|
||||
goto cleanup;
|
||||
}
|
||||
@ -31,7 +31,7 @@ index 8795eb6e9d..a9fe846e08 100644
|
||||
strcat( magic_dest, "." );
|
||||
strcat( magic_dest, "/" );
|
||||
}
|
||||
@@ -1781,8 +1783,11 @@ NTSTATUS FILE_CreateSymlink(HANDLE handle, REPARSE_DATA_BUFFER *buffer)
|
||||
@@ -1784,8 +1786,11 @@ NTSTATUS FILE_CreateSymlink(HANDLE handle, REPARSE_DATA_BUFFER *buffer)
|
||||
/* Atomically move the link into position */
|
||||
if (!renameat2( -1, tmplink, -1, unix_src.Buffer, RENAME_EXCHANGE ))
|
||||
{
|
||||
@ -45,7 +45,7 @@ index 8795eb6e9d..a9fe846e08 100644
|
||||
}
|
||||
else if (errno == ENOSYS)
|
||||
{
|
||||
@@ -1989,6 +1994,7 @@ NTSTATUS FILE_RemoveSymlink(HANDLE handle, REPARSE_GUID_DATA_BUFFER *buffer)
|
||||
@@ -1994,6 +1999,7 @@ NTSTATUS FILE_RemoveSymlink(HANDLE handle, REPARSE_GUID_DATA_BUFFER *buffer)
|
||||
BOOL tempdir_created = FALSE;
|
||||
int dest_fd, needs_close;
|
||||
ANSI_STRING unix_name;
|
||||
@ -53,7 +53,7 @@ index 8795eb6e9d..a9fe846e08 100644
|
||||
NTSTATUS status;
|
||||
struct stat st;
|
||||
|
||||
@@ -2000,12 +2006,13 @@ NTSTATUS FILE_RemoveSymlink(HANDLE handle, REPARSE_GUID_DATA_BUFFER *buffer)
|
||||
@@ -2005,12 +2011,13 @@ NTSTATUS FILE_RemoveSymlink(HANDLE handle, REPARSE_GUID_DATA_BUFFER *buffer)
|
||||
|
||||
TRACE("Deleting symlink %s\n", unix_name.Buffer);
|
||||
|
||||
@ -66,9 +66,9 @@ index 8795eb6e9d..a9fe846e08 100644
|
||||
}
|
||||
+ is_dir = S_ISDIR(st.st_mode);
|
||||
strcpy( tmpdir, unix_name.Buffer );
|
||||
dirname( tmpdir) ;
|
||||
strcat( tmpdir, "/.winelink.XXXXXX" );
|
||||
@@ -2017,11 +2024,21 @@ NTSTATUS FILE_RemoveSymlink(HANDLE handle, REPARSE_GUID_DATA_BUFFER *buffer)
|
||||
d = dirname( tmpdir);
|
||||
if (d != tmpdir) strcpy( tmpdir, d );
|
||||
@@ -2023,11 +2030,21 @@ NTSTATUS FILE_RemoveSymlink(HANDLE handle, REPARSE_GUID_DATA_BUFFER *buffer)
|
||||
tempdir_created = TRUE;
|
||||
strcpy( tmpfile, tmpdir );
|
||||
strcat( tmpfile, "/tmpfile" );
|
||||
|
@ -1,4 +1,4 @@
|
||||
From 2ccff55de1a8e43f12fde63870b0d93ec63dd4ab Mon Sep 17 00:00:00 2001
|
||||
From 9c0229cf831240320ef2797dbfd21493d7871088 Mon Sep 17 00:00:00 2001
|
||||
From: "Erich E. Hoover" <erich.e.hoover@gmail.com>
|
||||
Date: Sat, 30 Mar 2019 12:00:51 -0600
|
||||
Subject: ntdll: Correctly report file symbolic links as files.
|
||||
@ -10,7 +10,7 @@ Signed-off-by: Erich E. Hoover <erich.e.hoover@gmail.com>
|
||||
2 files changed, 79 insertions(+), 39 deletions(-)
|
||||
|
||||
diff --git a/dlls/ntdll/file.c b/dlls/ntdll/file.c
|
||||
index a9fe846e08..8ffd79ccbf 100644
|
||||
index 03a07d46cd..8b78306fbf 100644
|
||||
--- a/dlls/ntdll/file.c
|
||||
+++ b/dlls/ntdll/file.c
|
||||
@@ -124,6 +124,9 @@ mode_t FILE_umask = 0;
|
||||
@ -38,7 +38,7 @@ index a9fe846e08..8ffd79ccbf 100644
|
||||
}
|
||||
*attr |= get_file_attributes( st );
|
||||
return ret;
|
||||
@@ -1822,48 +1829,34 @@ cleanup:
|
||||
@@ -1825,48 +1832,34 @@ cleanup:
|
||||
}
|
||||
|
||||
|
||||
@ -102,7 +102,7 @@ index a9fe846e08..8ffd79ccbf 100644
|
||||
p++;
|
||||
}
|
||||
if (*p++ != '/')
|
||||
@@ -1871,7 +1864,7 @@ NTSTATUS FILE_GetSymlink(HANDLE handle, REPARSE_DATA_BUFFER *buffer, ULONG out_s
|
||||
@@ -1874,7 +1867,7 @@ NTSTATUS FILE_GetSymlink(HANDLE handle, REPARSE_DATA_BUFFER *buffer, ULONG out_s
|
||||
status = STATUS_NOT_IMPLEMENTED;
|
||||
goto cleanup;
|
||||
}
|
||||
@ -111,7 +111,7 @@ index a9fe846e08..8ffd79ccbf 100644
|
||||
for (i = 0; i < sizeof(ULONG)*8; i++)
|
||||
{
|
||||
char c = *p++;
|
||||
@@ -1886,21 +1879,68 @@ NTSTATUS FILE_GetSymlink(HANDLE handle, REPARSE_DATA_BUFFER *buffer, ULONG out_s
|
||||
@@ -1889,21 +1882,68 @@ NTSTATUS FILE_GetSymlink(HANDLE handle, REPARSE_DATA_BUFFER *buffer, ULONG out_s
|
||||
status = STATUS_NOT_IMPLEMENTED;
|
||||
goto cleanup;
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
From 447ceb46b34604f8c72014b8516851e81850b4de Mon Sep 17 00:00:00 2001
|
||||
From e34db8f28e43091a02cccb2eb590f9beda9da059 Mon Sep 17 00:00:00 2001
|
||||
From: "Erich E. Hoover" <erich.e.hoover@gmail.com>
|
||||
Date: Sat, 30 Mar 2019 12:01:50 -0600
|
||||
Subject: kernel32: Set error code when attempting to delete file symlinks as
|
||||
@ -11,7 +11,7 @@ Signed-off-by: Erich E. Hoover <erich.e.hoover@gmail.com>
|
||||
2 files changed, 7 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/dlls/kernel32/path.c b/dlls/kernel32/path.c
|
||||
index 6369225b3e..832e77bfc0 100644
|
||||
index 76a9512c77..f15b6dd68b 100644
|
||||
--- a/dlls/kernel32/path.c
|
||||
+++ b/dlls/kernel32/path.c
|
||||
@@ -1738,7 +1738,10 @@ BOOL WINAPI RemoveDirectoryW( LPCWSTR path )
|
||||
|
@ -1,4 +1,4 @@
|
||||
From d6f127ccdc6bb2a2c74551bfae669a6eee55c312 Mon Sep 17 00:00:00 2001
|
||||
From 245f8c8ad1d014bbf726020fd4c37c99e8bcafea Mon Sep 17 00:00:00 2001
|
||||
From: "Erich E. Hoover" <erich.e.hoover@gmail.com>
|
||||
Date: Sat, 30 Mar 2019 13:41:07 -0600
|
||||
Subject: server: Properly handle file symlink deletion.
|
||||
|
@ -1,4 +1,4 @@
|
||||
From a4a9f0c9c9b4453a46d5060d0ec32b8f49cf19a1 Mon Sep 17 00:00:00 2001
|
||||
From 99b54adfcc2740af27224957748f94a0e84b47c3 Mon Sep 17 00:00:00 2001
|
||||
From: "Erich E. Hoover" <erich.e.hoover@gmail.com>
|
||||
Date: Wed, 13 Mar 2019 16:02:05 -0600
|
||||
Subject: kernel32: Implement CreateSymbolicLink[A|W] with ntdll reparse
|
||||
@ -11,7 +11,7 @@ Signed-off-by: Erich E. Hoover <erich.e.hoover@gmail.com>
|
||||
2 files changed, 214 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/dlls/kernel32/path.c b/dlls/kernel32/path.c
|
||||
index 832e77bfc0..9fef494cfa 100644
|
||||
index f15b6dd68b..d96471e4c6 100644
|
||||
--- a/dlls/kernel32/path.c
|
||||
+++ b/dlls/kernel32/path.c
|
||||
@@ -34,6 +34,8 @@
|
||||
@ -23,7 +23,7 @@ index 832e77bfc0..9fef494cfa 100644
|
||||
|
||||
#include "kernel_private.h"
|
||||
#include "wine/unicode.h"
|
||||
@@ -2088,8 +2090,106 @@ WCHAR * CDECL wine_get_dos_file_name( LPCSTR str )
|
||||
@@ -2087,8 +2089,106 @@ WCHAR * CDECL wine_get_dos_file_name( LPCSTR str )
|
||||
*/
|
||||
BOOLEAN WINAPI CreateSymbolicLinkW(LPCWSTR link, LPCWSTR target, DWORD flags)
|
||||
{
|
||||
@ -132,7 +132,7 @@ index 832e77bfc0..9fef494cfa 100644
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
@@ -2097,8 +2197,24 @@ BOOLEAN WINAPI CreateSymbolicLinkW(LPCWSTR link, LPCWSTR target, DWORD flags)
|
||||
@@ -2096,8 +2196,24 @@ BOOLEAN WINAPI CreateSymbolicLinkW(LPCWSTR link, LPCWSTR target, DWORD flags)
|
||||
*/
|
||||
BOOLEAN WINAPI CreateSymbolicLinkA(LPCSTR link, LPCSTR target, DWORD flags)
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user