3 #if defined(__CYGWIN__) || defined(__WIN32__)
9 #include "wimlib_internal.h"
12 #ifdef ENABLE_ERROR_MESSAGES
13 void win32_error(u32 err_code)
17 nchars = FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ALLOCATE_BUFFER,
19 (char*)&buffer, 0, NULL);
21 ERROR("Error printing error message! "
22 "Computer will self-destruct in 3 seconds.");
24 ERROR("Win32 error: %s", buffer);
29 #define win32_error(err_code)
32 void *win32_open_file_readonly(const void *path)
34 return CreateFileW((const wchar_t*)path,
35 GENERIC_READ | READ_CONTROL,
37 NULL, /* lpSecurityAttributes */
39 FILE_FLAG_BACKUP_SEMANTICS |
40 FILE_FLAG_OPEN_REPARSE_POINT,
41 NULL /* hTemplateFile */);
44 int win32_read_file(const char *filename,
45 void *handle, u64 offset, size_t size, u8 *buf)
50 LARGE_INTEGER liOffset = {.QuadPart = offset};
52 wimlib_assert(size <= 0xffffffff);
54 if (SetFilePointerEx(h, liOffset, NULL, FILE_BEGIN))
55 if (ReadFile(h, buf, size, &bytesRead, NULL) && bytesRead == size)
58 ERROR("Error reading \"%s\"", filename);
60 return WIMLIB_ERR_READ;
63 void win32_close_file(void *handle)
65 CloseHandle((HANDLE)handle);
68 #endif /* __CYGWIN__ || __WIN32__ */