#define PLDTYPEOF(x) typeof(x)\r
#endif\r
\r
+static int PLD_Private_strlen(const char *s)\r
+{\r
+ int len = 0;\r
+ while (s[len++])\r
+ ;\r
+ return len - 1;\r
+}\r
+\r
+static void PLD_Private_Log(const char *, const char *, int);\r
+\r
#ifdef _WIN32\r
+\r
#include <windows.h>\r
-static HMODULE PLD_LoadLibrary_wrapper(LPCSTR lpLibFileName)\r
+\r
+static void PLD_Private_WriteString(const char *s)\r
+{\r
+ DWORD dummy;\r
+ WriteFile(GetStdHandle(STD_ERROR_HANDLE), s, PLD_Private_strlen(s), &dummy, NULL);\r
+}\r
+\r
+static HMODULE PLD_Private_LoadLibrary_wrapper(LPCSTR lpLibFileName)\r
{\r
HMODULE hModule = GetModuleHandleA(lpLibFileName);\r
if (hModule != NULL)\r
hModule = LoadLibraryA(lpLibFileName);\r
+ if (hModule == NULL)\r
+ PLD_Private_Log("Failed to load library!", lpLibFileName, GetLastError());\r
return hModule;\r
}\r
-static FARPROC PLD_GetProcAddress_wrapper(HMODULE hModule, LPCSTR lpProcName)\r
+static FARPROC PLD_Private_GetProcAddress_wrapper(HMODULE hModule, LPCSTR lpProcName)\r
{\r
FARPROC lpProc = GetProcAddress(hModule, lpProcName);\r
+ if (lpProc == NULL)\r
+ PLD_Private_Log("Failed to load procedure!", lpProcName, GetLastError());\r
return lpProc;\r
}\r
\r
#define PLD(name) \\r
static HMODULE PLDH(void) { \\r
static HMODULE hModule = NULL; \\r
- if (hModule == NULL) hModule = PLD_LoadLibrary_wrapper(#name); \\r
+ if (hModule == NULL) hModule = PLD_Private_LoadLibrary_wrapper(#name); \\r
return hModule; \\r
} \\r
\r
-#define PFN(name) ((PLDTYPEOF(name))PLD_GetProcAddress_wrapper(PLDH(), #name))\r
+#define PFN(name) ((PLDTYPEOF(name))PLD_Private_GetProcAddress_wrapper(PLDH(), #name))\r
\r
#else\r
#error POSIX Unimplemented!\r
#endif\r
\r
+static void PLD_Private_Log(const char *message, const char *name, int err)\r
+{\r
+ PLD_Private_WriteString(message);\r
+ PLD_Private_WriteString(" (");\r
+ PLD_Private_WriteString(name);\r
+ PLD_Private_WriteString(", err = ");\r
+\r
+ char itoastr[8 + 1];\r
+ char *iter = &itoastr[sizeof(itoastr) - 1];\r
+ *iter-- = 0;\r
+ for (int i = 0; i < sizeof(itoastr) - 1; i++) {\r
+ int digit = err & 0xf;\r
+ if (digit >= 9)\r
+ digit = 'A' + (digit - 10);\r
+ else\r
+ digit = '0' + digit;\r
+ *iter-- = digit;\r
+ err >>= 4;\r
+ }\r
+ PLD_Private_WriteString(++iter);\r
+ PLD_Private_WriteString(")\n");\r
+}\r
+\r
+#ifndef PLDLOG\r
+#define PLDLOG(message, name, err) PLD_Private_Log(message, name, err)\r
+#endif\r
+\r
#endif // COOL_PLD_H\r