forked from LeenkxTeam/LNXSDK
		
	
		
			
	
	
		
			47 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			47 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| 
								 | 
							
								#include "SystemMicrosoft.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <kinc/error.h>
							 | 
						||
| 
								 | 
							
								#include <kinc/libs/stb_sprintf.h>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define S_OK ((HRESULT)0L)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								static void winerror(HRESULT result) {
							 | 
						||
| 
								 | 
							
									LPVOID buffer = NULL;
							 | 
						||
| 
								 | 
							
									DWORD dw = GetLastError();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									__debugbreak();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if defined(KINC_WINDOWS) || defined(KINC_WINDOWSAPP)
							 | 
						||
| 
								 | 
							
									if (dw != 0) {
							 | 
						||
| 
								 | 
							
										FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, dw,
							 | 
						||
| 
								 | 
							
										               MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPSTR)&buffer, 0, NULL);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										kinc_error_message("Error: %s", buffer);
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									else {
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
										kinc_error_message("Unknown Windows error, return value was 0x%x.", result);
							 | 
						||
| 
								 | 
							
								#if defined(KINC_WINDOWS) || defined(KINC_WINDOWSAPP)
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void kinc_microsoft_affirm(HRESULT result) {
							 | 
						||
| 
								 | 
							
									if (result != S_OK) {
							 | 
						||
| 
								 | 
							
										winerror(result);
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void kinc_microsoft_affirm_message(HRESULT result, const char *format, ...) {
							 | 
						||
| 
								 | 
							
									va_list args;
							 | 
						||
| 
								 | 
							
									va_start(args, format);
							 | 
						||
| 
								 | 
							
									kinc_affirm_args(result == S_OK, format, args);
							 | 
						||
| 
								 | 
							
									va_end(args);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void kinc_microsoft_format(const char *format, va_list args, wchar_t *buffer) {
							 | 
						||
| 
								 | 
							
									char cbuffer[4096];
							 | 
						||
| 
								 | 
							
									vsprintf(cbuffer, format, args);
							 | 
						||
| 
								 | 
							
									MultiByteToWideChar(CP_UTF8, 0, cbuffer, -1, buffer, 4096);
							 | 
						||
| 
								 | 
							
								}
							 |