]> localhost Git - pldh.git/commitdiff
Add basic logging
authormisomosi <[email protected]>
Tue, 7 May 2024 00:53:35 +0000 (20:53 -0400)
committermisomosi <[email protected]>
Tue, 7 May 2024 00:53:35 +0000 (20:53 -0400)
pld.h

diff --git a/pld.h b/pld.h
index 0d597bac6d74d6c69c97ac0327a3cc55f776df64..bd4fa0e82a6fe90fbadb4785614e9f51286b7db1 100644 (file)
--- a/pld.h
+++ b/pld.h
@@ -7,32 +7,81 @@
 #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