Remove unneeded free protection patches.

This commit is contained in:
Erich E. Hoover 2014-10-02 10:19:39 -06:00
parent f2f8ea98c5
commit c4b33f044e
26 changed files with 167 additions and 500 deletions

View File

@ -537,7 +537,7 @@ loader-Cmdline_Diagnostics.ok:
# | dlls/ntdll/tests/file.c, include/wine/port.h, libs/port/Makefile.in, libs/port/xattr.c
# |
.INTERMEDIATE: ntdll-DOS_Attributes.ok
ntdll-DOS_Attributes.ok: ntdll-Fix_Free.ok
ntdll-DOS_Attributes.ok:
$(call APPLY_FILE,ntdll-DOS_Attributes/0001-ntdll-Unify-retrieving-the-attributes-of-a-file.patch)
$(call APPLY_FILE,ntdll-DOS_Attributes/0002-ntdll-Implement-retrieving-DOS-attributes-in-NtQuery.patch)
$(call APPLY_FILE,ntdll-DOS_Attributes/0003-ntdll-Implement-retrieving-DOS-attributes-in-NtQuery.patch)
@ -644,21 +644,11 @@ ntdll-Fix_Alignment.ok:
# | * Fix unintentional leaks with ntdll internals [rev 2, by Erich E. Hoover]
# |
# | Modified files:
# | * dlls/kernel32/path.c, dlls/kernel32/volume.c, dlls/ntdll/directory.c, dlls/ntdll/file.c, dlls/ntdll/loader.c
# | * dlls/kernel32/path.c
# |
.INTERMEDIATE: ntdll-Fix_Free.ok
ntdll-Fix_Free.ok:
$(call APPLY_FILE,ntdll-Fix_Free/0001-ntdll-Make-nt_to_unix_file_name_attr-return-always-s.patch)
$(call APPLY_FILE,ntdll-Fix_Free/0002-ntdll-Make-wine_nt_to_unix_file_name-return-always-s.patch)
$(call APPLY_FILE,ntdll-Fix_Free/0003-ntdll-Make-file_id_to_unix_file_name-return-always-s.patch)
$(call APPLY_FILE,ntdll-Fix_Free/0004-ntdll-Fix-leak-on-STATUS_NO_SUCH_FILE-in-NtQueryFull.patch)
$(call APPLY_FILE,ntdll-Fix_Free/0005-ntdll-Fix-leak-on-STATUS_NO_SUCH_FILE-in-NtQueryAttr.patch)
$(call APPLY_FILE,ntdll-Fix_Free/0006-ntdll-Fix-unlikely-leak-on-STATUS_NO_SUCH_FILE-in-in.patch)
$(call APPLY_FILE,ntdll-Fix_Free/0007-ntdll-Fix-leak-on-STATUS_NO_SUCH_FILE-in-load_builti.patch)
$(call APPLY_FILE,ntdll-Fix_Free/0008-ntdll-Fix-leak-on-STATUS_NO_SUCH_FILE-for-certain-di.patch)
$(call APPLY_FILE,ntdll-Fix_Free/0009-kernel32-Fix-leak-on-STATUS_NO_SUCH_FILE-in-RemoveDi.patch)
$(call APPLY_FILE,ntdll-Fix_Free/0010-kernel32-Fix-leak-on-STATUS_NO_SUCH_FILE-in-QueryDos.patch)
$(call APPLY_FILE,ntdll-Fix_Free/0011-kernel32-Fix-leaking-directory-handle-in-RemoveDirec.patch)
$(call APPLY_FILE,ntdll-Fix_Free/0001-kernel32-Fix-leaking-directory-handle-in-RemoveDirec.patch)
@( \
echo '+ { "ntdll-Fix_Free", "Erich E. Hoover", "Fix unintentional leaks with ntdll internals [rev 2]" },'; \
) > ntdll-Fix_Free.ok

View File

@ -1,4 +1,4 @@
From c7e981011339b8a665f0164fabdeb8603b247f2f Mon Sep 17 00:00:00 2001
From 4cb2a0572c67b968247d66e503407b3cf327b4ff Mon Sep 17 00:00:00 2001
From: "Erich E. Hoover" <erich.e.hoover@gmail.com>
Date: Tue, 19 Aug 2014 20:31:00 -0600
Subject: ntdll: Unify retrieving the attributes of a file.
@ -10,10 +10,10 @@ Subject: ntdll: Unify retrieving the attributes of a file.
3 files changed, 83 insertions(+), 40 deletions(-)
diff --git a/dlls/ntdll/directory.c b/dlls/ntdll/directory.c
index 4fb89e3..8871700 100644
index 9b5852a..9b10385 100644
--- a/dlls/ntdll/directory.c
+++ b/dlls/ntdll/directory.c
@@ -1380,7 +1380,7 @@ static union file_directory_info *append_entry( void *info_ptr, IO_STATUS_BLOCK
@@ -1381,7 +1381,7 @@ static union file_directory_info *append_entry( void *info_ptr, IO_STATUS_BLOCK
WCHAR short_nameW[12];
WCHAR *filename;
UNICODE_STRING str;
@ -22,7 +22,7 @@ index 4fb89e3..8871700 100644
io->u.Status = STATUS_SUCCESS;
long_len = ntdll_umbstowcs( 0, long_name, strlen(long_name), long_nameW, MAX_DIR_ENTRY_LEN );
@@ -1417,12 +1417,7 @@ static union file_directory_info *append_entry( void *info_ptr, IO_STATUS_BLOCK
@@ -1418,12 +1418,7 @@ static union file_directory_info *append_entry( void *info_ptr, IO_STATUS_BLOCK
if (!match_filename( &str, mask )) return NULL;
}
@ -36,7 +36,7 @@ index 4fb89e3..8871700 100644
if (is_ignored_file( &st ))
{
TRACE( "ignoring file %s\n", long_name );
@@ -1440,10 +1435,9 @@ static union file_directory_info *append_entry( void *info_ptr, IO_STATUS_BLOCK
@@ -1441,10 +1436,9 @@ static union file_directory_info *append_entry( void *info_ptr, IO_STATUS_BLOCK
info = (union file_directory_info *)((char *)info_ptr + io->Information);
if (st.st_dev != curdir.dev) st.st_ino = 0; /* ignore inode if on a different device */
/* all the structures start with a FileDirectoryInformation layout */
@ -49,7 +49,7 @@ index 4fb89e3..8871700 100644
switch (class)
{
diff --git a/dlls/ntdll/file.c b/dlls/ntdll/file.c
index 218e112..7dde57d 100644
index 92d9829..53cce85 100644
--- a/dlls/ntdll/file.c
+++ b/dlls/ntdll/file.c
@@ -103,6 +103,55 @@ mode_t FILE_umask = 0;
@ -108,7 +108,7 @@ index 218e112..7dde57d 100644
/**************************************************************************
* FILE_CreateFile (internal)
* Open a file.
@@ -1776,8 +1825,9 @@ static inline void get_file_times( const struct stat *st, LARGE_INTEGER *mtime,
@@ -1774,8 +1823,9 @@ static inline void get_file_times( const struct stat *st, LARGE_INTEGER *mtime,
#endif
}
@ -120,7 +120,7 @@ index 218e112..7dde57d 100644
{
switch (class)
{
@@ -1787,10 +1837,7 @@ NTSTATUS fill_stat_info( const struct stat *st, void *ptr, FILE_INFORMATION_CLAS
@@ -1785,10 +1835,7 @@ NTSTATUS fill_stat_info( const struct stat *st, void *ptr, FILE_INFORMATION_CLAS
get_file_times( st, &info->LastWriteTime, &info->ChangeTime,
&info->LastAccessTime, &info->CreationTime );
@ -132,7 +132,7 @@ index 218e112..7dde57d 100644
}
break;
case FileStandardInformation:
@@ -1826,9 +1873,9 @@ NTSTATUS fill_stat_info( const struct stat *st, void *ptr, FILE_INFORMATION_CLAS
@@ -1824,9 +1871,9 @@ NTSTATUS fill_stat_info( const struct stat *st, void *ptr, FILE_INFORMATION_CLAS
case FileAllInformation:
{
FILE_ALL_INFORMATION *info = ptr;
@ -145,7 +145,7 @@ index 218e112..7dde57d 100644
}
break;
/* all directory structures start with the FileDirectoryInformation layout */
@@ -1844,30 +1891,27 @@ NTSTATUS fill_stat_info( const struct stat *st, void *ptr, FILE_INFORMATION_CLAS
@@ -1842,30 +1889,27 @@ NTSTATUS fill_stat_info( const struct stat *st, void *ptr, FILE_INFORMATION_CLAS
{
info->AllocationSize.QuadPart = 0;
info->EndOfFile.QuadPart = 0;
@ -179,7 +179,7 @@ index 218e112..7dde57d 100644
}
break;
@@ -2019,6 +2063,7 @@ NTSTATUS WINAPI NtQueryInformationFile( HANDLE hFile, PIO_STATUS_BLOCK io,
@@ -2017,6 +2061,7 @@ NTSTATUS WINAPI NtQueryInformationFile( HANDLE hFile, PIO_STATUS_BLOCK io,
struct stat st;
int fd, needs_close = FALSE;
@ -187,7 +187,7 @@ index 218e112..7dde57d 100644
TRACE("(%p,%p,%p,0x%08x,0x%08x)\n", hFile, io, ptr, len, class);
@@ -2043,21 +2088,21 @@ NTSTATUS WINAPI NtQueryInformationFile( HANDLE hFile, PIO_STATUS_BLOCK io,
@@ -2041,21 +2086,21 @@ NTSTATUS WINAPI NtQueryInformationFile( HANDLE hFile, PIO_STATUS_BLOCK io,
switch (class)
{
case FileBasicInformation:
@ -213,7 +213,7 @@ index 218e112..7dde57d 100644
info->DeletePending = FALSE; /* FIXME */
}
}
@@ -2071,8 +2116,8 @@ NTSTATUS WINAPI NtQueryInformationFile( HANDLE hFile, PIO_STATUS_BLOCK io,
@@ -2069,8 +2114,8 @@ NTSTATUS WINAPI NtQueryInformationFile( HANDLE hFile, PIO_STATUS_BLOCK io,
}
break;
case FileInternalInformation:
@ -224,7 +224,7 @@ index 218e112..7dde57d 100644
break;
case FileEaInformation:
{
@@ -2081,22 +2126,22 @@ NTSTATUS WINAPI NtQueryInformationFile( HANDLE hFile, PIO_STATUS_BLOCK io,
@@ -2079,22 +2124,22 @@ NTSTATUS WINAPI NtQueryInformationFile( HANDLE hFile, PIO_STATUS_BLOCK io,
}
break;
case FileEndOfFileInformation:
@ -251,7 +251,7 @@ index 218e112..7dde57d 100644
info->StandardInformation.DeletePending = FALSE; /* FIXME */
info->EaInformation.EaSize = 0;
info->AccessInformation.AccessFlags = 0; /* FIXME */
@@ -2447,9 +2492,10 @@ NTSTATUS WINAPI NtQueryFullAttributesFile( const OBJECT_ATTRIBUTES *attr,
@@ -2445,9 +2490,10 @@ NTSTATUS WINAPI NtQueryFullAttributesFile( const OBJECT_ATTRIBUTES *attr,
if (!(status = nt_to_unix_file_name_attr( attr, &unix_name, FILE_OPEN )))
{
@ -263,7 +263,7 @@ index 218e112..7dde57d 100644
status = FILE_GetNtStatus();
else if (!S_ISREG(st.st_mode) && !S_ISDIR(st.st_mode))
status = STATUS_INVALID_INFO_CLASS;
@@ -2458,8 +2504,8 @@ NTSTATUS WINAPI NtQueryFullAttributesFile( const OBJECT_ATTRIBUTES *attr,
@@ -2456,8 +2502,8 @@ NTSTATUS WINAPI NtQueryFullAttributesFile( const OBJECT_ATTRIBUTES *attr,
FILE_BASIC_INFORMATION basic;
FILE_STANDARD_INFORMATION std;
@ -274,7 +274,7 @@ index 218e112..7dde57d 100644
info->CreationTime = basic.CreationTime;
info->LastAccessTime = basic.LastAccessTime;
@@ -2489,15 +2535,16 @@ NTSTATUS WINAPI NtQueryAttributesFile( const OBJECT_ATTRIBUTES *attr, FILE_BASIC
@@ -2487,15 +2533,16 @@ NTSTATUS WINAPI NtQueryAttributesFile( const OBJECT_ATTRIBUTES *attr, FILE_BASIC
if (!(status = nt_to_unix_file_name_attr( attr, &unix_name, FILE_OPEN )))
{
@ -294,7 +294,7 @@ index 218e112..7dde57d 100644
info->FileAttributes |= FILE_ATTRIBUTE_HIDDEN;
}
diff --git a/dlls/ntdll/ntdll_misc.h b/dlls/ntdll/ntdll_misc.h
index 4370084..ae59552 100644
index 4370084..e56e78b 100644
--- a/dlls/ntdll/ntdll_misc.h
+++ b/dlls/ntdll/ntdll_misc.h
@@ -148,7 +148,9 @@ extern NTSTATUS COMM_FlushBuffersFile( int fd ) DECLSPEC_HIDDEN;

View File

@ -1,4 +1,4 @@
From dc4a48590aac24744291731e3c2596c762ede86b Mon Sep 17 00:00:00 2001
From 3cf3113adf2a711e7da70462a515e0e11b999bde Mon Sep 17 00:00:00 2001
From: "Erich E. Hoover" <erich.e.hoover@gmail.com>
Date: Tue, 19 Aug 2014 22:10:49 -0600
Subject: ntdll: Implement retrieving DOS attributes in
@ -14,7 +14,7 @@ Subject: ntdll: Implement retrieving DOS attributes in
create mode 100644 libs/port/xattr.c
diff --git a/configure.ac b/configure.ac
index 7de7a87..b77c12f 100644
index f1f721d..c824cdd 100644
--- a/configure.ac
+++ b/configure.ac
@@ -77,2 +77,3 @@ AC_ARG_WITH(tiff, AS_HELP_STRING([--without-tiff],[do not use TIFF]))
@ -40,7 +40,7 @@ index 7de7a87..b77c12f 100644
AC_SUBST(dlldir,"\${libdir}/wine")
diff --git a/dlls/ntdll/file.c b/dlls/ntdll/file.c
index 7dde57d..2b2ef15 100644
index 53cce85..83eaeba 100644
--- a/dlls/ntdll/file.c
+++ b/dlls/ntdll/file.c
@@ -103,6 +103,29 @@ mode_t FILE_umask = 0;

View File

@ -1,4 +1,4 @@
From ddcf9ada831ef6bff1bd57c833dc368784883ece Mon Sep 17 00:00:00 2001
From 7c377afcd99d564b1e59b9d8c1e9abff926cb6b9 Mon Sep 17 00:00:00 2001
From: "Erich E. Hoover" <erich.e.hoover@gmail.com>
Date: Wed, 20 Aug 2014 16:04:34 -0600
Subject: ntdll: Implement retrieving DOS attributes in
@ -11,7 +11,7 @@ Subject: ntdll: Implement retrieving DOS attributes in
3 files changed, 23 insertions(+), 1 deletion(-)
diff --git a/dlls/ntdll/file.c b/dlls/ntdll/file.c
index 2b2ef15..c551457 100644
index 83eaeba..73a2789 100644
--- a/dlls/ntdll/file.c
+++ b/dlls/ntdll/file.c
@@ -161,7 +161,8 @@ int fd_get_file_info( int fd, struct stat *st, ULONG *attr )

View File

@ -1,4 +1,4 @@
From f684563e7e7306bcd773d4202f184cd3c3a7c2a8 Mon Sep 17 00:00:00 2001
From ce0c947ee0beb91b3f686819f489decb2715b1f4 Mon Sep 17 00:00:00 2001
From: "Erich E. Hoover" <erich.e.hoover@gmail.com>
Date: Wed, 20 Aug 2014 00:08:52 -0600
Subject: ntdll: Implement storing DOS attributes in NtSetInformationFile.
@ -11,7 +11,7 @@ Subject: ntdll: Implement storing DOS attributes in NtSetInformationFile.
4 files changed, 70 insertions(+), 24 deletions(-)
diff --git a/dlls/ntdll/file.c b/dlls/ntdll/file.c
index c551457..fd21c66 100644
index 73a2789..4619058 100644
--- a/dlls/ntdll/file.c
+++ b/dlls/ntdll/file.c
@@ -158,6 +158,38 @@ int fd_get_file_info( int fd, struct stat *st, ULONG *attr )
@ -53,7 +53,7 @@ index c551457..fd21c66 100644
/* get the stat info and file attributes for a file (by name) */
int get_file_info( const char *path, struct stat *st, ULONG *attr )
{
@@ -2335,7 +2367,6 @@ NTSTATUS WINAPI NtSetInformationFile(HANDLE handle, PIO_STATUS_BLOCK io,
@@ -2333,7 +2365,6 @@ NTSTATUS WINAPI NtSetInformationFile(HANDLE handle, PIO_STATUS_BLOCK io,
case FileBasicInformation:
if (len >= sizeof(FILE_BASIC_INFORMATION))
{
@ -61,7 +61,7 @@ index c551457..fd21c66 100644
const FILE_BASIC_INFORMATION *info = ptr;
if ((io->u.Status = server_get_unix_fd( handle, 0, &fd, &needs_close, NULL, NULL )))
@@ -2345,25 +2376,7 @@ NTSTATUS WINAPI NtSetInformationFile(HANDLE handle, PIO_STATUS_BLOCK io,
@@ -2343,25 +2374,7 @@ NTSTATUS WINAPI NtSetInformationFile(HANDLE handle, PIO_STATUS_BLOCK io,
io->u.Status = set_file_times( fd, &info->LastWriteTime, &info->LastAccessTime );
if (io->u.Status == STATUS_SUCCESS && info->FileAttributes)

View File

@ -1,17 +1,17 @@
From 61ebf9e4c09c85daa1085521facffaf394dd8db2 Mon Sep 17 00:00:00 2001
From 4452b09a5a97994ff9e8d8acc85c55d932db50e2 Mon Sep 17 00:00:00 2001
From: "Erich E. Hoover" <erich.e.hoover@gmail.com>
Date: Wed, 20 Aug 2014 15:28:00 -0600
Subject: ntdll: Implement storing DOS attributes in NtCreateFile.
---
dlls/ntdll/file.c | 22 +++++++++++++++++++++-
dlls/ntdll/tests/directory.c | 22 ++++++++--------------
dlls/ntdll/file.c | 79 ++++++++++++++++++++++++++----------------
dlls/ntdll/tests/directory.c | 22 +++++-------
include/wine/port.h | 2 ++
libs/port/xattr.c | 31 +++++++++++++++++++++++++++++++
4 files changed, 62 insertions(+), 15 deletions(-)
libs/port/xattr.c | 31 +++++++++++++++++
4 files changed, 91 insertions(+), 43 deletions(-)
diff --git a/dlls/ntdll/file.c b/dlls/ntdll/file.c
index fd21c66..f549552 100644
index 4619058..7582ff1 100644
--- a/dlls/ntdll/file.c
+++ b/dlls/ntdll/file.c
@@ -217,6 +217,21 @@ int get_file_info( const char *path, struct stat *st, ULONG *attr )
@ -36,15 +36,83 @@ index fd21c66..f549552 100644
/**************************************************************************
* FILE_CreateFile (internal)
* Open a file.
@@ -305,7 +320,6 @@ static NTSTATUS FILE_CreateFile( PHANDLE handle, ACCESS_MASK access, POBJECT_ATT
@@ -228,6 +243,8 @@ static NTSTATUS FILE_CreateFile( PHANDLE handle, ACCESS_MASK access, POBJECT_ATT
ULONG attributes, ULONG sharing, ULONG disposition,
ULONG options, PVOID ea_buffer, ULONG ea_length )
{
+ struct object_attributes objattr;
+ struct security_descriptor *sd;
ANSI_STRING unix_name;
BOOL created = FALSE;
@@ -271,39 +288,37 @@ static NTSTATUS FILE_CreateFile( PHANDLE handle, ACCESS_MASK access, POBJECT_ATT
io->u.Status = STATUS_SUCCESS;
}
SERVER_END_REQ;
NTDLL_free_struct_sd( sd );
- RtlFreeAnsiString( &unix_name );
- if (io->u.Status == STATUS_SUCCESS)
+ if (io->u.Status != STATUS_SUCCESS)
{
- struct security_descriptor *sd;
- struct object_attributes objattr;
-
- objattr.rootdir = wine_server_obj_handle( attr->RootDirectory );
- objattr.name_len = 0;
- io->u.Status = NTDLL_create_struct_sd( attr->SecurityDescriptor, &sd, &objattr.sd_len );
- if (io->u.Status != STATUS_SUCCESS)
- {
- RtlFreeAnsiString( &unix_name );
- return io->u.Status;
- }
+ WARN("%s not found (%x)\n", debugstr_us(attr->ObjectName), io->u.Status );
+ return io->u.Status;
+ }
- SERVER_START_REQ( create_file )
- {
- req->access = access;
- req->attributes = attr->Attributes;
- req->sharing = sharing;
- req->create = disposition;
- req->options = options;
- req->attrs = attributes;
- wine_server_add_data( req, &objattr, sizeof(objattr) );
- if (objattr.sd_len) wine_server_add_data( req, sd, objattr.sd_len );
- wine_server_add_data( req, unix_name.Buffer, unix_name.Length );
- io->u.Status = wine_server_call( req );
- *handle = wine_server_ptr_handle( reply->handle );
- }
- SERVER_END_REQ;
- NTDLL_free_struct_sd( sd );
+ objattr.rootdir = wine_server_obj_handle( attr->RootDirectory );
+ objattr.name_len = 0;
+ io->u.Status = NTDLL_create_struct_sd( attr->SecurityDescriptor, &sd, &objattr.sd_len );
+ if (io->u.Status != STATUS_SUCCESS)
+ {
RtlFreeAnsiString( &unix_name );
+ return io->u.Status;
}
- else WARN("%s not found (%x)\n", debugstr_us(attr->ObjectName), io->u.Status );
+
+ SERVER_START_REQ( create_file )
+ {
+ req->access = access;
+ req->attributes = attr->Attributes;
+ req->sharing = sharing;
+ req->create = disposition;
+ req->options = options;
+ req->attrs = attributes;
+ wine_server_add_data( req, &objattr, sizeof(objattr) );
+ if (objattr.sd_len) wine_server_add_data( req, sd, objattr.sd_len );
+ wine_server_add_data( req, unix_name.Buffer, unix_name.Length );
+ io->u.Status = wine_server_call( req );
+ *handle = wine_server_ptr_handle( reply->handle );
+ }
+ SERVER_END_REQ;
+ NTDLL_free_struct_sd( sd );
if (io->u.Status == STATUS_SUCCESS)
{
@@ -327,6 +341,11 @@ static NTSTATUS FILE_CreateFile( PHANDLE handle, ACCESS_MASK access, POBJECT_ATT
@@ -325,6 +340,11 @@ static NTSTATUS FILE_CreateFile( PHANDLE handle, ACCESS_MASK access, POBJECT_ATT
io->Information = FILE_OVERWRITTEN;
break;
}
@ -56,7 +124,7 @@ index fd21c66..f549552 100644
}
else if (io->u.Status == STATUS_TOO_MANY_OPENED_FILES)
{
@@ -334,6 +353,7 @@ static NTSTATUS FILE_CreateFile( PHANDLE handle, ACCESS_MASK access, POBJECT_ATT
@@ -332,6 +352,7 @@ static NTSTATUS FILE_CreateFile( PHANDLE handle, ACCESS_MASK access, POBJECT_ATT
if (!once++) ERR_(winediag)( "Too many open files, ulimit -n probably needs to be increased\n" );
}

View File

@ -1,4 +1,4 @@
From d459f286062ea2560993829833d32fbf914ecd69 Mon Sep 17 00:00:00 2001
From ccdbe855a2b105e9da88a9408f426329543a78a1 Mon Sep 17 00:00:00 2001
From: "Erich E. Hoover" <erich.e.hoover@gmail.com>
Date: Wed, 20 Aug 2014 11:26:48 -0600
Subject: ntdll: Perform the Unix-style hidden file check within the unified
@ -11,10 +11,10 @@ Subject: ntdll: Perform the Unix-style hidden file check within the unified
3 files changed, 9 insertions(+), 15 deletions(-)
diff --git a/dlls/ntdll/directory.c b/dlls/ntdll/directory.c
index 8871700..c10375d 100644
index 9b10385..a85c5e1 100644
--- a/dlls/ntdll/directory.c
+++ b/dlls/ntdll/directory.c
@@ -1198,17 +1198,17 @@ static DWORD WINAPI init_options( RTL_RUN_ONCE *once, void *param, void **contex
@@ -1199,17 +1199,17 @@ static DWORD WINAPI init_options( RTL_RUN_ONCE *once, void *param, void **contex
*
* Check if the specified file should be hidden based on its name and the show dot files option.
*/
@ -37,7 +37,7 @@ index 8871700..c10375d 100644
if (p == end || *p != '.') return FALSE;
/* make sure it isn't '.' or '..' */
if (p + 1 == end) return FALSE;
@@ -1423,9 +1423,6 @@ static union file_directory_info *append_entry( void *info_ptr, IO_STATUS_BLOCK
@@ -1424,9 +1424,6 @@ static union file_directory_info *append_entry( void *info_ptr, IO_STATUS_BLOCK
TRACE( "ignoring file %s\n", long_name );
return NULL;
}
@ -48,7 +48,7 @@ index 8871700..c10375d 100644
if (io->Information + total_len > max_length)
{
diff --git a/dlls/ntdll/file.c b/dlls/ntdll/file.c
index f549552..36ebdf4 100644
index 7582ff1..216d9c9 100644
--- a/dlls/ntdll/file.c
+++ b/dlls/ntdll/file.c
@@ -210,6 +210,9 @@ int get_file_info( const char *path, struct stat *st, ULONG *attr )
@ -61,16 +61,16 @@ index f549552..36ebdf4 100644
/* retrieve any stored DOS attributes */
len = xattr_get( path, SAMBA_XATTR_DOS_ATTRIB, hexattr, sizeof(hexattr)-1 );
if (len == -1) return ret;
@@ -2580,8 +2583,6 @@ NTSTATUS WINAPI NtQueryFullAttributesFile( const OBJECT_ATTRIBUTES *attr,
@@ -2579,8 +2582,6 @@ NTSTATUS WINAPI NtQueryFullAttributesFile( const OBJECT_ATTRIBUTES *attr,
info->AllocationSize = std.AllocationSize;
info->EndOfFile = std.EndOfFile;
info->FileAttributes = basic.FileAttributes;
- if (DIR_is_hidden_file( attr->ObjectName ))
- info->FileAttributes |= FILE_ATTRIBUTE_HIDDEN;
}
RtlFreeAnsiString( &unix_name );
}
else WARN("%s not found (%x)\n", debugstr_us(attr->ObjectName), status );
@@ -2609,11 +2610,7 @@ NTSTATUS WINAPI NtQueryAttributesFile( const OBJECT_ATTRIBUTES *attr, FILE_BASIC
@@ -2608,11 +2609,7 @@ NTSTATUS WINAPI NtQueryAttributesFile( const OBJECT_ATTRIBUTES *attr, FILE_BASIC
else if (!S_ISREG(st.st_mode) && !S_ISDIR(st.st_mode))
status = STATUS_INVALID_INFO_CLASS;
else
@ -79,14 +79,14 @@ index f549552..36ebdf4 100644
- if (DIR_is_hidden_file( attr->ObjectName ))
- info->FileAttributes |= FILE_ATTRIBUTE_HIDDEN;
- }
RtlFreeAnsiString( &unix_name );
}
else WARN("%s not found (%x)\n", debugstr_us(attr->ObjectName), status );
RtlFreeAnsiString( &unix_name );
diff --git a/dlls/ntdll/ntdll_misc.h b/dlls/ntdll/ntdll_misc.h
index ae59552..bacadb0 100644
index e56e78b..f8e508a 100644
--- a/dlls/ntdll/ntdll_misc.h
+++ b/dlls/ntdll/ntdll_misc.h
@@ -153,7 +153,7 @@ extern NTSTATUS fill_file_info( const struct stat *st, ULONG attr, void *p
@@ -153,7 +153,7 @@ extern NTSTATUS fill_file_info( const struct stat *st, ULONG attr, void *ptr,
FILE_INFORMATION_CLASS class ) DECLSPEC_HIDDEN;
extern NTSTATUS server_get_unix_name( HANDLE handle, ANSI_STRING *unix_name ) DECLSPEC_HIDDEN;
extern void DIR_init_windows_dir( const WCHAR *windir, const WCHAR *sysdir ) DECLSPEC_HIDDEN;

View File

@ -1,5 +1,4 @@
Author: Erich E. Hoover
Subject: Implement DOS hidden/system file attributes
Revision: 1
Depends: ntdll-Fix_Free
Fixes: [9158] Support for DOS hidden/system file attributes

View File

@ -1,25 +1,17 @@
From cecc1c37484bd63da728d6dcde7aca633019bdca Mon Sep 17 00:00:00 2001
From fbb6ccb252d14593cefa5e47a5a6566406f79c40 Mon Sep 17 00:00:00 2001
From: Sebastian Lackner <sebastian@fds-team.de>
Date: Thu, 28 Aug 2014 05:36:01 +0200
Subject: kernel32: Fix leaking directory handle in RemoveDirectoryW.
---
dlls/kernel32/path.c | 16 +++++++++-------
1 file changed, 9 insertions(+), 7 deletions(-)
dlls/kernel32/path.c | 17 +++++++++++------
1 file changed, 11 insertions(+), 6 deletions(-)
diff --git a/dlls/kernel32/path.c b/dlls/kernel32/path.c
index 4a41ab8..593cc1d 100644
index 09fb04b..7e20dc3 100644
--- a/dlls/kernel32/path.c
+++ b/dlls/kernel32/path.c
@@ -1602,7 +1602,6 @@ BOOL WINAPI RemoveDirectoryW( LPCWSTR path )
SetLastError( ERROR_PATH_NOT_FOUND );
return FALSE;
}
- unix_name.Buffer = NULL;
attr.Length = sizeof(attr);
attr.RootDirectory = 0;
attr.Attributes = OBJ_CASE_INSENSITIVE;
@@ -1613,18 +1612,21 @@ BOOL WINAPI RemoveDirectoryW( LPCWSTR path )
@@ -1612,18 +1612,23 @@ BOOL WINAPI RemoveDirectoryW( LPCWSTR path )
status = NtOpenFile( &handle, DELETE, &attr, &io,
FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
FILE_DIRECTORY_FILE | FILE_SYNCHRONOUS_IO_NONALERT );
@ -30,12 +22,12 @@ index 4a41ab8..593cc1d 100644
if (status != STATUS_SUCCESS)
{
SetLastError( RtlNtStatusToDosError(status) );
- RtlFreeAnsiString( &unix_name );
+ RtlFreeUnicodeString( &nt_name );
return FALSE;
}
- if (!(ret = (rmdir( unix_name.Buffer ) != -1))) FILE_SetDosError();
- RtlFreeAnsiString( &unix_name );
+ status = wine_nt_to_unix_file_name( &nt_name, &unix_name, FILE_OPEN, FALSE );
+ RtlFreeUnicodeString( &nt_name );
+
@ -44,9 +36,11 @@ index 4a41ab8..593cc1d 100644
+ else if (!(ret = (rmdir( unix_name.Buffer ) != -1)))
+ FILE_SetDosError();
+
RtlFreeAnsiString( &unix_name );
+ if (status == STATUS_SUCCESS)
+ RtlFreeAnsiString( &unix_name );
NtClose( handle );
return ret;
}
--
1.7.9.5

View File

@ -1,24 +0,0 @@
From 87680099180ae97cdd4ab0060929e77a93ca453c Mon Sep 17 00:00:00 2001
From: "Erich E. Hoover" <erich.e.hoover@gmail.com>
Date: Thu, 21 Aug 2014 22:31:53 -0600
Subject: ntdll: Make nt_to_unix_file_name_attr return always safe to free.
---
dlls/ntdll/directory.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/dlls/ntdll/directory.c b/dlls/ntdll/directory.c
index a2796b2..aac7522 100644
--- a/dlls/ntdll/directory.c
+++ b/dlls/ntdll/directory.c
@@ -2941,6 +2941,7 @@ NTSTATUS nt_to_unix_file_name_attr( const OBJECT_ATTRIBUTES *attr, ANSI_STRING *
NTSTATUS status;
BOOLEAN check_case = !(attr->Attributes & OBJ_CASE_INSENSITIVE);
+ unix_name_ret->Buffer = NULL;
if (!attr->RootDirectory) /* without root dir fall back to normal lookup */
return wine_nt_to_unix_file_name( attr->ObjectName, unix_name_ret, disposition, check_case );
--
1.7.9.5

View File

@ -1,24 +0,0 @@
From 3fdd706cddf8cf517f38488f445ca4ab30bba088 Mon Sep 17 00:00:00 2001
From: "Erich E. Hoover" <erich.e.hoover@gmail.com>
Date: Thu, 21 Aug 2014 22:35:55 -0600
Subject: ntdll: Make wine_nt_to_unix_file_name return always safe to free.
---
dlls/ntdll/directory.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/dlls/ntdll/directory.c b/dlls/ntdll/directory.c
index aac7522..01f35ab 100644
--- a/dlls/ntdll/directory.c
+++ b/dlls/ntdll/directory.c
@@ -3026,6 +3026,7 @@ NTSTATUS CDECL wine_nt_to_unix_file_name( const UNICODE_STRING *nameW, ANSI_STRI
name = nameW->Buffer;
name_len = nameW->Length / sizeof(WCHAR);
+ unix_name_ret->Buffer = NULL;
if (!name_len || !IS_SEPARATOR(name[0])) return STATUS_OBJECT_PATH_SYNTAX_BAD;
--
1.7.9.5

View File

@ -1,33 +0,0 @@
From 4394fbad092e3786360b6f7099500e26e5dbaa71 Mon Sep 17 00:00:00 2001
From: "Erich E. Hoover" <erich.e.hoover@gmail.com>
Date: Thu, 21 Aug 2014 22:28:10 -0600
Subject: ntdll: Make file_id_to_unix_file_name return always safe to free.
---
dlls/ntdll/directory.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/dlls/ntdll/directory.c b/dlls/ntdll/directory.c
index 01f35ab..9e5dbae 100644
--- a/dlls/ntdll/directory.c
+++ b/dlls/ntdll/directory.c
@@ -2744,6 +2744,7 @@ NTSTATUS file_id_to_unix_file_name( const OBJECT_ATTRIBUTES *attr, ANSI_STRING *
ULONGLONG file_id;
struct stat st, root_st;
+ unix_name->Buffer = NULL;
if (attr->ObjectName->Length != sizeof(ULONGLONG)) return STATUS_OBJECT_PATH_SYNTAX_BAD;
if (!attr->RootDirectory) return STATUS_INVALID_PARAMETER;
memcpy( &file_id, attr->ObjectName->Buffer, sizeof(file_id) );
@@ -2802,7 +2803,7 @@ done:
else
{
TRACE( "%s not found in dir %p\n", wine_dbgstr_longlong(file_id), attr->RootDirectory );
- RtlFreeHeap( GetProcessHeap(), 0, unix_name->Buffer );
+ RtlFreeAnsiString( unix_name );
}
if (needs_close) close( root_fd );
return status;
--
1.7.9.5

View File

@ -1,27 +0,0 @@
From e77e75d4bc2bddb96f1c1819172ac753f4508e53 Mon Sep 17 00:00:00 2001
From: "Erich E. Hoover" <erich.e.hoover@gmail.com>
Date: Thu, 21 Aug 2014 22:40:09 -0600
Subject: ntdll: Fix leak on STATUS_NO_SUCH_FILE in NtQueryFullAttributesFile.
---
dlls/ntdll/file.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/dlls/ntdll/file.c b/dlls/ntdll/file.c
index 92d9829..58edc6c 100644
--- a/dlls/ntdll/file.c
+++ b/dlls/ntdll/file.c
@@ -2469,9 +2469,9 @@ NTSTATUS WINAPI NtQueryFullAttributesFile( const OBJECT_ATTRIBUTES *attr,
if (DIR_is_hidden_file( attr->ObjectName ))
info->FileAttributes |= FILE_ATTRIBUTE_HIDDEN;
}
- RtlFreeAnsiString( &unix_name );
}
else WARN("%s not found (%x)\n", debugstr_us(attr->ObjectName), status );
+ RtlFreeAnsiString( &unix_name );
return status;
}
--
1.7.9.5

View File

@ -1,27 +0,0 @@
From 9b0b9ca377c6d93866c27b262d0b774e565e4cd3 Mon Sep 17 00:00:00 2001
From: "Erich E. Hoover" <erich.e.hoover@gmail.com>
Date: Thu, 21 Aug 2014 22:40:44 -0600
Subject: ntdll: Fix leak on STATUS_NO_SUCH_FILE in NtQueryAttributesFile.
---
dlls/ntdll/file.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/dlls/ntdll/file.c b/dlls/ntdll/file.c
index 58edc6c..03f7de8 100644
--- a/dlls/ntdll/file.c
+++ b/dlls/ntdll/file.c
@@ -2499,9 +2499,9 @@ NTSTATUS WINAPI NtQueryAttributesFile( const OBJECT_ATTRIBUTES *attr, FILE_BASIC
if (DIR_is_hidden_file( attr->ObjectName ))
info->FileAttributes |= FILE_ATTRIBUTE_HIDDEN;
}
- RtlFreeAnsiString( &unix_name );
}
else WARN("%s not found (%x)\n", debugstr_us(attr->ObjectName), status );
+ RtlFreeAnsiString( &unix_name );
return status;
}
--
1.7.9.5

View File

@ -1,24 +0,0 @@
From f9af5e33f532b5bcc4c9e4195efe54bbb29ed826 Mon Sep 17 00:00:00 2001
From: "Erich E. Hoover" <erich.e.hoover@gmail.com>
Date: Thu, 21 Aug 2014 22:45:34 -0600
Subject: ntdll: Fix unlikely leak on STATUS_NO_SUCH_FILE in init_redirects.
---
dlls/ntdll/directory.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/dlls/ntdll/directory.c b/dlls/ntdll/directory.c
index 9e5dbae..4fb89e3 100644
--- a/dlls/ntdll/directory.c
+++ b/dlls/ntdll/directory.c
@@ -2466,6 +2466,7 @@ static void init_redirects(void)
if (status)
{
ERR( "cannot open %s (%x)\n", debugstr_w(user_shared_data->NtSystemRoot), status );
+ RtlFreeAnsiString( &unix_name );
return;
}
if (!stat( unix_name.Buffer, &st ))
--
1.7.9.5

View File

@ -1,33 +0,0 @@
From c8c9fa7bab2da87b6a14380265cf88bc53eea6de Mon Sep 17 00:00:00 2001
From: "Erich E. Hoover" <erich.e.hoover@gmail.com>
Date: Thu, 21 Aug 2014 22:57:06 -0600
Subject: ntdll: Fix leak on STATUS_NO_SUCH_FILE in load_builtin_dll.
---
dlls/ntdll/loader.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/dlls/ntdll/loader.c b/dlls/ntdll/loader.c
index 79aa341..c9c2848 100644
--- a/dlls/ntdll/loader.c
+++ b/dlls/ntdll/loader.c
@@ -1712,6 +1712,7 @@ static NTSTATUS load_builtin_dll( LPCWSTR load_path, LPCWSTR path, HANDLE file,
if (wine_nt_to_unix_file_name( &nt_name, &unix_name, FILE_OPEN, FALSE ))
{
RtlFreeUnicodeString( &nt_name );
+ RtlFreeAnsiString( &unix_name );
return STATUS_DLL_NOT_FOUND;
}
prev_info = builtin_load_info;
@@ -1720,7 +1721,7 @@ static NTSTATUS load_builtin_dll( LPCWSTR load_path, LPCWSTR path, HANDLE file,
handle = wine_dlopen( unix_name.Buffer, RTLD_NOW, error, sizeof(error) );
builtin_load_info = prev_info;
RtlFreeUnicodeString( &nt_name );
- RtlFreeHeap( GetProcessHeap(), 0, unix_name.Buffer );
+ RtlFreeAnsiString( &unix_name );
if (!handle)
{
WARN( "failed to load .so lib for builtin %s: %s\n", debugstr_w(path), error );
--
1.7.9.5

View File

@ -1,95 +0,0 @@
From 8a03ff8a255dc1a685a963acb3d6ae26478b6a6b Mon Sep 17 00:00:00 2001
From: "Erich E. Hoover" <erich.e.hoover@gmail.com>
Date: Thu, 21 Aug 2014 23:09:02 -0600
Subject: ntdll: Fix leak on STATUS_NO_SUCH_FILE (for certain dispositions) in
NtCreateFile.
---
dlls/ntdll/file.c | 60 +++++++++++++++++++++++++++--------------------------
1 file changed, 31 insertions(+), 29 deletions(-)
diff --git a/dlls/ntdll/file.c b/dlls/ntdll/file.c
index 03f7de8..218e112 100644
--- a/dlls/ntdll/file.c
+++ b/dlls/ntdll/file.c
@@ -114,6 +114,8 @@ static NTSTATUS FILE_CreateFile( PHANDLE handle, ACCESS_MASK access, POBJECT_ATT
ULONG attributes, ULONG sharing, ULONG disposition,
ULONG options, PVOID ea_buffer, ULONG ea_length )
{
+ struct object_attributes objattr;
+ struct security_descriptor *sd;
ANSI_STRING unix_name;
BOOL created = FALSE;
@@ -157,39 +159,39 @@ static NTSTATUS FILE_CreateFile( PHANDLE handle, ACCESS_MASK access, POBJECT_ATT
io->u.Status = STATUS_SUCCESS;
}
- if (io->u.Status == STATUS_SUCCESS)
+ if (io->u.Status != STATUS_SUCCESS)
{
- struct security_descriptor *sd;
- struct object_attributes objattr;
-
- objattr.rootdir = wine_server_obj_handle( attr->RootDirectory );
- objattr.name_len = 0;
- io->u.Status = NTDLL_create_struct_sd( attr->SecurityDescriptor, &sd, &objattr.sd_len );
- if (io->u.Status != STATUS_SUCCESS)
- {
- RtlFreeAnsiString( &unix_name );
- return io->u.Status;
- }
+ WARN("%s not found (%x)\n", debugstr_us(attr->ObjectName), io->u.Status );
+ RtlFreeAnsiString( &unix_name );
+ return io->u.Status;
+ }
- SERVER_START_REQ( create_file )
- {
- req->access = access;
- req->attributes = attr->Attributes;
- req->sharing = sharing;
- req->create = disposition;
- req->options = options;
- req->attrs = attributes;
- wine_server_add_data( req, &objattr, sizeof(objattr) );
- if (objattr.sd_len) wine_server_add_data( req, sd, objattr.sd_len );
- wine_server_add_data( req, unix_name.Buffer, unix_name.Length );
- io->u.Status = wine_server_call( req );
- *handle = wine_server_ptr_handle( reply->handle );
- }
- SERVER_END_REQ;
- NTDLL_free_struct_sd( sd );
+ objattr.rootdir = wine_server_obj_handle( attr->RootDirectory );
+ objattr.name_len = 0;
+ io->u.Status = NTDLL_create_struct_sd( attr->SecurityDescriptor, &sd, &objattr.sd_len );
+ if (io->u.Status != STATUS_SUCCESS)
+ {
RtlFreeAnsiString( &unix_name );
+ return io->u.Status;
}
- else WARN("%s not found (%x)\n", debugstr_us(attr->ObjectName), io->u.Status );
+
+ SERVER_START_REQ( create_file )
+ {
+ req->access = access;
+ req->attributes = attr->Attributes;
+ req->sharing = sharing;
+ req->create = disposition;
+ req->options = options;
+ req->attrs = attributes;
+ wine_server_add_data( req, &objattr, sizeof(objattr) );
+ if (objattr.sd_len) wine_server_add_data( req, sd, objattr.sd_len );
+ wine_server_add_data( req, unix_name.Buffer, unix_name.Length );
+ io->u.Status = wine_server_call( req );
+ *handle = wine_server_ptr_handle( reply->handle );
+ }
+ SERVER_END_REQ;
+ NTDLL_free_struct_sd( sd );
+ RtlFreeAnsiString( &unix_name );
if (io->u.Status == STATUS_SUCCESS)
{
--
1.7.9.5

View File

@ -1,32 +0,0 @@
From a2c8ef31f29e7e6473c6c0c35a7b9681bc99f1da Mon Sep 17 00:00:00 2001
From: "Erich E. Hoover" <erich.e.hoover@gmail.com>
Date: Thu, 21 Aug 2014 22:50:19 -0600
Subject: kernel32: Fix leak on STATUS_NO_SUCH_FILE in RemoveDirectoryW.
---
dlls/kernel32/path.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/dlls/kernel32/path.c b/dlls/kernel32/path.c
index 09fb04b..4a41ab8 100644
--- a/dlls/kernel32/path.c
+++ b/dlls/kernel32/path.c
@@ -1602,6 +1602,7 @@ BOOL WINAPI RemoveDirectoryW( LPCWSTR path )
SetLastError( ERROR_PATH_NOT_FOUND );
return FALSE;
}
+ unix_name.Buffer = NULL;
attr.Length = sizeof(attr);
attr.RootDirectory = 0;
attr.Attributes = OBJ_CASE_INSENSITIVE;
@@ -1619,6 +1620,7 @@ BOOL WINAPI RemoveDirectoryW( LPCWSTR path )
if (status != STATUS_SUCCESS)
{
SetLastError( RtlNtStatusToDosError(status) );
+ RtlFreeAnsiString( &unix_name );
return FALSE;
}
--
1.7.9.5

View File

@ -1,66 +0,0 @@
From 8951f3f246da65fe632e54d0e9cbb347df231f70 Mon Sep 17 00:00:00 2001
From: "Erich E. Hoover" <erich.e.hoover@gmail.com>
Date: Thu, 21 Aug 2014 22:54:09 -0600
Subject: kernel32: Fix leak on STATUS_NO_SUCH_FILE in QueryDosDeviceW.
---
dlls/kernel32/volume.c | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/dlls/kernel32/volume.c b/dlls/kernel32/volume.c
index d396764..d7d3ea0 100644
--- a/dlls/kernel32/volume.c
+++ b/dlls/kernel32/volume.c
@@ -1354,10 +1354,8 @@ DWORD WINAPI QueryDosDeviceW( LPCWSTR devname, LPWSTR target, DWORD bufsize )
status = wine_nt_to_unix_file_name( &nt_name, &unix_name, FILE_OPEN, TRUE );
if (status) SetLastError( RtlNtStatusToDosError(status) );
else
- {
ret = MultiByteToWideChar( CP_UNIXCP, 0, unix_name.Buffer, -1, target, bufsize );
- RtlFreeAnsiString( &unix_name );
- }
+ RtlFreeAnsiString( &unix_name );
}
done:
if (ret)
@@ -1398,9 +1396,9 @@ DWORD WINAPI QueryDosDeviceW( LPCWSTR devname, LPWSTR target, DWORD bufsize )
nt_buffer[7] = '0' + i;
if (!wine_nt_to_unix_file_name( &nt_name, &unix_name, FILE_OPEN, TRUE ))
{
- RtlFreeAnsiString( &unix_name );
if (p + 5 >= target + bufsize)
{
+ RtlFreeAnsiString( &unix_name );
SetLastError( ERROR_INSUFFICIENT_BUFFER );
return 0;
}
@@ -1409,6 +1407,7 @@ DWORD WINAPI QueryDosDeviceW( LPCWSTR devname, LPWSTR target, DWORD bufsize )
p[4] = 0;
p += 5;
}
+ RtlFreeAnsiString( &unix_name );
}
strcpyW( nt_buffer + 4, lptW );
for (i = 1; i <= 9; i++)
@@ -1416,9 +1415,9 @@ DWORD WINAPI QueryDosDeviceW( LPCWSTR devname, LPWSTR target, DWORD bufsize )
nt_buffer[7] = '0' + i;
if (!wine_nt_to_unix_file_name( &nt_name, &unix_name, FILE_OPEN, TRUE ))
{
- RtlFreeAnsiString( &unix_name );
if (p + 5 >= target + bufsize)
{
+ RtlFreeAnsiString( &unix_name );
SetLastError( ERROR_INSUFFICIENT_BUFFER );
return 0;
}
@@ -1427,6 +1426,7 @@ DWORD WINAPI QueryDosDeviceW( LPCWSTR devname, LPWSTR target, DWORD bufsize )
p[4] = 0;
p += 5;
}
+ RtlFreeAnsiString( &unix_name );
}
RtlInitUnicodeString( &nt_name, dosdevW );
--
1.7.9.5

View File

@ -1,4 +1,4 @@
From d5239a5816cd53dd852dd24f40762e4cf30a46ce Mon Sep 17 00:00:00 2001
From 8e81030f67159f359e94180289d2e3dc0d0cb436 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.
@ -11,7 +11,7 @@ Subject: ntdll: Add support for junction point creation.
create mode 100644 include/ntifs.h
diff --git a/dlls/ntdll/file.c b/dlls/ntdll/file.c
index 36ebdf4..1a7e671 100644
index 92d9829..8413ad1 100644
--- a/dlls/ntdll/file.c
+++ b/dlls/ntdll/file.c
@@ -89,12 +89,14 @@
@ -29,7 +29,7 @@ index 36ebdf4..1a7e671 100644
#define SECSPERDAY 86400
#define SECS_1601_TO_1970 ((369 * 365 + 89) * (ULONGLONG)SECSPERDAY)
@@ -1609,6 +1611,76 @@ NTSTATUS WINAPI NtDeviceIoControlFile(HANDLE handle, HANDLE event,
@@ -1470,6 +1472,76 @@ NTSTATUS WINAPI NtDeviceIoControlFile(HANDLE handle, HANDLE event,
}
@ -106,7 +106,7 @@ index 36ebdf4..1a7e671 100644
/**************************************************************************
* NtFsControlFile [NTDLL.@]
* ZwFsControlFile [NTDLL.@]
@@ -1756,6 +1828,23 @@ NTSTATUS WINAPI NtFsControlFile(HANDLE handle, HANDLE event, PIO_APC_ROUTINE apc
@@ -1617,6 +1689,23 @@ NTSTATUS WINAPI NtFsControlFile(HANDLE handle, HANDLE event, PIO_APC_ROUTINE apc
}
break;
}
@ -131,7 +131,7 @@ index 36ebdf4..1a7e671 100644
case FSCTL_PIPE_WAIT:
default:
diff --git a/dlls/ntdll/tests/file.c b/dlls/ntdll/tests/file.c
index 7a8e5d4..333ea44 100644
index d70ed6b..90e753d 100644
--- a/dlls/ntdll/tests/file.c
+++ b/dlls/ntdll/tests/file.c
@@ -37,6 +37,7 @@

View File

@ -1,4 +1,4 @@
From 46b4a6ba4c4e4a49b4cbe0aae42cb7717bea7ac0 Mon Sep 17 00:00:00 2001
From 8770e934e61e237b6ef88b5442e7635542d99d4c 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.
@ -9,10 +9,10 @@ Subject: ntdll: Add support for reading junction points.
2 files changed, 76 insertions(+), 1 deletion(-)
diff --git a/dlls/ntdll/file.c b/dlls/ntdll/file.c
index 1a7e671..889d35c 100644
index 8413ad1..39044ee 100644
--- a/dlls/ntdll/file.c
+++ b/dlls/ntdll/file.c
@@ -1681,6 +1681,60 @@ cleanup:
@@ -1542,6 +1542,60 @@ cleanup:
}
@ -73,7 +73,7 @@ index 1a7e671..889d35c 100644
/**************************************************************************
* NtFsControlFile [NTDLL.@]
* ZwFsControlFile [NTDLL.@]
@@ -1829,6 +1883,15 @@ NTSTATUS WINAPI NtFsControlFile(HANDLE handle, HANDLE event, PIO_APC_ROUTINE apc
@@ -1690,6 +1744,15 @@ NTSTATUS WINAPI NtFsControlFile(HANDLE handle, HANDLE event, PIO_APC_ROUTINE apc
break;
}
@ -90,7 +90,7 @@ index 1a7e671..889d35c 100644
{
REPARSE_DATA_BUFFER *buffer = (REPARSE_DATA_BUFFER *)in_buffer;
diff --git a/dlls/ntdll/tests/file.c b/dlls/ntdll/tests/file.c
index 333ea44..a109376 100644
index 90e753d..5c218d7 100644
--- a/dlls/ntdll/tests/file.c
+++ b/dlls/ntdll/tests/file.c
@@ -2713,9 +2713,10 @@ static void test_junction_points(void)

View File

@ -1,4 +1,4 @@
From 1cc34fb8a2400c62920de15d0cf53d6e2822c631 Mon Sep 17 00:00:00 2001
From 2e0449be946b4d73a4debb712d5032d79bd93878 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.
@ -10,10 +10,10 @@ Subject: ntdll: Add support for deleting junction points.
3 files changed, 85 insertions(+)
diff --git a/dlls/ntdll/file.c b/dlls/ntdll/file.c
index 889d35c..ca98509 100644
index 39044ee..c8d1a31 100644
--- a/dlls/ntdll/file.c
+++ b/dlls/ntdll/file.c
@@ -1735,6 +1735,41 @@ cleanup:
@@ -1596,6 +1596,41 @@ cleanup:
}
@ -55,7 +55,7 @@ index 889d35c..ca98509 100644
/**************************************************************************
* NtFsControlFile [NTDLL.@]
* ZwFsControlFile [NTDLL.@]
@@ -1883,6 +1918,22 @@ NTSTATUS WINAPI NtFsControlFile(HANDLE handle, HANDLE event, PIO_APC_ROUTINE apc
@@ -1744,6 +1779,22 @@ NTSTATUS WINAPI NtFsControlFile(HANDLE handle, HANDLE event, PIO_APC_ROUTINE apc
break;
}
@ -79,7 +79,7 @@ index 889d35c..ca98509 100644
{
REPARSE_DATA_BUFFER *buffer = (REPARSE_DATA_BUFFER *)out_buffer;
diff --git a/dlls/ntdll/tests/file.c b/dlls/ntdll/tests/file.c
index a109376..cc241c8 100644
index 5c218d7..f84f6ea 100644
--- a/dlls/ntdll/tests/file.c
+++ b/dlls/ntdll/tests/file.c
@@ -2708,12 +2708,15 @@ static void test_junction_points(void)

View File

@ -1,4 +1,4 @@
From 422457e7b8d910de8ac20226355ce63a9f07b52b Mon Sep 17 00:00:00 2001
From 4950278da6011ac509313ad2cdbea7301423a91d 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.
@ -8,7 +8,7 @@ Subject: ntdll: Add a test for junction point advertisement.
1 file changed, 5 insertions(+)
diff --git a/dlls/ntdll/tests/file.c b/dlls/ntdll/tests/file.c
index cc241c8..3f1973c 100644
index f84f6ea..965ca62 100644
--- a/dlls/ntdll/tests/file.c
+++ b/dlls/ntdll/tests/file.c
@@ -2770,6 +2770,11 @@ static void test_junction_points(void)

View File

@ -1,16 +1,16 @@
From 5ce6d272e3c528db75f5301c8827e38d3c8d3813 Mon Sep 17 00:00:00 2001
From efdf5b9546b3c56a8f02c667755ebda2fd944bc8 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
RemoveDirectory.
---
dlls/kernel32/path.c | 12 ++++++++++--
dlls/kernel32/path.c | 18 +++++++++++++-----
dlls/ntdll/tests/file.c | 34 +++++++++++++++++++++++++++++++++-
2 files changed, 43 insertions(+), 3 deletions(-)
2 files changed, 46 insertions(+), 6 deletions(-)
diff --git a/dlls/kernel32/path.c b/dlls/kernel32/path.c
index eeba48a..b0b5ae9 100644
index 7e20dc3..9f083f8 100644
--- a/dlls/kernel32/path.c
+++ b/dlls/kernel32/path.c
@@ -1587,6 +1587,7 @@ BOOL WINAPI CreateDirectoryExW( LPCWSTR template, LPCWSTR path, LPSECURITY_ATTRI
@ -21,17 +21,16 @@ index eeba48a..b0b5ae9 100644
OBJECT_ATTRIBUTES attr;
UNICODE_STRING nt_name;
ANSI_STRING unix_name;
@@ -1620,13 +1621,21 @@ BOOL WINAPI RemoveDirectoryW( LPCWSTR path )
}
@@ -1622,13 +1623,20 @@ BOOL WINAPI RemoveDirectoryW( LPCWSTR path )
status = wine_nt_to_unix_file_name( &nt_name, &unix_name, FILE_OPEN, FALSE );
- RtlFreeUnicodeString( &nt_name );
RtlFreeUnicodeString( &nt_name );
if (status != STATUS_SUCCESS)
SetLastError( RtlNtStatusToDosError(status) );
- if (status != STATUS_SUCCESS)
- SetLastError( RtlNtStatusToDosError(status) );
- else if (!(ret = (rmdir( unix_name.Buffer ) != -1)))
- FILE_SetDosError();
+ else
-
if (status == STATUS_SUCCESS)
+ {
+ status = NtQueryAttributesFile( &attr, &info );
+ if (status == STATUS_SUCCESS && (info.FileAttributes & FILE_ATTRIBUTE_REPARSE_POINT) &&
@ -40,14 +39,16 @@ index eeba48a..b0b5ae9 100644
+ else
+ ret = (rmdir( unix_name.Buffer ) != -1);
+ if (!ret) FILE_SetDosError();
RtlFreeAnsiString( &unix_name );
+ }
+ RtlFreeUnicodeString( &nt_name );
RtlFreeAnsiString( &unix_name );
+ else
+ SetLastError( RtlNtStatusToDosError(status) );
+
NtClose( handle );
return ret;
}
diff --git a/dlls/ntdll/tests/file.c b/dlls/ntdll/tests/file.c
index 3f1973c..be6898b 100644
index 965ca62..acc9197 100644
--- a/dlls/ntdll/tests/file.c
+++ b/dlls/ntdll/tests/file.c
@@ -2714,7 +2714,7 @@ static void test_junction_points(void)

View File

@ -1,4 +1,4 @@
From dfcf45eaaba89e2ef6e662db935570d3a4b93c30 Mon Sep 17 00:00:00 2001
From 7af8c509b8c528f70077743c4127f2ce0acd8315 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.
@ -9,7 +9,7 @@ Subject: kernel32: Advertise junction point support.
2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/dlls/kernel32/volume.c b/dlls/kernel32/volume.c
index d580f1d..d7ee8b7 100644
index d396764..0fb0aef 100644
--- a/dlls/kernel32/volume.c
+++ b/dlls/kernel32/volume.c
@@ -854,7 +854,8 @@ fill_fs_info: /* now fill in the information that depends on the file system ty
@ -23,7 +23,7 @@ index d580f1d..d7ee8b7 100644
}
ret = TRUE;
diff --git a/dlls/ntdll/tests/file.c b/dlls/ntdll/tests/file.c
index be6898b..57e7fc1 100644
index acc9197..3112081 100644
--- a/dlls/ntdll/tests/file.c
+++ b/dlls/ntdll/tests/file.c
@@ -2799,10 +2799,9 @@ static void test_junction_points(void)

View File

@ -1,4 +1,4 @@
From 01274ec39670388d65a84d63cffd249f9aea5e59 Mon Sep 17 00:00:00 2001
From e0cefbdf61c85f044d3eaf20e546be542867417e 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/tests: Add test for deleting junction point target.