Module: wine Branch: master Commit: 90024e492dcefd204c6c953a804c0d51544db5b2 URL: https://source.winehq.org/git/wine.git/?a=commit;h=90024e492dcefd204c6c953a8...
Author: Alexandre Julliard julliard@winehq.org Date: Tue Apr 13 16:19:50 2021 +0200
ntdll: Move nt_to_unix_file_name_attr() to avoid forward declarations.
Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/ntdll/unix/file.c | 126 ++++++++++++++++++++++++------------------------- 1 file changed, 63 insertions(+), 63 deletions(-)
diff --git a/dlls/ntdll/unix/file.c b/dlls/ntdll/unix/file.c index b87da541f1d..45c220a1d63 100644 --- a/dlls/ntdll/unix/file.c +++ b/dlls/ntdll/unix/file.c @@ -3216,69 +3216,6 @@ static NTSTATUS lookup_unix_name( const WCHAR *name, int name_len, char **buffer }
-/****************************************************************************** - * nt_to_unix_file_name_attr - */ -static NTSTATUS nt_to_unix_file_name_attr( const OBJECT_ATTRIBUTES *attr, char **name_ret, - UNICODE_STRING *nt_name, UINT disposition ) -{ - enum server_fd_type type; - int old_cwd, root_fd, needs_close; - const WCHAR *name; - char *unix_name; - int name_len, unix_len; - NTSTATUS status; - - if (!attr->RootDirectory) /* without root dir fall back to normal lookup */ - return nt_to_unix_file_name( attr->ObjectName, name_ret, nt_name, disposition ); - - name = attr->ObjectName->Buffer; - name_len = attr->ObjectName->Length / sizeof(WCHAR); - - if (name_len && name[0] == '\') return STATUS_INVALID_PARAMETER; - - unix_len = name_len * 3 + MAX_DIR_ENTRY_LEN + 3; - if (!(unix_name = malloc( unix_len ))) return STATUS_NO_MEMORY; - unix_name[0] = '.'; - - if (!(status = server_get_unix_fd( attr->RootDirectory, 0, &root_fd, &needs_close, &type, NULL ))) - { - if (type != FD_TYPE_DIR) - { - if (needs_close) close( root_fd ); - status = STATUS_BAD_DEVICE_TYPE; - } - else - { - mutex_lock( &dir_mutex ); - if ((old_cwd = open( ".", O_RDONLY )) != -1 && fchdir( root_fd ) != -1) - { - status = lookup_unix_name( name, name_len, &unix_name, unix_len, 1, disposition, FALSE ); - if (fchdir( old_cwd ) == -1) chdir( "/" ); - } - else status = errno_to_status( errno ); - mutex_unlock( &dir_mutex ); - if (old_cwd != -1) close( old_cwd ); - if (needs_close) close( root_fd ); - } - } - else if (status == STATUS_OBJECT_TYPE_MISMATCH) status = STATUS_BAD_DEVICE_TYPE; - - if (status == STATUS_SUCCESS || status == STATUS_NO_SUCH_FILE) - { - TRACE( "%s -> %s\n", debugstr_us(attr->ObjectName), debugstr_a(unix_name) ); - *name_ret = unix_name; - if (nt_name) rebuild_nt_name( attr->ObjectName, 0, unix_name, nt_name ); - } - else - { - TRACE( "%s not found in %s\n", debugstr_w(name), unix_name ); - free( unix_name ); - } - return status; -} - - /****************************************************************************** * nt_to_unix_file_name * @@ -3393,6 +3330,69 @@ NTSTATUS nt_to_unix_file_name( const UNICODE_STRING *nameW, char **unix_name_ret }
+/****************************************************************************** + * nt_to_unix_file_name_attr + */ +static NTSTATUS nt_to_unix_file_name_attr( const OBJECT_ATTRIBUTES *attr, char **name_ret, + UNICODE_STRING *nt_name, UINT disposition ) +{ + enum server_fd_type type; + int old_cwd, root_fd, needs_close; + const WCHAR *name; + char *unix_name; + int name_len, unix_len; + NTSTATUS status; + + if (!attr->RootDirectory) /* without root dir fall back to normal lookup */ + return nt_to_unix_file_name( attr->ObjectName, name_ret, nt_name, disposition ); + + name = attr->ObjectName->Buffer; + name_len = attr->ObjectName->Length / sizeof(WCHAR); + + if (name_len && name[0] == '\') return STATUS_INVALID_PARAMETER; + + unix_len = name_len * 3 + MAX_DIR_ENTRY_LEN + 3; + if (!(unix_name = malloc( unix_len ))) return STATUS_NO_MEMORY; + unix_name[0] = '.'; + + if (!(status = server_get_unix_fd( attr->RootDirectory, 0, &root_fd, &needs_close, &type, NULL ))) + { + if (type != FD_TYPE_DIR) + { + if (needs_close) close( root_fd ); + status = STATUS_BAD_DEVICE_TYPE; + } + else + { + mutex_lock( &dir_mutex ); + if ((old_cwd = open( ".", O_RDONLY )) != -1 && fchdir( root_fd ) != -1) + { + status = lookup_unix_name( name, name_len, &unix_name, unix_len, 1, disposition, FALSE ); + if (fchdir( old_cwd ) == -1) chdir( "/" ); + } + else status = errno_to_status( errno ); + mutex_unlock( &dir_mutex ); + if (old_cwd != -1) close( old_cwd ); + if (needs_close) close( root_fd ); + } + } + else if (status == STATUS_OBJECT_TYPE_MISMATCH) status = STATUS_BAD_DEVICE_TYPE; + + if (status == STATUS_SUCCESS || status == STATUS_NO_SUCH_FILE) + { + TRACE( "%s -> %s\n", debugstr_us(attr->ObjectName), debugstr_a(unix_name) ); + *name_ret = unix_name; + if (nt_name) rebuild_nt_name( attr->ObjectName, 0, unix_name, nt_name ); + } + else + { + TRACE( "%s not found in %s\n", debugstr_w(name), unix_name ); + free( unix_name ); + } + return status; +} + + /****************************************************************************** * wine_nt_to_unix_file_name *