Module: wine Branch: master Commit: d1bc340fce7249dd08c278825437d2e4fc23c854 URL: https://source.winehq.org/git/wine.git/?a=commit;h=d1bc340fce7249dd08c278825...
Author: Alexandre Julliard julliard@winehq.org Date: Wed Dec 11 22:46:04 2019 +0100
kernelbase: Avoid using OpenFile().
Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/kernelbase/version.c | 72 ++++++++++++++++++----------------------------- 1 file changed, 27 insertions(+), 45 deletions(-)
diff --git a/dlls/kernelbase/version.c b/dlls/kernelbase/version.c index b09004075a..920511ff09 100644 --- a/dlls/kernelbase/version.c +++ b/dlls/kernelbase/version.c @@ -1104,34 +1104,24 @@ BOOL WINAPI VerQueryValueW( LPCVOID pBlock, LPCWSTR lpSubBlock, */ static BOOL file_existsA( char const * path, char const * file, BOOL excl ) { - char filename[1024]; - int filenamelen; - OFSTRUCT fileinfo; - - fileinfo.cBytes = sizeof(OFSTRUCT); + DWORD sharing = excl ? 0 : FILE_SHARE_READ | FILE_SHARE_WRITE; + char filename[MAX_PATH]; + int len; + HANDLE handle;
if (path) { - strcpy(filename, path); - filenamelen = strlen(filename); - - /* Add a trailing \ if necessary */ - if(filenamelen) - { - if(filename[filenamelen - 1] != '\') - strcat(filename, "\"); - } - else /* specify the current directory */ - strcpy(filename, ".\"); + strcpy( filename, path ); + len = strlen(filename); + if (len && filename[len - 1] != '\') strcat( filename, "\" ); + strcat( filename, file ); } - else - filename[0] = 0; - - /* Create the full pathname */ - strcat(filename, file); + else if (!SearchPathA( NULL, file, NULL, MAX_PATH, filename, NULL )) return FALSE;
- return (OpenFile(filename, &fileinfo, - OF_EXIST | (excl ? OF_SHARE_EXCLUSIVE : 0)) != HFILE_ERROR); + handle = CreateFileA( filename, 0, sharing, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0 ); + if (handle == INVALID_HANDLE_VALUE) return FALSE; + CloseHandle( handle ); + return TRUE; }
/****************************************************************************** @@ -1139,32 +1129,24 @@ static BOOL file_existsA( char const * path, char const * file, BOOL excl ) */ static BOOL file_existsW( const WCHAR *path, const WCHAR *file, BOOL excl ) { - char *filename; - DWORD pathlen, filelen; - int ret; - OFSTRUCT fileinfo; + DWORD sharing = excl ? 0 : FILE_SHARE_READ | FILE_SHARE_WRITE; + WCHAR filename[MAX_PATH]; + int len; + HANDLE handle;
- fileinfo.cBytes = sizeof(OFSTRUCT); - - pathlen = WideCharToMultiByte( CP_ACP, 0, path, -1, NULL, 0, NULL, NULL ); - filelen = WideCharToMultiByte( CP_ACP, 0, file, -1, NULL, 0, NULL, NULL ); - filename = HeapAlloc( GetProcessHeap(), 0, pathlen+filelen+2 ); - - WideCharToMultiByte( CP_ACP, 0, path, -1, filename, pathlen, NULL, NULL ); - /* Add a trailing \ if necessary */ - if (pathlen > 1) + if (path) { - if (filename[pathlen-2] != '\') strcpy( &filename[pathlen-1], "\" ); + lstrcpyW( filename, path ); + len = lstrlenW(filename); + if (len && filename[len - 1] != '\') lstrcatW( filename, L"\" ); + lstrcatW( filename, file ); } - else /* specify the current directory */ - strcpy(filename, ".\"); + else if (!SearchPathW( NULL, file, NULL, MAX_PATH, filename, NULL )) return FALSE;
- WideCharToMultiByte( CP_ACP, 0, file, -1, filename+strlen(filename), filelen, NULL, NULL ); - - ret = (OpenFile(filename, &fileinfo, - OF_EXIST | (excl ? OF_SHARE_EXCLUSIVE : 0)) != HFILE_ERROR); - HeapFree( GetProcessHeap(), 0, filename ); - return ret; + handle = CreateFileW( filename, 0, sharing, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0 ); + if (handle == INVALID_HANDLE_VALUE) return FALSE; + CloseHandle( handle ); + return TRUE; }
/*****************************************************************************