From ed706c5b30a5dc15afbbd6aa0662084dff1bb661 Mon Sep 17 00:00:00 2001 From: Aras Pranckevicius Date: Wed, 24 Feb 2010 18:40:48 +0200 Subject: [PATCH] preprocessor open impl on MSVC --- mojoshader_preprocessor.c | 36 +++++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/mojoshader_preprocessor.c b/mojoshader_preprocessor.c index 4b51a01d..a1e4e676 100644 --- a/mojoshader_preprocessor.c +++ b/mojoshader_preprocessor.c @@ -203,7 +203,41 @@ int MOJOSHADER_internal_include_open(MOJOSHADER_includeType inctype, void *d) { #ifdef _MSC_VER -#error Write me. + WCHAR widePath[MAX_PATH]; + if (!MultiByteToWideChar( CP_UTF8, 0, fname, -1, widePath, MAX_PATH )) + return 0; + HANDLE fileHandle = CreateFileW (widePath, FILE_GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, NULL, OPEN_EXISTING, NULL, NULL ); + if (fileHandle == INVALID_HANDLE_VALUE) + return 0; + DWORD fileSize = GetFileSize (fileHandle, NULL); + if (fileSize == INVALID_FILE_SIZE) + { + CloseHandle (fileHandle); + return 0; + } + char *data = (char *) m(fileSize, d); + if (data == NULL) + { + CloseHandle (fileHandle); + return 0; + } + DWORD readLength = 0; + if (!ReadFile( fileHandle, data, fileSize, &readLength, NULL)) + { + CloseHandle (fileHandle); + f(data, d); + return 0; + } + CloseHandle (fileHandle); + if (readLength != fileSize) + { + f(data, d); + return 0; + } + *outdata = data; + *outbytes = fileSize; + return 1; + #else struct stat statbuf; if (stat(fname, &statbuf) == -1)