kernelbase: Use wide character string literals in file.c.

Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Alexandre Julliard 2020-03-09 19:52:26 +01:00
parent 5be54b885e
commit d88bbf0a45
1 changed files with 20 additions and 45 deletions

View File

@ -64,10 +64,8 @@ typedef struct
static const UINT max_entry_size = offsetof( FILE_BOTH_DIRECTORY_INFORMATION, FileName[256] ); static const UINT max_entry_size = offsetof( FILE_BOTH_DIRECTORY_INFORMATION, FileName[256] );
const WCHAR windows_dir[] = {'C',':','\\','w','i','n','d','o','w','s',0}; const WCHAR windows_dir[] = L"C:\\windows";
const WCHAR system_dir[] = {'C',':','\\','w','i','n','d','o','w','s','\\','s','y','s','t','e','m','3','2',0}; const WCHAR system_dir[] = L"C:\\windows\\system32";
static const WCHAR krnl386W[] = {'k','r','n','l','3','8','6','.','e','x','e','1','6',0};
static BOOL oem_file_apis; static BOOL oem_file_apis;
@ -143,9 +141,6 @@ static WCHAR *append_ext( const WCHAR *name, const WCHAR *ext )
*/ */
static NTSTATUS find_actctx_dllpath( const WCHAR *name, WCHAR **path ) static NTSTATUS find_actctx_dllpath( const WCHAR *name, WCHAR **path )
{ {
static const WCHAR winsxsW[] = {'\\','w','i','n','s','x','s','\\'};
static const WCHAR dotManifestW[] = {'.','m','a','n','i','f','e','s','t',0};
ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION *info; ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION *info;
ACTCTX_SECTION_KEYED_DATA data; ACTCTX_SECTION_KEYED_DATA data;
UNICODE_STRING nameW; UNICODE_STRING nameW;
@ -188,7 +183,7 @@ static NTSTATUS find_actctx_dllpath( const WCHAR *name, WCHAR **path )
DWORD dirlen = info->ulAssemblyDirectoryNameLength / sizeof(WCHAR); DWORD dirlen = info->ulAssemblyDirectoryNameLength / sizeof(WCHAR);
p++; p++;
if (!dirlen || wcsnicmp( p, info->lpAssemblyDirectoryName, dirlen ) || wcsicmp( p + dirlen, dotManifestW )) if (!dirlen || wcsnicmp( p, info->lpAssemblyDirectoryName, dirlen ) || wcsicmp( p + dirlen, L".manifest" ))
{ {
/* manifest name does not match directory name, so it's not a global /* manifest name does not match directory name, so it's not a global
* windows/winsxs manifest; use the manifest directory name instead */ * windows/winsxs manifest; use the manifest directory name instead */
@ -211,18 +206,15 @@ static NTSTATUS find_actctx_dllpath( const WCHAR *name, WCHAR **path )
goto done; goto done;
} }
needed = (lstrlenW( windows_dir ) * sizeof(WCHAR) + needed = sizeof(L"C:\\windows\\winsxs\\") + info->ulAssemblyDirectoryNameLength + sizeof(WCHAR);
sizeof(winsxsW) + info->ulAssemblyDirectoryNameLength + 2*sizeof(WCHAR));
if (!(*path = p = RtlAllocateHeap( GetProcessHeap(), 0, needed ))) if (!(*path = p = RtlAllocateHeap( GetProcessHeap(), 0, needed )))
{ {
status = STATUS_NO_MEMORY; status = STATUS_NO_MEMORY;
goto done; goto done;
} }
lstrcpyW( p, windows_dir ); lstrcpyW( p, L"C:\\windows\\winsxs\\" );
p += lstrlenW(p); p += lstrlenW(p);
memcpy( p, winsxsW, sizeof(winsxsW) );
p += ARRAY_SIZE( winsxsW );
memcpy( p, info->lpAssemblyDirectoryName, info->ulAssemblyDirectoryNameLength ); memcpy( p, info->lpAssemblyDirectoryName, info->ulAssemblyDirectoryNameLength );
p += info->ulAssemblyDirectoryNameLength / sizeof(WCHAR); p += info->ulAssemblyDirectoryNameLength / sizeof(WCHAR);
*p++ = '\\'; *p++ = '\\';
@ -473,7 +465,6 @@ HANDLE WINAPI DECLSPEC_HOTPATCH CreateFileW( LPCWSTR filename, DWORD access, DWO
HANDLE ret; HANDLE ret;
DWORD dosdev; DWORD dosdev;
const WCHAR *vxd_name = NULL; const WCHAR *vxd_name = NULL;
static const WCHAR bkslashes_with_dotW[] = {'\\','\\','.','\\',0};
SECURITY_QUALITY_OF_SERVICE qos; SECURITY_QUALITY_OF_SERVICE qos;
static const UINT nt_disposition[5] = static const UINT nt_disposition[5] =
@ -511,14 +502,11 @@ HANDLE WINAPI DECLSPEC_HOTPATCH CreateFileW( LPCWSTR filename, DWORD access, DWO
if (!wcsicmp( filename, L"CONOUT$" )) if (!wcsicmp( filename, L"CONOUT$" ))
return open_console( TRUE, access, sa, creation ? OPEN_EXISTING : 0 ); return open_console( TRUE, access, sa, creation ? OPEN_EXISTING : 0 );
if (!wcsncmp( filename, bkslashes_with_dotW, 4 )) if (!wcsncmp( filename, L"\\\\.\\", 4 ))
{ {
static const WCHAR pipeW[] = {'P','I','P','E','\\',0};
static const WCHAR mailslotW[] = {'M','A','I','L','S','L','O','T','\\',0};
if ((iswalpha(filename[4]) && filename[5] == ':' && filename[6] == '\0') || if ((iswalpha(filename[4]) && filename[5] == ':' && filename[6] == '\0') ||
!wcsnicmp( filename + 4, pipeW, 5 ) || !wcsnicmp( filename + 4, L"PIPE\\", 5 ) ||
!wcsnicmp( filename + 4, mailslotW, 9 )) !wcsnicmp( filename + 4, L"MAILSLOT\\", 9 ))
{ {
dosdev = 0; dosdev = 0;
} }
@ -536,10 +524,8 @@ HANDLE WINAPI DECLSPEC_HOTPATCH CreateFileW( LPCWSTR filename, DWORD access, DWO
if (dosdev) if (dosdev)
{ {
static const WCHAR conW[] = {'C','O','N'}; if (LOWORD(dosdev) == 3 * sizeof(WCHAR) &&
!wcsnicmp( filename + HIWORD(dosdev)/sizeof(WCHAR), L"CON", 3 ))
if (LOWORD(dosdev) == sizeof(conW) &&
!wcsnicmp( filename + HIWORD(dosdev)/sizeof(WCHAR), conW, ARRAY_SIZE( conW )))
{ {
switch (access & (GENERIC_READ|GENERIC_WRITE)) switch (access & (GENERIC_READ|GENERIC_WRITE))
{ {
@ -598,7 +584,7 @@ HANDLE WINAPI DECLSPEC_HOTPATCH CreateFileW( LPCWSTR filename, DWORD access, DWO
if (vxd_name && vxd_name[0]) if (vxd_name && vxd_name[0])
{ {
static HANDLE (*vxd_open)(LPCWSTR,DWORD,SECURITY_ATTRIBUTES*); static HANDLE (*vxd_open)(LPCWSTR,DWORD,SECURITY_ATTRIBUTES*);
if (!vxd_open) vxd_open = (void *)GetProcAddress( GetModuleHandleW(krnl386W), if (!vxd_open) vxd_open = (void *)GetProcAddress( GetModuleHandleW(L"krnl386.exe16"),
"__wine_vxd_open" ); "__wine_vxd_open" );
if (vxd_open && (ret = vxd_open( vxd_name, access, sa ))) goto done; if (vxd_open && (ret = vxd_open( vxd_name, access, sa ))) goto done;
} }
@ -837,7 +823,6 @@ HANDLE WINAPI DECLSPEC_HOTPATCH FindFirstFileExW( LPCWSTR filename, FINDEX_INFO_
if (!mask && (device = RtlIsDosDeviceName_U( filename ))) if (!mask && (device = RtlIsDosDeviceName_U( filename )))
{ {
static const WCHAR dotW[] = {'.',0};
WCHAR *dir = NULL; WCHAR *dir = NULL;
/* we still need to check that the directory can be opened */ /* we still need to check that the directory can be opened */
@ -853,7 +838,7 @@ HANDLE WINAPI DECLSPEC_HOTPATCH FindFirstFileExW( LPCWSTR filename, FINDEX_INFO_
dir[HIWORD(device)/sizeof(WCHAR)] = 0; dir[HIWORD(device)/sizeof(WCHAR)] = 0;
} }
RtlFreeUnicodeString( &nt_name ); RtlFreeUnicodeString( &nt_name );
if (!RtlDosPathNameToNtPathName_U( dir ? dir : dotW, &nt_name, &mask, NULL )) if (!RtlDosPathNameToNtPathName_U( dir ? dir : L".", &nt_name, &mask, NULL ))
{ {
HeapFree( GetProcessHeap(), 0, dir ); HeapFree( GetProcessHeap(), 0, dir );
SetLastError( ERROR_PATH_NOT_FOUND ); SetLastError( ERROR_PATH_NOT_FOUND );
@ -1413,7 +1398,6 @@ DWORD WINAPI DECLSPEC_HOTPATCH GetLongPathNameA( LPCSTR shortpath, LPSTR longpat
*/ */
DWORD WINAPI DECLSPEC_HOTPATCH GetLongPathNameW( LPCWSTR shortpath, LPWSTR longpath, DWORD longlen ) DWORD WINAPI DECLSPEC_HOTPATCH GetLongPathNameW( LPCWSTR shortpath, LPWSTR longpath, DWORD longlen )
{ {
static const WCHAR wildcardsW[] = {'*','?',0};
WCHAR tmplongpath[1024]; WCHAR tmplongpath[1024];
DWORD sp = 0, lp = 0, tmplen; DWORD sp = 0, lp = 0, tmplen;
WIN32_FIND_DATAW wfd; WIN32_FIND_DATAW wfd;
@ -1454,7 +1438,7 @@ DWORD WINAPI DECLSPEC_HOTPATCH GetLongPathNameW( LPCWSTR shortpath, LPWSTR longp
lp = sp = 2; lp = sp = 2;
} }
if (wcspbrk( shortpath + sp, wildcardsW )) if (wcspbrk( shortpath + sp, L"*?" ))
{ {
SetLastError( ERROR_INVALID_NAME ); SetLastError( ERROR_INVALID_NAME );
return 0; return 0;
@ -1522,7 +1506,6 @@ DWORD WINAPI DECLSPEC_HOTPATCH GetLongPathNameW( LPCWSTR shortpath, LPWSTR longp
*/ */
DWORD WINAPI DECLSPEC_HOTPATCH GetShortPathNameW( LPCWSTR longpath, LPWSTR shortpath, DWORD shortlen ) DWORD WINAPI DECLSPEC_HOTPATCH GetShortPathNameW( LPCWSTR longpath, LPWSTR shortpath, DWORD shortlen )
{ {
static const WCHAR wildcardsW[] = {'*','?',0};
WIN32_FIND_DATAW wfd; WIN32_FIND_DATAW wfd;
WCHAR *tmpshortpath; WCHAR *tmpshortpath;
HANDLE handle; HANDLE handle;
@ -1558,7 +1541,7 @@ DWORD WINAPI DECLSPEC_HOTPATCH GetShortPathNameW( LPCWSTR longpath, LPWSTR short
sp = lp = 4; sp = lp = 4;
} }
if (wcspbrk( longpath + lp, wildcardsW )) if (wcspbrk( longpath + lp, L"*?" ))
{ {
HeapFree( GetProcessHeap(), 0, tmpshortpath ); HeapFree( GetProcessHeap(), 0, tmpshortpath );
SetLastError( ERROR_INVALID_NAME ); SetLastError( ERROR_INVALID_NAME );
@ -1756,7 +1739,6 @@ UINT WINAPI DECLSPEC_HOTPATCH GetTempFileNameA( LPCSTR path, LPCSTR prefix, UINT
*/ */
UINT WINAPI DECLSPEC_HOTPATCH GetTempFileNameW( LPCWSTR path, LPCWSTR prefix, UINT unique, LPWSTR buffer ) UINT WINAPI DECLSPEC_HOTPATCH GetTempFileNameW( LPCWSTR path, LPCWSTR prefix, UINT unique, LPWSTR buffer )
{ {
static const WCHAR formatW[] = {'%','x','.','t','m','p',0};
int i; int i;
LPWSTR p; LPWSTR p;
DWORD attr; DWORD attr;
@ -1785,7 +1767,7 @@ UINT WINAPI DECLSPEC_HOTPATCH GetTempFileNameW( LPCWSTR path, LPCWSTR prefix, UI
if (prefix) for (i = 3; (i > 0) && (*prefix); i--) *p++ = *prefix++; if (prefix) for (i = 3; (i > 0) && (*prefix); i--) *p++ = *prefix++;
unique &= 0xffff; unique &= 0xffff;
if (unique) swprintf( p, MAX_PATH - (p - buffer), formatW, unique ); if (unique) swprintf( p, MAX_PATH - (p - buffer), L"%x.tmp", unique );
else else
{ {
/* get a "random" unique number and try to create the file */ /* get a "random" unique number and try to create the file */
@ -1799,7 +1781,7 @@ UINT WINAPI DECLSPEC_HOTPATCH GetTempFileNameW( LPCWSTR path, LPCWSTR prefix, UI
unique = num; unique = num;
do do
{ {
swprintf( p, MAX_PATH - (p - buffer), formatW, unique ); swprintf( p, MAX_PATH - (p - buffer), L"%x.tmp", unique );
handle = CreateFileW( buffer, GENERIC_WRITE, 0, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, 0 ); handle = CreateFileW( buffer, GENERIC_WRITE, 0, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, 0 );
if (handle != INVALID_HANDLE_VALUE) if (handle != INVALID_HANDLE_VALUE)
{ /* We created it */ { /* We created it */
@ -1840,15 +1822,12 @@ DWORD WINAPI DECLSPEC_HOTPATCH GetTempPathA( DWORD count, LPSTR path )
*/ */
DWORD WINAPI DECLSPEC_HOTPATCH GetTempPathW( DWORD count, LPWSTR path ) DWORD WINAPI DECLSPEC_HOTPATCH GetTempPathW( DWORD count, LPWSTR path )
{ {
static const WCHAR tmp[] = { 'T','M','P',0 };
static const WCHAR temp[] = { 'T','E','M','P',0 };
static const WCHAR userprofile[] = { 'U','S','E','R','P','R','O','F','I','L','E',0 };
WCHAR tmp_path[MAX_PATH]; WCHAR tmp_path[MAX_PATH];
UINT ret; UINT ret;
if (!(ret = GetEnvironmentVariableW( tmp, tmp_path, MAX_PATH )) && if (!(ret = GetEnvironmentVariableW( L"TMP", tmp_path, MAX_PATH )) &&
!(ret = GetEnvironmentVariableW( temp, tmp_path, MAX_PATH )) && !(ret = GetEnvironmentVariableW( L"TEMP", tmp_path, MAX_PATH )) &&
!(ret = GetEnvironmentVariableW( userprofile, tmp_path, MAX_PATH )) && !(ret = GetEnvironmentVariableW( L"USERPROFILE", tmp_path, MAX_PATH )) &&
!(ret = GetWindowsDirectoryW( tmp_path, MAX_PATH ))) !(ret = GetWindowsDirectoryW( tmp_path, MAX_PATH )))
return 0; return 0;
@ -1926,15 +1905,11 @@ BOOL WINAPI DECLSPEC_HOTPATCH NeedCurrentDirectoryForExePathA( LPCSTR name )
*/ */
BOOL WINAPI DECLSPEC_HOTPATCH NeedCurrentDirectoryForExePathW( LPCWSTR name ) BOOL WINAPI DECLSPEC_HOTPATCH NeedCurrentDirectoryForExePathW( LPCWSTR name )
{ {
static const WCHAR env_name[] = {'N','o','D','e','f','a','u','l','t',
'C','u','r','r','e','n','t',
'D','i','r','e','c','t','o','r','y',
'I','n','E','x','e','P','a','t','h',0};
WCHAR env_val; WCHAR env_val;
if (wcschr( name, '\\' )) return TRUE; if (wcschr( name, '\\' )) return TRUE;
/* check the existence of the variable, not value */ /* check the existence of the variable, not value */
return !GetEnvironmentVariableW( env_name, &env_val, 1 ); return !GetEnvironmentVariableW( L"NoDefaultCurrentDirectoryInExePath", &env_val, 1 );
} }