Added a wine_get_dos_file_name function in kernel32 as a wrapper
around the new wine_unix_to_nt_file_name.
This commit is contained in:
parent
777cd4f7df
commit
e859359211
|
@ -1261,6 +1261,7 @@
|
||||||
|
|
||||||
# Unix files
|
# Unix files
|
||||||
@ cdecl wine_get_unix_file_name(wstr)
|
@ cdecl wine_get_unix_file_name(wstr)
|
||||||
|
@ cdecl wine_get_dos_file_name(str)
|
||||||
|
|
||||||
# Init code
|
# Init code
|
||||||
@ cdecl __wine_kernel_init()
|
@ cdecl __wine_kernel_init()
|
||||||
|
|
|
@ -1485,6 +1485,39 @@ char *wine_get_unix_file_name( LPCWSTR dosW )
|
||||||
if (!RtlDosPathNameToNtPathName_U( dosW, &nt_name, NULL, NULL )) return NULL;
|
if (!RtlDosPathNameToNtPathName_U( dosW, &nt_name, NULL, NULL )) return NULL;
|
||||||
status = wine_nt_to_unix_file_name( &nt_name, &unix_name, FILE_OPEN_IF, FALSE );
|
status = wine_nt_to_unix_file_name( &nt_name, &unix_name, FILE_OPEN_IF, FALSE );
|
||||||
RtlFreeUnicodeString( &nt_name );
|
RtlFreeUnicodeString( &nt_name );
|
||||||
if (status && status != STATUS_NO_SUCH_FILE) return NULL;
|
if (status && status != STATUS_NO_SUCH_FILE)
|
||||||
|
{
|
||||||
|
SetLastError( RtlNtStatusToDosError( status ) );
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
return unix_name.Buffer;
|
return unix_name.Buffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* wine_get_dos_file_name (KERNEL32.@) Not a Windows API
|
||||||
|
*
|
||||||
|
* Return the full DOS file name for a given Unix path.
|
||||||
|
* Returned buffer must be freed by caller.
|
||||||
|
*/
|
||||||
|
WCHAR *wine_get_dos_file_name( LPCSTR str )
|
||||||
|
{
|
||||||
|
UNICODE_STRING nt_name;
|
||||||
|
ANSI_STRING unix_name;
|
||||||
|
NTSTATUS status;
|
||||||
|
DWORD len;
|
||||||
|
|
||||||
|
RtlInitAnsiString( &unix_name, str );
|
||||||
|
status = wine_unix_to_nt_file_name( &unix_name, &nt_name );
|
||||||
|
if (status)
|
||||||
|
{
|
||||||
|
SetLastError( RtlNtStatusToDosError( status ) );
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
/* get rid of the \??\ prefix */
|
||||||
|
/* FIXME: should implement RtlNtPathNameToDosPathName and use that instead */
|
||||||
|
len = nt_name.Length - 4 * sizeof(WCHAR);
|
||||||
|
memmove( nt_name.Buffer, nt_name.Buffer + 4, len );
|
||||||
|
nt_name.Buffer[len / sizeof(WCHAR)] = 0;
|
||||||
|
return nt_name.Buffer;
|
||||||
|
}
|
||||||
|
|
|
@ -2169,6 +2169,7 @@ VOID WINAPI _LeaveSysLevel(SYSLEVEL*);
|
||||||
/* Wine internal functions */
|
/* Wine internal functions */
|
||||||
|
|
||||||
extern char *wine_get_unix_file_name( LPCWSTR dos );
|
extern char *wine_get_unix_file_name( LPCWSTR dos );
|
||||||
|
extern WCHAR *wine_get_dos_file_name( LPCSTR str );
|
||||||
|
|
||||||
|
|
||||||
/* a few optimizations for i386/gcc */
|
/* a few optimizations for i386/gcc */
|
||||||
|
|
Loading…
Reference in New Issue