mirror of
https://gitlab.winehq.org/wine/wine-staging.git
synced 2025-01-28 22:04:43 -08:00
ntdll-FileDispositionInformation: Clean up first few patches.
This commit is contained in:
parent
eefdde33ff
commit
dfe5839903
@ -1,17 +1,16 @@
|
||||
From 65b27926c9e006f41496c42886d55956047d4b69 Mon Sep 17 00:00:00 2001
|
||||
From: Dmitry Timoshkov <dmitry@baikal.ru>
|
||||
From 2009dee9faca0fb2ac2b1422a62445a523c4fe56 Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Lackner <sebastian@fds-team.de>
|
||||
Date: Thu, 7 Aug 2014 20:32:19 -0600
|
||||
Subject: server: Add support for setting file disposition information.
|
||||
|
||||
Based on a patch by Dmitry Timoshkov.
|
||||
---
|
||||
dlls/kernel32/tests/file.c | 1 -
|
||||
dlls/ntdll/file.c | 16 ++++++++++++++++
|
||||
dlls/ntdll/tests/file.c | 13 ++-----------
|
||||
server/fd.c | 30 ++++++++++++++++++++++++++++++
|
||||
server/file.c | 23 +++++++++++++++++++++++
|
||||
server/file.h | 1 +
|
||||
server/protocol.def | 6 ++++++
|
||||
7 files changed, 78 insertions(+), 12 deletions(-)
|
||||
server/fd.c | 44 ++++++++++++++++++++++++++++++++++++++++++++
|
||||
server/protocol.def | 7 +++++++
|
||||
5 files changed, 69 insertions(+), 12 deletions(-)
|
||||
|
||||
diff --git a/dlls/kernel32/tests/file.c b/dlls/kernel32/tests/file.c
|
||||
index 53d225c..dd64c91 100644
|
||||
@ -26,7 +25,7 @@ index 53d225c..dd64c91 100644
|
||||
|
||||
CloseHandle(file);
|
||||
diff --git a/dlls/ntdll/file.c b/dlls/ntdll/file.c
|
||||
index d081750..86063b6 100644
|
||||
index d081750..314c233 100644
|
||||
--- a/dlls/ntdll/file.c
|
||||
+++ b/dlls/ntdll/file.c
|
||||
@@ -2765,6 +2765,22 @@ NTSTATUS WINAPI NtSetInformationFile(HANDLE handle, PIO_STATUS_BLOCK io,
|
||||
@ -38,11 +37,11 @@ index d081750..86063b6 100644
|
||||
+ {
|
||||
+ FILE_DISPOSITION_INFORMATION *info = ptr;
|
||||
+
|
||||
+ SERVER_START_REQ( set_file_info )
|
||||
+ SERVER_START_REQ( set_fd_info )
|
||||
+ {
|
||||
+ req->handle = wine_server_obj_handle( handle );
|
||||
+ req->unlink = info->DoDeleteFile;
|
||||
+ io->u.Status = wine_server_call( req );
|
||||
+ io->u.Status = wine_server_call( req );
|
||||
+ }
|
||||
+ SERVER_END_REQ;
|
||||
+ } else
|
||||
@ -53,7 +52,7 @@ index d081750..86063b6 100644
|
||||
FIXME("Unsupported class (%d)\n", class);
|
||||
io->u.Status = STATUS_NOT_IMPLEMENTED;
|
||||
diff --git a/dlls/ntdll/tests/file.c b/dlls/ntdll/tests/file.c
|
||||
index fed1207..9cb3bd2 100644
|
||||
index 86a4516..57ae15c 100644
|
||||
--- a/dlls/ntdll/tests/file.c
|
||||
+++ b/dlls/ntdll/tests/file.c
|
||||
@@ -1473,7 +1473,6 @@ static void test_file_disposition_information(void)
|
||||
@ -149,21 +148,27 @@ index fed1207..9cb3bd2 100644
|
||||
RemoveDirectoryA( buffer );
|
||||
}
|
||||
diff --git a/server/fd.c b/server/fd.c
|
||||
index 7c2d717..442e639 100644
|
||||
index 6b95d6c..f607261 100644
|
||||
--- a/server/fd.c
|
||||
+++ b/server/fd.c
|
||||
@@ -1942,6 +1942,36 @@ unsigned int get_fd_options( struct fd *fd )
|
||||
return fd->options;
|
||||
@@ -2214,6 +2214,39 @@ static struct fd *get_handle_fd_obj( struct process *process, obj_handle_t handl
|
||||
return fd;
|
||||
}
|
||||
|
||||
+/* set disposition for the fd */
|
||||
+void set_fd_disposition( struct fd *fd, int unlink )
|
||||
+static void set_fd_disposition( struct fd *fd, int unlink )
|
||||
+{
|
||||
+ struct stat st;
|
||||
+
|
||||
+ if (!fd->inode)
|
||||
+ {
|
||||
+ set_error( STATUS_OBJECT_TYPE_MISMATCH );
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ if (fd->unix_fd == -1)
|
||||
+ {
|
||||
+ set_error( STATUS_INVALID_HANDLE );
|
||||
+ set_error( fd->no_fd_status );
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
@ -173,82 +178,52 @@ index 7c2d717..442e639 100644
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ /* can't unlink special files */
|
||||
+ if (unlink && !S_ISDIR(st.st_mode) && !S_ISREG(st.st_mode))
|
||||
+ {
|
||||
+ /* can't unlink special files */
|
||||
+ set_error( STATUS_INVALID_PARAMETER );
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ if (unlink)
|
||||
+ fd->closed->unlink = 1;
|
||||
+ else if (!(fd->options & FILE_DELETE_ON_CLOSE))
|
||||
+ fd->closed->unlink = 0;
|
||||
+ fd->closed->unlink = unlink || (fd->options & FILE_DELETE_ON_CLOSE);
|
||||
+}
|
||||
+
|
||||
/* retrieve the unix fd for an object */
|
||||
int get_unix_fd( struct fd *fd )
|
||||
struct completion *fd_get_completion( struct fd *fd, apc_param_t *p_key )
|
||||
{
|
||||
diff --git a/server/file.c b/server/file.c
|
||||
index e70304f..098c705 100644
|
||||
--- a/server/file.c
|
||||
+++ b/server/file.c
|
||||
@@ -749,3 +749,26 @@ DECL_HANDLER(unlock_file)
|
||||
release_object( file );
|
||||
*p_key = fd->comp_key;
|
||||
@@ -2409,3 +2442,14 @@ DECL_HANDLER(add_fd_completion)
|
||||
release_object( fd );
|
||||
}
|
||||
}
|
||||
+
|
||||
+/* set file information */
|
||||
+DECL_HANDLER(set_file_info)
|
||||
+/* set fd information */
|
||||
+DECL_HANDLER(set_fd_info)
|
||||
+{
|
||||
+ struct file *file;
|
||||
+
|
||||
+ if ((file = get_file_obj( current->process, req->handle, DELETE )))
|
||||
+ struct fd *fd = get_handle_fd_obj( current->process, req->handle, DELETE );
|
||||
+ if (fd)
|
||||
+ {
|
||||
+ set_fd_disposition( file->fd, req->unlink );
|
||||
+ release_object( file );
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ if (get_error() == STATUS_OBJECT_TYPE_MISMATCH)
|
||||
+ {
|
||||
+ clear_error();
|
||||
+ if ((file = (struct file *)get_dir_obj( current->process, req->handle, DELETE )))
|
||||
+ {
|
||||
+ set_fd_disposition( file->fd, req->unlink );
|
||||
+ release_object( file );
|
||||
+ }
|
||||
+ set_fd_disposition( fd, req->unlink );
|
||||
+ release_object( fd );
|
||||
+ }
|
||||
+}
|
||||
diff --git a/server/file.h b/server/file.h
|
||||
index b5e0ca7..460656f 100644
|
||||
--- a/server/file.h
|
||||
+++ b/server/file.h
|
||||
@@ -70,6 +70,7 @@ extern struct fd *get_fd_object_for_mapping( struct fd *fd, unsigned int access,
|
||||
extern void *get_fd_user( struct fd *fd );
|
||||
extern void set_fd_user( struct fd *fd, const struct fd_ops *ops, struct object *user );
|
||||
extern unsigned int get_fd_options( struct fd *fd );
|
||||
+extern void set_fd_disposition( struct fd *fd, int unlink );
|
||||
extern int get_unix_fd( struct fd *fd );
|
||||
extern int is_same_file_fd( struct fd *fd1, struct fd *fd2 );
|
||||
extern int is_fd_removable( struct fd *fd );
|
||||
diff --git a/server/protocol.def b/server/protocol.def
|
||||
index 9e5e416..d71f5ef 100644
|
||||
index ffee0c0..ea9eb12 100644
|
||||
--- a/server/protocol.def
|
||||
+++ b/server/protocol.def
|
||||
@@ -1200,6 +1200,12 @@ enum server_fd_type
|
||||
@@ -3525,6 +3525,13 @@ enum coords_relative
|
||||
@END
|
||||
|
||||
|
||||
+/* Set file information */
|
||||
+@REQ(set_file_info)
|
||||
+ obj_handle_t handle; /* handle to the file */
|
||||
+/* set fd information */
|
||||
+@REQ(set_fd_info)
|
||||
+ obj_handle_t handle; /* handle to a file or directory */
|
||||
+ int unlink; /* whether to unlink file on close */
|
||||
+@END
|
||||
+
|
||||
/* Create a socket */
|
||||
@REQ(create_socket)
|
||||
unsigned int access; /* wanted access rights */
|
||||
+
|
||||
/* Retrieve layered info for a window */
|
||||
@REQ(get_window_layered_info)
|
||||
user_handle_t handle; /* handle to the window */
|
||||
--
|
||||
2.4.2
|
||||
2.5.0
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
From edb8a6ab85a4c07409a8b12ffd3d5955f32e2952 Mon Sep 17 00:00:00 2001
|
||||
From 3869f9533a5ee475fc7e315f1905334da13b6650 Mon Sep 17 00:00:00 2001
|
||||
From: "Erich E. Hoover" <erich.e.hoover@gmail.com>
|
||||
Date: Thu, 7 Aug 2014 21:14:25 -0600
|
||||
Subject: server: Do not permit FileDispositionInformation to delete a file
|
||||
@ -10,10 +10,10 @@ Subject: server: Do not permit FileDispositionInformation to delete a file
|
||||
2 files changed, 35 insertions(+)
|
||||
|
||||
diff --git a/dlls/ntdll/tests/file.c b/dlls/ntdll/tests/file.c
|
||||
index 874aa4d..1e7edc3 100644
|
||||
index 57ae15c..fe07643 100644
|
||||
--- a/dlls/ntdll/tests/file.c
|
||||
+++ b/dlls/ntdll/tests/file.c
|
||||
@@ -1491,6 +1491,20 @@ static void test_file_disposition_information(void)
|
||||
@@ -1507,6 +1507,20 @@ static void test_file_disposition_information(void)
|
||||
|
||||
/* cannot set disposition on readonly file */
|
||||
GetTempFileNameA( tmp_path, "dis", 0, buffer );
|
||||
@ -34,7 +34,7 @@ index 874aa4d..1e7edc3 100644
|
||||
handle = CreateFileA(buffer, GENERIC_WRITE | DELETE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_READONLY, 0);
|
||||
ok( handle != INVALID_HANDLE_VALUE, "failed to create temp file\n" );
|
||||
fdi.DoDeleteFile = TRUE;
|
||||
@@ -1504,6 +1518,20 @@ static void test_file_disposition_information(void)
|
||||
@@ -1520,6 +1534,20 @@ static void test_file_disposition_information(void)
|
||||
SetFileAttributesA( buffer, FILE_ATTRIBUTE_NORMAL );
|
||||
DeleteFileA( buffer );
|
||||
|
||||
@ -56,23 +56,23 @@ index 874aa4d..1e7edc3 100644
|
||||
GetTempFileNameA( tmp_path, "dis", 0, buffer );
|
||||
handle = CreateFileA(buffer, GENERIC_WRITE | DELETE, 0, NULL, CREATE_ALWAYS, 0, 0);
|
||||
diff --git a/server/fd.c b/server/fd.c
|
||||
index 442e639..d11d98c 100644
|
||||
index f607261..0bac57d 100644
|
||||
--- a/server/fd.c
|
||||
+++ b/server/fd.c
|
||||
@@ -1966,6 +1966,13 @@ void set_fd_disposition( struct fd *fd, int unlink )
|
||||
@@ -2244,6 +2244,13 @@ static void set_fd_disposition( struct fd *fd, int unlink )
|
||||
return;
|
||||
}
|
||||
|
||||
+ /* can't unlink files we don't have permission to access */
|
||||
+ if (unlink && !(st.st_mode & (S_IWUSR | S_IWGRP | S_IWOTH)))
|
||||
+ {
|
||||
+ /* can't unlink files we don't have permission to access */
|
||||
+ set_error( STATUS_CANNOT_DELETE );
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
if (unlink)
|
||||
fd->closed->unlink = 1;
|
||||
else if (!(fd->options & FILE_DELETE_ON_CLOSE))
|
||||
fd->closed->unlink = unlink || (fd->options & FILE_DELETE_ON_CLOSE);
|
||||
}
|
||||
|
||||
--
|
||||
2.4.2
|
||||
2.5.0
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
From a9ec2efaf7e9e8eb0440052176e79f71b615bcc8 Mon Sep 17 00:00:00 2001
|
||||
From 2b11498b6880f1bf7c0675e2df234626b4f8d69e Mon Sep 17 00:00:00 2001
|
||||
From: Qian Hong <qhong@codeweavers.com>
|
||||
Date: Fri, 17 Apr 2015 18:39:59 +0800
|
||||
Subject: server: Do not allow to set disposition on file which has a file
|
||||
@ -10,10 +10,10 @@ Subject: server: Do not allow to set disposition on file which has a file
|
||||
2 files changed, 12 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/dlls/ntdll/tests/file.c b/dlls/ntdll/tests/file.c
|
||||
index 89f70de..b285157 100644
|
||||
index 4bc4925..7165776 100644
|
||||
--- a/dlls/ntdll/tests/file.c
|
||||
+++ b/dlls/ntdll/tests/file.c
|
||||
@@ -1633,7 +1633,6 @@ static void test_file_disposition_information(void)
|
||||
@@ -1649,7 +1649,6 @@ static void test_file_disposition_information(void)
|
||||
ok( mapping != NULL, "failed to create file mapping\n");
|
||||
fdi.DoDeleteFile = TRUE;
|
||||
res = pNtSetInformationFile( handle, &io, &fdi, sizeof fdi, FileDispositionInformation );
|
||||
@ -21,7 +21,7 @@ index 89f70de..b285157 100644
|
||||
ok( res == STATUS_CANNOT_DELETE, "unexpected FileDispositionInformation result (expected STATUS_CANNOT_DELETE, got %x)\n", res );
|
||||
CloseHandle( handle );
|
||||
fileDeleted = GetFileAttributesA( buffer ) == INVALID_FILE_ATTRIBUTES && GetLastError() == ERROR_FILE_NOT_FOUND;
|
||||
@@ -1667,7 +1666,6 @@ static void test_file_disposition_information(void)
|
||||
@@ -1683,7 +1682,6 @@ static void test_file_disposition_information(void)
|
||||
CloseHandle( mapping );
|
||||
fdi.DoDeleteFile = TRUE;
|
||||
res = pNtSetInformationFile( handle, &io, &fdi, sizeof fdi, FileDispositionInformation );
|
||||
@ -30,35 +30,35 @@ index 89f70de..b285157 100644
|
||||
CloseHandle( handle );
|
||||
fileDeleted = GetFileAttributesA( buffer ) == INVALID_FILE_ATTRIBUTES && GetLastError() == ERROR_FILE_NOT_FOUND;
|
||||
diff --git a/server/fd.c b/server/fd.c
|
||||
index d11d98c..553d840 100644
|
||||
index 0bac57d..f93093d 100644
|
||||
--- a/server/fd.c
|
||||
+++ b/server/fd.c
|
||||
@@ -1946,6 +1946,7 @@ unsigned int get_fd_options( struct fd *fd )
|
||||
void set_fd_disposition( struct fd *fd, int unlink )
|
||||
@@ -2218,6 +2218,7 @@ static struct fd *get_handle_fd_obj( struct process *process, obj_handle_t handl
|
||||
static void set_fd_disposition( struct fd *fd, int unlink )
|
||||
{
|
||||
struct stat st;
|
||||
+ struct list *ptr;
|
||||
|
||||
if (fd->unix_fd == -1)
|
||||
if (!fd->inode)
|
||||
{
|
||||
@@ -1973,6 +1974,17 @@ void set_fd_disposition( struct fd *fd, int unlink )
|
||||
@@ -2251,6 +2252,17 @@ static void set_fd_disposition( struct fd *fd, int unlink )
|
||||
return;
|
||||
}
|
||||
|
||||
+ /* can't unlink files which are mapped to memory */
|
||||
+ LIST_FOR_EACH( ptr, &fd->inode->open )
|
||||
+ {
|
||||
+ struct fd *fd_ptr = LIST_ENTRY( ptr, struct fd, inode_entry );
|
||||
+ if (fd_ptr != fd && fd_ptr->access & FILE_MAPPING_ACCESS)
|
||||
+ {
|
||||
+ /* can't unlink files which are mapped to memory */
|
||||
+ set_error( STATUS_CANNOT_DELETE );
|
||||
+ return;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
if (unlink)
|
||||
fd->closed->unlink = 1;
|
||||
else if (!(fd->options & FILE_DELETE_ON_CLOSE))
|
||||
fd->closed->unlink = unlink || (fd->options & FILE_DELETE_ON_CLOSE);
|
||||
}
|
||||
|
||||
--
|
||||
2.4.2
|
||||
2.5.0
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
From 526d905701f6d27f38cce701f36f6280f7c2c6cf Mon Sep 17 00:00:00 2001
|
||||
From 80f50af6703521e5a8ff7a3fa9bbb67abe52a210 Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Lackner <sebastian@fds-team.de>
|
||||
Date: Tue, 2 Jun 2015 01:56:24 +0800
|
||||
Subject: ntdll: Implement FileRenameInformation support.
|
||||
@ -12,7 +12,7 @@ Based on a patch by Qian Hong.
|
||||
4 files changed, 192 insertions(+), 37 deletions(-)
|
||||
|
||||
diff --git a/dlls/ntdll/file.c b/dlls/ntdll/file.c
|
||||
index 86063b6..6aa46f4 100644
|
||||
index 314c233..b865345 100644
|
||||
--- a/dlls/ntdll/file.c
|
||||
+++ b/dlls/ntdll/file.c
|
||||
@@ -2781,6 +2781,48 @@ NTSTATUS WINAPI NtSetInformationFile(HANDLE handle, PIO_STATUS_BLOCK io,
|
||||
@ -65,7 +65,7 @@ index 86063b6..6aa46f4 100644
|
||||
FIXME("Unsupported class (%d)\n", class);
|
||||
io->u.Status = STATUS_NOT_IMPLEMENTED;
|
||||
diff --git a/dlls/ntdll/tests/file.c b/dlls/ntdll/tests/file.c
|
||||
index a0aae0a..941cc0c 100644
|
||||
index d7be561..31a672d 100644
|
||||
--- a/dlls/ntdll/tests/file.c
|
||||
+++ b/dlls/ntdll/tests/file.c
|
||||
@@ -1483,19 +1483,19 @@ static void test_file_rename_information(void)
|
||||
@ -306,11 +306,11 @@ index a0aae0a..941cc0c 100644
|
||||
pfni = HeapAlloc( GetProcessHeap(), 0, sizeof(FILE_NAME_INFORMATION) + MAX_PATH * sizeof(WCHAR) );
|
||||
res = pNtQueryInformationFile( handle, &io, pfni, sizeof(FILE_NAME_INFORMATION) + MAX_PATH * sizeof(WCHAR), FileNameInformation );
|
||||
diff --git a/server/fd.c b/server/fd.c
|
||||
index 553d840..d4e5321 100644
|
||||
index f93093d..24e845c 100644
|
||||
--- a/server/fd.c
|
||||
+++ b/server/fd.c
|
||||
@@ -1991,6 +1991,80 @@ void set_fd_disposition( struct fd *fd, int unlink )
|
||||
fd->closed->unlink = 0;
|
||||
@@ -2266,6 +2266,80 @@ static void set_fd_disposition( struct fd *fd, int unlink )
|
||||
fd->closed->unlink = unlink || (fd->options & FILE_DELETE_ON_CLOSE);
|
||||
}
|
||||
|
||||
+/* rename a file */
|
||||
@ -320,7 +320,7 @@ index 553d840..d4e5321 100644
|
||||
+ struct stat st;
|
||||
+ char *name;
|
||||
+
|
||||
+ if (!fd->unix_name)
|
||||
+ if (!fd->inode || !fd->unix_name)
|
||||
+ {
|
||||
+ set_error( STATUS_OBJECT_TYPE_MISMATCH );
|
||||
+ return;
|
||||
@ -387,10 +387,10 @@ index 553d840..d4e5321 100644
|
||||
+ free( name );
|
||||
+}
|
||||
+
|
||||
/* retrieve the unix fd for an object */
|
||||
int get_unix_fd( struct fd *fd )
|
||||
struct completion *fd_get_completion( struct fd *fd, apc_param_t *p_key )
|
||||
{
|
||||
@@ -2484,3 +2558,27 @@ DECL_HANDLER(add_fd_completion)
|
||||
*p_key = fd->comp_key;
|
||||
@@ -2472,3 +2546,27 @@ DECL_HANDLER(set_fd_info)
|
||||
release_object( fd );
|
||||
}
|
||||
}
|
||||
@ -419,13 +419,13 @@ index 553d840..d4e5321 100644
|
||||
+ if (root_fd) release_object( root_fd );
|
||||
+}
|
||||
diff --git a/server/protocol.def b/server/protocol.def
|
||||
index 800f73c..431d2b9 100644
|
||||
index ea9eb12..3f1cef5 100644
|
||||
--- a/server/protocol.def
|
||||
+++ b/server/protocol.def
|
||||
@@ -1206,6 +1206,15 @@ enum server_fd_type
|
||||
int unlink; /* whether to unlink file on close */
|
||||
@@ -1233,6 +1233,15 @@ enum server_fd_type
|
||||
@END
|
||||
|
||||
|
||||
+
|
||||
+/* Rename a file */
|
||||
+@REQ(rename_file)
|
||||
@ -439,5 +439,5 @@ index 800f73c..431d2b9 100644
|
||||
@REQ(create_socket)
|
||||
unsigned int access; /* wanted access rights */
|
||||
--
|
||||
2.4.2
|
||||
2.5.0
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
From 0777c89085c995e4160750c12bdd0afd68eecafb Mon Sep 17 00:00:00 2001
|
||||
From 5555934a5d007286895f7ad2c7523899be9e3c9b Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Lackner <sebastian@fds-team.de>
|
||||
Date: Wed, 3 Jun 2015 17:04:23 +0200
|
||||
Subject: server: Implement support for FileLinkInformation class in
|
||||
@ -12,7 +12,7 @@ Subject: server: Implement support for FileLinkInformation class in
|
||||
4 files changed, 105 insertions(+), 43 deletions(-)
|
||||
|
||||
diff --git a/dlls/ntdll/file.c b/dlls/ntdll/file.c
|
||||
index 6aa46f4..f5f2458 100644
|
||||
index b865345..049b323 100644
|
||||
--- a/dlls/ntdll/file.c
|
||||
+++ b/dlls/ntdll/file.c
|
||||
@@ -2813,6 +2813,50 @@ NTSTATUS WINAPI NtSetInformationFile(HANDLE handle, PIO_STATUS_BLOCK io,
|
||||
@ -67,7 +67,7 @@ index 6aa46f4..f5f2458 100644
|
||||
io->u.Status = wine_server_call( req );
|
||||
}
|
||||
diff --git a/dlls/ntdll/tests/file.c b/dlls/ntdll/tests/file.c
|
||||
index c985a03..92613d5 100644
|
||||
index 5da5d0d..27ea58c 100644
|
||||
--- a/dlls/ntdll/tests/file.c
|
||||
+++ b/dlls/ntdll/tests/file.c
|
||||
@@ -2183,12 +2183,12 @@ static void test_file_link_information(void)
|
||||
@ -264,11 +264,11 @@ index c985a03..92613d5 100644
|
||||
pfni = HeapAlloc( GetProcessHeap(), 0, sizeof(FILE_NAME_INFORMATION) + MAX_PATH * sizeof(WCHAR) );
|
||||
res = pNtQueryInformationFile( handle, &io, pfni, sizeof(FILE_NAME_INFORMATION) + MAX_PATH * sizeof(WCHAR), FileNameInformation );
|
||||
diff --git a/server/fd.c b/server/fd.c
|
||||
index 4b0bf47..db299dd 100644
|
||||
index 757a06c..8c3c97e 100644
|
||||
--- a/server/fd.c
|
||||
+++ b/server/fd.c
|
||||
@@ -1999,8 +1999,8 @@ void set_fd_disposition( struct fd *fd, int unlink )
|
||||
fd->closed->unlink = 0;
|
||||
@@ -2274,8 +2274,8 @@ static void set_fd_disposition( struct fd *fd, int unlink )
|
||||
fd->closed->unlink = unlink || (fd->options & FILE_DELETE_ON_CLOSE);
|
||||
}
|
||||
|
||||
-/* rename a file */
|
||||
@ -278,7 +278,7 @@ index 4b0bf47..db299dd 100644
|
||||
{
|
||||
struct inode *inode;
|
||||
struct stat st;
|
||||
@@ -2027,8 +2027,16 @@ static void rename_fd( struct fd *fd, struct fd *root, const char *nameptr, data
|
||||
@@ -2302,8 +2302,16 @@ static void rename_fd( struct fd *fd, struct fd *root, const char *nameptr, data
|
||||
name = combined_name;
|
||||
}
|
||||
|
||||
@ -296,7 +296,7 @@ index 4b0bf47..db299dd 100644
|
||||
|
||||
if (!S_ISREG( st.st_mode ))
|
||||
{
|
||||
@@ -2049,25 +2057,34 @@ static void rename_fd( struct fd *fd, struct fd *root, const char *nameptr, data
|
||||
@@ -2324,25 +2332,34 @@ static void rename_fd( struct fd *fd, struct fd *root, const char *nameptr, data
|
||||
}
|
||||
}
|
||||
|
||||
@ -341,7 +341,7 @@ index 4b0bf47..db299dd 100644
|
||||
|
||||
failed:
|
||||
free( name );
|
||||
@@ -2567,7 +2584,7 @@ DECL_HANDLER(add_fd_completion)
|
||||
@@ -2555,7 +2572,7 @@ DECL_HANDLER(set_fd_info)
|
||||
}
|
||||
}
|
||||
|
||||
@ -350,7 +350,7 @@ index 4b0bf47..db299dd 100644
|
||||
DECL_HANDLER(rename_file)
|
||||
{
|
||||
struct fd *root_fd = NULL;
|
||||
@@ -2584,7 +2601,7 @@ DECL_HANDLER(rename_file)
|
||||
@@ -2572,7 +2589,7 @@ DECL_HANDLER(rename_file)
|
||||
|
||||
if ((fd = get_handle_fd_obj( current->process, req->handle, 0 )))
|
||||
{
|
||||
@ -360,11 +360,11 @@ index 4b0bf47..db299dd 100644
|
||||
}
|
||||
|
||||
diff --git a/server/protocol.def b/server/protocol.def
|
||||
index 431d2b9..c2c4221 100644
|
||||
index 3f1cef5..1c868c3 100644
|
||||
--- a/server/protocol.def
|
||||
+++ b/server/protocol.def
|
||||
@@ -1207,10 +1207,11 @@ enum server_fd_type
|
||||
@END
|
||||
@@ -1234,10 +1234,11 @@ enum server_fd_type
|
||||
|
||||
|
||||
|
||||
-/* Rename a file */
|
||||
@ -377,5 +377,5 @@ index 431d2b9..c2c4221 100644
|
||||
@END
|
||||
|
||||
--
|
||||
2.4.2
|
||||
2.5.0
|
||||
|
||||
|
@ -2951,8 +2951,8 @@ fi
|
||||
# | * [#30399] Support for NtSetInformationFile class FileRenameInformation
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * dlls/kernel32/tests/file.c, dlls/ntdll/file.c, dlls/ntdll/tests/file.c, include/winternl.h, server/fd.c, server/file.c,
|
||||
# | server/file.h, server/protocol.def
|
||||
# | * dlls/kernel32/tests/file.c, dlls/ntdll/file.c, dlls/ntdll/tests/file.c, include/winternl.h, server/fd.c,
|
||||
# | server/protocol.def
|
||||
# |
|
||||
if test "$enable_ntdll_FileDispositionInformation" -eq 1; then
|
||||
patch_apply ntdll-FileDispositionInformation/0001-server-Keep-a-pointer-to-parent-s-fd-unix_name-in-th.patch
|
||||
@ -2970,7 +2970,7 @@ if test "$enable_ntdll_FileDispositionInformation" -eq 1; then
|
||||
patch_apply ntdll-FileDispositionInformation/0013-server-Implement-support-for-FileLinkInformation-cla.patch
|
||||
(
|
||||
echo '+ { "Dmitry Timoshkov", "server: Keep a pointer to parent'\''s fd unix_name in the closed_fd structure.", 1 },';
|
||||
echo '+ { "Dmitry Timoshkov", "server: Add support for setting file disposition information.", 1 },';
|
||||
echo '+ { "Sebastian Lackner", "server: Add support for setting file disposition information.", 1 },';
|
||||
echo '+ { "Erich E. Hoover", "server: Do not permit FileDispositionInformation to delete a file without write access.", 1 },';
|
||||
echo '+ { "Qian Hong", "ntdll/tests: Added tests to set disposition on file which is mapped to memory.", 1 },';
|
||||
echo '+ { "Qian Hong", "server: Do not allow to set disposition on file which has a file mapping.", 1 },';
|
||||
|
Loading…
x
Reference in New Issue
Block a user