src/hb-blob.cc: Fix mmap functionality with UWP.
This commit is contained in:
parent
b7f1bbc2f8
commit
24dd6c1a9d
|
@ -574,18 +574,45 @@ fail_without_close:
|
||||||
wchar_t * wchar_file_name = (wchar_t *) malloc (sizeof (wchar_t) * size);
|
wchar_t * wchar_file_name = (wchar_t *) malloc (sizeof (wchar_t) * size);
|
||||||
if (unlikely (wchar_file_name == nullptr)) goto fail_without_close;
|
if (unlikely (wchar_file_name == nullptr)) goto fail_without_close;
|
||||||
mbstowcs (wchar_file_name, file_name, size);
|
mbstowcs (wchar_file_name, file_name, size);
|
||||||
|
#if defined(WINAPI_FAMILY) && (WINAPI_FAMILY==WINAPI_FAMILY_PC_APP || WINAPI_FAMILY==WINAPI_FAMILY_PHONE_APP)
|
||||||
|
{
|
||||||
|
CREATEFILE2_EXTENDED_PARAMETERS ceparams = { 0 };
|
||||||
|
ceparams.dwSize = sizeof(CREATEFILE2_EXTENDED_PARAMETERS);
|
||||||
|
ceparams.dwFileAttributes = FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED & 0xFFFF;
|
||||||
|
ceparams.dwFileFlags = FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED & 0xFFF00000;
|
||||||
|
ceparams.dwSecurityQosFlags = FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED & 0x000F0000;
|
||||||
|
ceparams.lpSecurityAttributes = nullptr;
|
||||||
|
ceparams.hTemplateFile = nullptr;
|
||||||
|
fd = CreateFile2 (wchar_file_name, GENERIC_READ, FILE_SHARE_READ,
|
||||||
|
OPEN_EXISTING, &ceparams);
|
||||||
|
}
|
||||||
|
#else
|
||||||
fd = CreateFileW (wchar_file_name, GENERIC_READ, FILE_SHARE_READ, nullptr,
|
fd = CreateFileW (wchar_file_name, GENERIC_READ, FILE_SHARE_READ, nullptr,
|
||||||
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED,
|
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED,
|
||||||
nullptr);
|
nullptr);
|
||||||
|
#endif
|
||||||
free (wchar_file_name);
|
free (wchar_file_name);
|
||||||
|
|
||||||
if (unlikely (fd == INVALID_HANDLE_VALUE)) goto fail_without_close;
|
if (unlikely (fd == INVALID_HANDLE_VALUE)) goto fail_without_close;
|
||||||
|
|
||||||
|
#if defined(WINAPI_FAMILY) && (WINAPI_FAMILY==WINAPI_FAMILY_PC_APP || WINAPI_FAMILY==WINAPI_FAMILY_PHONE_APP)
|
||||||
|
{
|
||||||
|
LARGE_INTEGER length;
|
||||||
|
GetFileSizeEx (fd, &length);
|
||||||
|
file->length = length.LowPart;
|
||||||
|
file->mapping = CreateFileMappingFromApp (fd, nullptr, PAGE_READONLY, length.QuadPart, nullptr);
|
||||||
|
}
|
||||||
|
#else
|
||||||
file->length = (unsigned long) GetFileSize (fd, nullptr);
|
file->length = (unsigned long) GetFileSize (fd, nullptr);
|
||||||
file->mapping = CreateFileMapping (fd, nullptr, PAGE_READONLY, 0, 0, nullptr);
|
file->mapping = CreateFileMapping (fd, nullptr, PAGE_READONLY, 0, 0, nullptr);
|
||||||
|
#endif
|
||||||
if (unlikely (file->mapping == nullptr)) goto fail;
|
if (unlikely (file->mapping == nullptr)) goto fail;
|
||||||
|
|
||||||
|
#if defined(WINAPI_FAMILY) && (WINAPI_FAMILY==WINAPI_FAMILY_PC_APP || WINAPI_FAMILY==WINAPI_FAMILY_PHONE_APP)
|
||||||
|
file->contents = (char *) MapViewOfFileFromApp (file->mapping, FILE_MAP_READ, 0, 0);
|
||||||
|
#else
|
||||||
file->contents = (char *) MapViewOfFile (file->mapping, FILE_MAP_READ, 0, 0, 0);
|
file->contents = (char *) MapViewOfFile (file->mapping, FILE_MAP_READ, 0, 0, 0);
|
||||||
|
#endif
|
||||||
if (unlikely (file->contents == nullptr)) goto fail;
|
if (unlikely (file->contents == nullptr)) goto fail;
|
||||||
|
|
||||||
CloseHandle (fd);
|
CloseHandle (fd);
|
||||||
|
|
|
@ -237,8 +237,10 @@ struct _hb_alignof
|
||||||
# undef _WIN32_WINNT
|
# undef _WIN32_WINNT
|
||||||
# endif
|
# endif
|
||||||
# ifndef _WIN32_WINNT
|
# ifndef _WIN32_WINNT
|
||||||
|
# if !defined(WINAPI_FAMILY) || !(WINAPI_FAMILY==WINAPI_FAMILY_PC_APP || WINAPI_FAMILY==WINAPI_FAMILY_PHONE_APP)
|
||||||
# define _WIN32_WINNT 0x0600
|
# define _WIN32_WINNT 0x0600
|
||||||
# endif
|
# endif
|
||||||
|
# endif
|
||||||
# ifndef WIN32_LEAN_AND_MEAN
|
# ifndef WIN32_LEAN_AND_MEAN
|
||||||
# define WIN32_LEAN_AND_MEAN 1
|
# define WIN32_LEAN_AND_MEAN 1
|
||||||
# endif
|
# endif
|
||||||
|
|
Loading…
Reference in New Issue