|
@@ -92,60 +92,63 @@ IMalloc *GetGlobalHeapMalloc() throw() {
|
|
}
|
|
}
|
|
|
|
|
|
_Use_decl_annotations_
|
|
_Use_decl_annotations_
|
|
-void ReadBinaryFile(IMalloc *pMalloc, LPCWSTR pFileName, void **ppData,
|
|
|
|
- DWORD *pDataSize) {
|
|
|
|
|
|
+HRESULT ReadBinaryFile(IMalloc *pMalloc, LPCWSTR pFileName, void **ppData,
|
|
|
|
+ DWORD *pDataSize) throw() {
|
|
HANDLE hFile = CreateFileW(pFileName, GENERIC_READ, FILE_SHARE_READ, NULL,
|
|
HANDLE hFile = CreateFileW(pFileName, GENERIC_READ, FILE_SHARE_READ, NULL,
|
|
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, nullptr);
|
|
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, nullptr);
|
|
if (hFile == INVALID_HANDLE_VALUE) {
|
|
if (hFile == INVALID_HANDLE_VALUE) {
|
|
- IFT(HRESULT_FROM_WIN32(GetLastError()));
|
|
|
|
|
|
+ return HRESULT_FROM_WIN32(GetLastError());
|
|
}
|
|
}
|
|
|
|
|
|
CHandle h(hFile);
|
|
CHandle h(hFile);
|
|
|
|
|
|
LARGE_INTEGER FileSize;
|
|
LARGE_INTEGER FileSize;
|
|
if (!GetFileSizeEx(hFile, &FileSize)) {
|
|
if (!GetFileSizeEx(hFile, &FileSize)) {
|
|
- IFT(HRESULT_FROM_WIN32(GetLastError()));
|
|
|
|
|
|
+ return HRESULT_FROM_WIN32(GetLastError());
|
|
}
|
|
}
|
|
if (FileSize.u.HighPart != 0) {
|
|
if (FileSize.u.HighPart != 0) {
|
|
- throw(hlsl::Exception(DXC_E_INPUT_FILE_TOO_LARGE, "input file is too large"));
|
|
|
|
|
|
+ return DXC_E_INPUT_FILE_TOO_LARGE;
|
|
}
|
|
}
|
|
|
|
|
|
char *pData = (char *)pMalloc->Alloc(FileSize.u.LowPart);
|
|
char *pData = (char *)pMalloc->Alloc(FileSize.u.LowPart);
|
|
if (!pData) {
|
|
if (!pData) {
|
|
- throw std::bad_alloc();
|
|
|
|
|
|
+ return E_OUTOFMEMORY;
|
|
}
|
|
}
|
|
|
|
|
|
DWORD BytesRead;
|
|
DWORD BytesRead;
|
|
if (!ReadFile(hFile, pData, FileSize.u.LowPart, &BytesRead, nullptr)) {
|
|
if (!ReadFile(hFile, pData, FileSize.u.LowPart, &BytesRead, nullptr)) {
|
|
HRESULT hr = HRESULT_FROM_WIN32(GetLastError());
|
|
HRESULT hr = HRESULT_FROM_WIN32(GetLastError());
|
|
pMalloc->Free(pData);
|
|
pMalloc->Free(pData);
|
|
- throw ::hlsl::Exception(hr);
|
|
|
|
|
|
+ return hr;
|
|
}
|
|
}
|
|
DXASSERT(FileSize.u.LowPart == BytesRead, "ReadFile operation failed");
|
|
DXASSERT(FileSize.u.LowPart == BytesRead, "ReadFile operation failed");
|
|
|
|
|
|
*ppData = pData;
|
|
*ppData = pData;
|
|
*pDataSize = FileSize.u.LowPart;
|
|
*pDataSize = FileSize.u.LowPart;
|
|
|
|
|
|
|
|
+ return S_OK;
|
|
}
|
|
}
|
|
|
|
|
|
_Use_decl_annotations_
|
|
_Use_decl_annotations_
|
|
-void ReadBinaryFile(LPCWSTR pFileName, void **ppData, DWORD *pDataSize) {
|
|
|
|
|
|
+HRESULT ReadBinaryFile(LPCWSTR pFileName, void **ppData, DWORD *pDataSize) throw() {
|
|
return ReadBinaryFile(GetGlobalHeapMalloc(), pFileName, ppData, pDataSize);
|
|
return ReadBinaryFile(GetGlobalHeapMalloc(), pFileName, ppData, pDataSize);
|
|
}
|
|
}
|
|
|
|
|
|
_Use_decl_annotations_
|
|
_Use_decl_annotations_
|
|
-void WriteBinaryFile(LPCWSTR pFileName, const void *pData, DWORD DataSize) {
|
|
|
|
|
|
+HRESULT WriteBinaryFile(LPCWSTR pFileName, const void *pData, DWORD DataSize) throw() {
|
|
HANDLE hFile = CreateFileW(pFileName, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, nullptr);
|
|
HANDLE hFile = CreateFileW(pFileName, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, nullptr);
|
|
if(hFile == INVALID_HANDLE_VALUE) {
|
|
if(hFile == INVALID_HANDLE_VALUE) {
|
|
- IFT(HRESULT_FROM_WIN32(GetLastError()));
|
|
|
|
|
|
+ return HRESULT_FROM_WIN32(GetLastError());
|
|
}
|
|
}
|
|
CHandle h(hFile);
|
|
CHandle h(hFile);
|
|
|
|
|
|
DWORD BytesWritten;
|
|
DWORD BytesWritten;
|
|
if(!WriteFile(hFile, pData, DataSize, &BytesWritten, nullptr)) {
|
|
if(!WriteFile(hFile, pData, DataSize, &BytesWritten, nullptr)) {
|
|
- IFT(HRESULT_FROM_WIN32(GetLastError()));
|
|
|
|
|
|
+ return HRESULT_FROM_WIN32(GetLastError());
|
|
}
|
|
}
|
|
DXASSERT(DataSize == BytesWritten, "WriteFile operation failed");
|
|
DXASSERT(DataSize == BytesWritten, "WriteFile operation failed");
|
|
|
|
+
|
|
|
|
+ return S_OK;
|
|
}
|
|
}
|
|
|
|
|
|
_Use_decl_annotations_
|
|
_Use_decl_annotations_
|
|
@@ -825,15 +828,15 @@ DxcCreateBlobFromFile(IMalloc *pMalloc, LPCWSTR pFileName, UINT32 *pCodePage,
|
|
LPVOID pData;
|
|
LPVOID pData;
|
|
DWORD dataSize;
|
|
DWORD dataSize;
|
|
*ppBlobEncoding = nullptr;
|
|
*ppBlobEncoding = nullptr;
|
|
- try {
|
|
|
|
- ReadBinaryFile(pMalloc, pFileName, &pData, &dataSize);
|
|
|
|
- }
|
|
|
|
- CATCH_CPP_RETURN_HRESULT();
|
|
|
|
|
|
+
|
|
|
|
+ HRESULT hr = ReadBinaryFile(pMalloc, pFileName, &pData, &dataSize);
|
|
|
|
+ if (FAILED(hr))
|
|
|
|
+ return hr;
|
|
|
|
|
|
bool known = (pCodePage != nullptr);
|
|
bool known = (pCodePage != nullptr);
|
|
UINT32 codePage = (pCodePage != nullptr) ? *pCodePage : 0;
|
|
UINT32 codePage = (pCodePage != nullptr) ? *pCodePage : 0;
|
|
|
|
|
|
- HRESULT hr = DxcCreateBlob(pData, dataSize, false, false, known, codePage, pMalloc, ppBlobEncoding);
|
|
|
|
|
|
+ hr = DxcCreateBlob(pData, dataSize, false, false, known, codePage, pMalloc, ppBlobEncoding);
|
|
if (FAILED(hr))
|
|
if (FAILED(hr))
|
|
pMalloc->Free(pData);
|
|
pMalloc->Free(pData);
|
|
return hr;
|
|
return hr;
|