68 lines
2.1 KiB
C
68 lines
2.1 KiB
C
/*****************************************************************************
|
|
|
|
Natural Language Group Common Library
|
|
|
|
CMN_CreateFileW.c - windows 95 safe version of CreateFileW
|
|
|
|
History:
|
|
DougP 11/20/97 Created
|
|
|
|
©1997 Microsoft Corporation
|
|
*****************************************************************************/
|
|
|
|
#include "precomp.h"
|
|
#undef CMN_CreateFileW
|
|
#undef CreateFileW
|
|
|
|
HANDLE WINAPI
|
|
CMN_CreateFileW (
|
|
PCWSTR pwzFileName, // pointer to name of the file
|
|
DWORD dwDesiredAccess, // access (read-write) mode
|
|
DWORD dwShareMode, // share mode
|
|
LPSECURITY_ATTRIBUTES pSecurityAttributes, // pointer to security descriptor
|
|
DWORD dwCreationDistribution, // how to create
|
|
DWORD dwFlagsAndAttributes, // file attributes
|
|
HANDLE hTemplateFile) // handle to file with attributes to copy
|
|
{
|
|
HINSTANCE hFile;
|
|
Assert(pwzFileName);
|
|
hFile = CreateFileW (
|
|
pwzFileName, // pointer to name of the file
|
|
dwDesiredAccess, // access (read-write) mode
|
|
dwShareMode, // share mode
|
|
pSecurityAttributes, // pointer to security descriptor
|
|
dwCreationDistribution, // how to create
|
|
dwFlagsAndAttributes, // file attributes
|
|
hTemplateFile);
|
|
#if defined(_M_IX86)
|
|
if (!hFile && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)
|
|
{ // must be in win95 - arghhh!
|
|
char szFileName[MAX_PATH];
|
|
// Lenox convinced me this is a safe limit for w95
|
|
//(if it's NT we're not here)
|
|
|
|
BOOL fcharerr;
|
|
char chdef = ' ';
|
|
int res = WideCharToMultiByte (CP_ACP, 0, pwzFileName,
|
|
-1,
|
|
szFileName, sizeof(szFileName), &chdef, &fcharerr);
|
|
if (res && !fcharerr)
|
|
hFile = CreateFileA (
|
|
szFileName, // pointer to name of the file
|
|
dwDesiredAccess, // access (read-write) mode
|
|
dwShareMode, // share mode
|
|
pSecurityAttributes, // pointer to security descriptor
|
|
dwCreationDistribution, // how to create
|
|
dwFlagsAndAttributes, // file attributes
|
|
hTemplateFile);
|
|
else if (fcharerr)
|
|
SetLastError(ERROR_NO_UNICODE_TRANSLATION);
|
|
}
|
|
#endif
|
|
#if defined(_DEBUG)
|
|
if (!hFile || hFile == INVALID_HANDLE_VALUE)
|
|
CMN_OutputSystemErrW(L"Can't CreateFile", pwzFileName);
|
|
#endif
|
|
return hFile;
|
|
}
|