[MVDM] hack-fix Clang-CL build
[reactos.git] / subsystems / mvdm / ntvdm / utils.c
1 /*
2 * COPYRIGHT: GPL - See COPYING in the top level directory
3 * PROJECT: ReactOS Virtual DOS Machine
4 * FILE: subsystems/mvdm/ntvdm/utils.c
5 * PURPOSE: Utility Functions
6 * PROGRAMMERS: Hermes Belusca-Maito (hermes.belusca@sfr.fr)
7 */
8
9 /* INCLUDES *******************************************************************/
10
11 #include "ntvdm.h"
12
13 #define NDEBUG
14 #include <debug.h>
15
16 /* PRIVATE FUNCTIONS **********************************************************/
17
18 /* PUBLIC FUNCTIONS ***********************************************************/
19
20 VOID
21 FileClose(IN HANDLE FileHandle)
22 {
23 CloseHandle(FileHandle);
24 }
25
26 HANDLE
27 FileOpen(IN PCSTR FileName,
28 OUT PULONG FileSize OPTIONAL)
29 {
30 HANDLE hFile;
31 ULONG ulFileSize;
32
33 /* Open the file */
34 SetLastError(0); // For debugging purposes
35 hFile = CreateFileA(FileName,
36 GENERIC_READ,
37 FILE_SHARE_READ,
38 NULL,
39 OPEN_EXISTING,
40 FILE_ATTRIBUTE_NORMAL,
41 NULL);
42 DPRINT1("File '%s' opening %s ; GetLastError() = %u\n",
43 FileName, hFile != INVALID_HANDLE_VALUE ? "succeeded" : "failed", GetLastError());
44
45 /* If we failed, bail out */
46 if (hFile == INVALID_HANDLE_VALUE) return NULL;
47
48 /* OK, we have a handle to the file */
49
50 /*
51 * Retrieve the size of the file. In NTVDM we will handle files
52 * of maximum 1Mb so we can largely use GetFileSize only.
53 */
54 ulFileSize = GetFileSize(hFile, NULL);
55 if (ulFileSize == INVALID_FILE_SIZE && GetLastError() != ERROR_SUCCESS)
56 {
57 /* We failed, bail out */
58 DPRINT1("Error when retrieving file size, or size too large (%d)\n", ulFileSize);
59 FileClose(hFile);
60 return NULL;
61 }
62
63 /* Success, return file handle and size if needed */
64 if (FileSize) *FileSize = ulFileSize;
65 return hFile;
66 }
67
68 BOOLEAN
69 FileLoadByHandle(IN HANDLE FileHandle,
70 IN PVOID Location,
71 IN ULONG FileSize,
72 OUT PULONG BytesRead)
73 {
74 BOOLEAN Success;
75
76 /* Attempt to load the file into memory */
77 SetLastError(0); // For debugging purposes
78 Success = !!ReadFile(FileHandle,
79 Location, // REAL_TO_PHYS(LocationRealPtr),
80 FileSize,
81 BytesRead,
82 NULL);
83 DPRINT1("File loading %s ; GetLastError() = %u\n", Success ? "succeeded" : "failed", GetLastError());
84
85 return Success;
86 }
87
88 /* EOF */