diff --git a/client/X11/xf_keyboard.c b/client/X11/xf_keyboard.c index 0347c0f2b..32886f063 100644 --- a/client/X11/xf_keyboard.c +++ b/client/X11/xf_keyboard.c @@ -203,7 +203,8 @@ static const struct x11_key_scancode_t XKB_KEY_NAME_SCANCODE_TABLE[] = { { "RWIN", RDP_SCANCODE_RWIN }, /* 134: RWIN [Super_R] */ { "COMP", RDP_SCANCODE_APPS }, /* 135: COMP [Menu] */ { "STOP", RDP_SCANCODE_BROWSER_STOP }, /* 136: STOP [Cancel] */ - { "AGAI", RDP_SCANCODE_UNKNOWN }, /* 137: AGAI [Redo] */ + { "AGAI" /* codespell:ignore */, RDP_SCANCODE_UNKNOWN }, + /* 137: AGAI [Redo] */ /* codespell:ignore */ { "PROP", RDP_SCANCODE_UNKNOWN }, /* 138: PROP [SunProps] */ { "UNDO", RDP_SCANCODE_UNKNOWN }, /* 139: UNDO [Undo] */ { "FRNT", RDP_SCANCODE_UNKNOWN }, /* 140: FRNT [SunFront] */ diff --git a/libfreerdp/core/gateway/arm.c b/libfreerdp/core/gateway/arm.c index 17e6aa2a1..c14ec11df 100644 --- a/libfreerdp/core/gateway/arm.c +++ b/libfreerdp/core/gateway/arm.c @@ -1064,7 +1064,7 @@ static BOOL arm_handle_bad_request(rdpArm* arm, const HttpResponse* response, BO http_response_log_error_status(WLog_Get(TAG), WLOG_ERROR, response); const size_t len = http_response_get_body_length(response); - const char* msg = (const char*)http_response_get_body(response); + const char* msg = http_response_get_body(response); if (msg && (strnlen(msg, len + 1) > len)) { WLog_Print(arm->log, WLOG_ERROR, "Got HTTP Response data, but length is invalid"); diff --git a/libfreerdp/locale/keyboard_xkbfile.c b/libfreerdp/locale/keyboard_xkbfile.c index cb165a7ce..5c3942718 100644 --- a/libfreerdp/locale/keyboard_xkbfile.c +++ b/libfreerdp/locale/keyboard_xkbfile.c @@ -176,7 +176,8 @@ static const XKB_KEY_NAME_SCANCODE XKB_KEY_NAME_SCANCODE_TABLE[] = { { "RWIN", RDP_SCANCODE_RWIN }, /* 134: RWIN [Super_R] */ { "COMP", RDP_SCANCODE_APPS }, /* 135: COMP [Menu] */ { "STOP", RDP_SCANCODE_BROWSER_STOP }, /* 136: STOP [Cancel] */ - { "AGAI", RDP_SCANCODE_UNKNOWN }, /* 137: AGAI [Redo] */ + { "AGAI" /* codespell:ignore */, RDP_SCANCODE_UNKNOWN }, + /* 137: AGAI [Redo] */ /* codespell:ignore */ { "PROP", RDP_SCANCODE_UNKNOWN }, /* 138: PROP [SunProps] */ { "UNDO", RDP_SCANCODE_UNKNOWN }, /* 139: UNDO [Undo] */ { "FRNT", RDP_SCANCODE_UNKNOWN }, /* 140: FRNT [SunFront] */ diff --git a/scripts/codespell.ignore b/scripts/codespell.ignore index cfb9fc1c8..79d2976d5 100644 --- a/scripts/codespell.ignore +++ b/scripts/codespell.ignore @@ -26,3 +26,5 @@ manuel shs udo wheight +emac +leadin diff --git a/winpr/libwinpr/input/keycode.c b/winpr/libwinpr/input/keycode.c index a7867138a..15acf4ec3 100644 --- a/winpr/libwinpr/input/keycode.c +++ b/winpr/libwinpr/input/keycode.c @@ -698,35 +698,36 @@ static DWORD KEYCODE_TO_VKCODE_XKB[256] = { VK_SNAPSHOT | KBDEXT, /* 107 */ VK_RMENU | KBDEXT, /* 108 */ #endif - 0, /* KEY_LINEFEED 109 */ - VK_HOME | KBDEXT, /* 110 */ - VK_UP | KBDEXT, /* 111 */ - VK_PRIOR | KBDEXT, /* 112 */ - VK_LEFT | KBDEXT, /* 113 */ - VK_RIGHT | KBDEXT, /* 114 */ - VK_END | KBDEXT, /* 115 */ - VK_DOWN | KBDEXT, /* 116 */ - VK_NEXT | KBDEXT, /* 117 */ - VK_INSERT | KBDEXT, /* 118 */ - VK_DELETE | KBDEXT, /* 119 */ - 0, /* KEY_MACRO 120 */ - VK_VOLUME_MUTE | KBDEXT, /* 121 */ - VK_VOLUME_DOWN | KBDEXT, /* 122 */ - VK_VOLUME_UP | KBDEXT, /* 123 */ - 0, /* 124 */ - 0, /* 125 */ - 0, /* KEY_KPPLUSMINUS 126 */ - VK_PAUSE | KBDEXT, /* 127 */ - 0, /* KEY_SCALE 128 */ - VK_ABNT_C2, /* KEY_KPCOMMA 129 */ - VK_HANGUL, /* 130 */ - VK_HANJA, /* 131 */ - VK_OEM_8, /* 132 */ - VK_LWIN | KBDEXT, /* 133 */ - VK_RWIN | KBDEXT, /* 134 */ - VK_APPS | KBDEXT, /* 135 */ - 0, /* 136 */ - 0, /* 137 */ + 0, /* KEY_LINEFEED 109 */ + VK_HOME | KBDEXT, /* 110 */ + VK_UP | KBDEXT, /* 111 */ + VK_PRIOR | KBDEXT, /* 112 */ + VK_LEFT | KBDEXT, /* 113 */ + VK_RIGHT | KBDEXT, /* 114 */ + VK_END | KBDEXT, /* 115 */ + VK_DOWN | KBDEXT, /* 116 */ + VK_NEXT | KBDEXT, /* 117 */ + VK_INSERT | KBDEXT, /* 118 */ + VK_DELETE | KBDEXT, /* 119 */ + 0, /* KEY_MACRO 120 */ + VK_VOLUME_MUTE | KBDEXT, /* 121 */ + VK_VOLUME_DOWN | KBDEXT, /* 122 */ + VK_VOLUME_UP | KBDEXT, /* 123 */ + 0, /* 124 */ + 0, /* 125 */ + 0, /* KEY_KPPLUSMINUS 126 */ + VK_PAUSE | KBDEXT, /* 127 */ + 0, /* KEY_SCALE 128 */ + VK_ABNT_C2, /* KEY_KPCOMMA 129 */ + VK_HANGUL, /* 130 */ + VK_HANJA, /* 131 */ + VK_OEM_8, /* 132 */ + VK_LWIN | KBDEXT, /* 133 */ + VK_RWIN | KBDEXT, /* 134 */ + VK_APPS | KBDEXT, /* 135 */ + 0, /* 136 */ + 0, + /* 137 */ // codespell:ignore 0, /* 138 */ 0, /* 139 */ 0, /* 140 */ diff --git a/winpr/libwinpr/utils/CMakeLists.txt b/winpr/libwinpr/utils/CMakeLists.txt index a4692a3ac..727f884e5 100644 --- a/winpr/libwinpr/utils/CMakeLists.txt +++ b/winpr/libwinpr/utils/CMakeLists.txt @@ -96,7 +96,7 @@ endif() find_package(libsystemd) option(WITH_SYSTEMD "allows to export wLog to systemd journal" ${libsystemd_FOUND}) -if(WITH_LIBSYSTEMD) +if(WITH_SYSTEMD) find_package(libsystemd REQUIRED) winpr_pc_add_requires_private("libsystemd") set(WINPR_HAVE_JOURNALD_H TRUE) diff --git a/winpr/libwinpr/utils/wlog/Appender.h b/winpr/libwinpr/utils/wlog/Appender.h index 00f81196f..abcde61d8 100644 --- a/winpr/libwinpr/utils/wlog/Appender.h +++ b/winpr/libwinpr/utils/wlog/Appender.h @@ -22,7 +22,7 @@ #include "wlog.h" -void WLog_Appender_Free(wLog* log, wLogAppender* appender); +WINPR_LOCAL void WLog_Appender_Free(wLog* log, wLogAppender* appender); #include "FileAppender.h" #include "ConsoleAppender.h" diff --git a/winpr/libwinpr/utils/wlog/BinaryAppender.c b/winpr/libwinpr/utils/wlog/BinaryAppender.c index ce0813b35..c66752f22 100644 --- a/winpr/libwinpr/utils/wlog/BinaryAppender.c +++ b/winpr/libwinpr/utils/wlog/BinaryAppender.c @@ -30,7 +30,7 @@ typedef struct { - WLOG_APPENDER_COMMON(); + wLogAppender common; char* FileName; char* FilePath; @@ -104,7 +104,7 @@ static BOOL WLog_BinaryAppender_Close(WINPR_ATTR_UNUSED wLog* log, wLogAppender* } static BOOL WLog_BinaryAppender_WriteMessage(wLog* log, wLogAppender* appender, - wLogMessage* message) + const wLogMessage* message) { FILE* fp = NULL; wStream* s = NULL; @@ -169,14 +169,14 @@ static BOOL WLog_BinaryAppender_WriteMessage(wLog* log, wLogAppender* appender, static BOOL WLog_BinaryAppender_WriteDataMessage(WINPR_ATTR_UNUSED wLog* log, WINPR_ATTR_UNUSED wLogAppender* appender, - WINPR_ATTR_UNUSED wLogMessage* message) + WINPR_ATTR_UNUSED const wLogMessage* message) { return TRUE; } static BOOL WLog_BinaryAppender_WriteImageMessage(WINPR_ATTR_UNUSED wLog* log, WINPR_ATTR_UNUSED wLogAppender* appender, - WINPR_ATTR_UNUSED wLogMessage* message) + WINPR_ATTR_UNUSED const wLogMessage* message) { return TRUE; } @@ -222,20 +222,18 @@ static void WLog_BinaryAppender_Free(wLogAppender* appender) wLogAppender* WLog_BinaryAppender_New(WINPR_ATTR_UNUSED wLog* log) { - wLogBinaryAppender* BinaryAppender = NULL; - - BinaryAppender = (wLogBinaryAppender*)calloc(1, sizeof(wLogBinaryAppender)); + wLogBinaryAppender* BinaryAppender = (wLogBinaryAppender*)calloc(1, sizeof(wLogBinaryAppender)); if (!BinaryAppender) return NULL; - BinaryAppender->Type = WLOG_APPENDER_BINARY; - BinaryAppender->Open = WLog_BinaryAppender_Open; - BinaryAppender->Close = WLog_BinaryAppender_Close; - BinaryAppender->WriteMessage = WLog_BinaryAppender_WriteMessage; - BinaryAppender->WriteDataMessage = WLog_BinaryAppender_WriteDataMessage; - BinaryAppender->WriteImageMessage = WLog_BinaryAppender_WriteImageMessage; - BinaryAppender->Free = WLog_BinaryAppender_Free; - BinaryAppender->Set = WLog_BinaryAppender_Set; + BinaryAppender->common.Type = WLOG_APPENDER_BINARY; + BinaryAppender->common.Open = WLog_BinaryAppender_Open; + BinaryAppender->common.Close = WLog_BinaryAppender_Close; + BinaryAppender->common.WriteMessage = WLog_BinaryAppender_WriteMessage; + BinaryAppender->common.WriteDataMessage = WLog_BinaryAppender_WriteDataMessage; + BinaryAppender->common.WriteImageMessage = WLog_BinaryAppender_WriteImageMessage; + BinaryAppender->common.Free = WLog_BinaryAppender_Free; + BinaryAppender->common.Set = WLog_BinaryAppender_Set; - return (wLogAppender*)BinaryAppender; + return &BinaryAppender->common; } diff --git a/winpr/libwinpr/utils/wlog/BinaryAppender.h b/winpr/libwinpr/utils/wlog/BinaryAppender.h index fb65d9fa7..bd5b4a9c9 100644 --- a/winpr/libwinpr/utils/wlog/BinaryAppender.h +++ b/winpr/libwinpr/utils/wlog/BinaryAppender.h @@ -23,6 +23,6 @@ #include "wlog.h" WINPR_ATTR_MALLOC(WLog_Appender_Free, 2) -wLogAppender* WLog_BinaryAppender_New(wLog* log); +WINPR_LOCAL wLogAppender* WLog_BinaryAppender_New(wLog* log); #endif /* WINPR_WLOG_BINARY_APPENDER_PRIVATE_H */ diff --git a/winpr/libwinpr/utils/wlog/CallbackAppender.c b/winpr/libwinpr/utils/wlog/CallbackAppender.c index c06b841f5..7a0f37232 100644 --- a/winpr/libwinpr/utils/wlog/CallbackAppender.c +++ b/winpr/libwinpr/utils/wlog/CallbackAppender.c @@ -23,7 +23,7 @@ typedef struct { - WLOG_APPENDER_COMMON(); + wLogAppender common; wLogCallbacks* callbacks; } wLogCallbackAppender; @@ -41,78 +41,85 @@ static BOOL WLog_CallbackAppender_Close(WINPR_ATTR_UNUSED wLog* log, } static BOOL WLog_CallbackAppender_WriteMessage(wLog* log, wLogAppender* appender, - wLogMessage* message) + const wLogMessage* cmessage) { - char prefix[WLOG_MAX_PREFIX_SIZE] = { 0 }; - wLogCallbackAppender* callbackAppender = NULL; - + WINPR_ASSERT(cmessage); if (!appender) return FALSE; - message->PrefixString = prefix; - WLog_Layout_GetMessagePrefix(log, appender->Layout, message); + char prefix[WLOG_MAX_PREFIX_SIZE] = { 0 }; + WLog_Layout_GetMessagePrefix(log, appender->Layout, cmessage, prefix, sizeof(prefix)); - callbackAppender = (wLogCallbackAppender*)appender; + wLogCallbackAppender* callbackAppender = (wLogCallbackAppender*)appender; if (callbackAppender->callbacks && callbackAppender->callbacks->message) - return callbackAppender->callbacks->message(message); + { + wLogMessage message = *cmessage; + message.PrefixString = prefix; + return callbackAppender->callbacks->message(&message); + } else return FALSE; } static BOOL WLog_CallbackAppender_WriteDataMessage(wLog* log, wLogAppender* appender, - wLogMessage* message) + const wLogMessage* cmessage) { - char prefix[WLOG_MAX_PREFIX_SIZE] = { 0 }; - wLogCallbackAppender* callbackAppender = NULL; - if (!appender) return FALSE; - message->PrefixString = prefix; - WLog_Layout_GetMessagePrefix(log, appender->Layout, message); + char prefix[WLOG_MAX_PREFIX_SIZE] = { 0 }; + WLog_Layout_GetMessagePrefix(log, appender->Layout, cmessage, prefix, sizeof(prefix)); - callbackAppender = (wLogCallbackAppender*)appender; + wLogCallbackAppender* callbackAppender = (wLogCallbackAppender*)appender; if (callbackAppender->callbacks && callbackAppender->callbacks->data) - return callbackAppender->callbacks->data(message); + { + wLogMessage message = *cmessage; + message.PrefixString = prefix; + return callbackAppender->callbacks->data(&message); + } else return FALSE; } static BOOL WLog_CallbackAppender_WriteImageMessage(wLog* log, wLogAppender* appender, - wLogMessage* message) + const wLogMessage* cmessage) { - char prefix[WLOG_MAX_PREFIX_SIZE] = { 0 }; - wLogCallbackAppender* callbackAppender = NULL; - + WINPR_ASSERT(cmessage); if (!appender) return FALSE; - message->PrefixString = prefix; - WLog_Layout_GetMessagePrefix(log, appender->Layout, message); + char prefix[WLOG_MAX_PREFIX_SIZE] = { 0 }; + WLog_Layout_GetMessagePrefix(log, appender->Layout, cmessage, prefix, sizeof(prefix)); - callbackAppender = (wLogCallbackAppender*)appender; + wLogCallbackAppender* callbackAppender = (wLogCallbackAppender*)appender; if (callbackAppender->callbacks && callbackAppender->callbacks->image) - return callbackAppender->callbacks->image(message); + { + wLogMessage message = *cmessage; + message.PrefixString = prefix; + return callbackAppender->callbacks->image(&message); + } else return FALSE; } static BOOL WLog_CallbackAppender_WritePacketMessage(wLog* log, wLogAppender* appender, - wLogMessage* message) + const wLogMessage* cmessage) { - char prefix[WLOG_MAX_PREFIX_SIZE] = { 0 }; - wLogCallbackAppender* callbackAppender = NULL; - + WINPR_ASSERT(cmessage); if (!appender) return FALSE; - message->PrefixString = prefix; - WLog_Layout_GetMessagePrefix(log, appender->Layout, message); + char prefix[WLOG_MAX_PREFIX_SIZE] = { 0 }; + WLog_Layout_GetMessagePrefix(log, appender->Layout, cmessage, prefix, sizeof(prefix)); - callbackAppender = (wLogCallbackAppender*)appender; + wLogCallbackAppender* callbackAppender = (wLogCallbackAppender*)appender; if (callbackAppender->callbacks && callbackAppender->callbacks->package) - return callbackAppender->callbacks->package(message); + { + wLogMessage message = *cmessage; + message.PrefixString = prefix; + return callbackAppender->callbacks->package(&message); + } else return FALSE; } @@ -149,22 +156,20 @@ static void WLog_CallbackAppender_Free(wLogAppender* appender) wLogAppender* WLog_CallbackAppender_New(WINPR_ATTR_UNUSED wLog* log) { - wLogCallbackAppender* CallbackAppender = NULL; - - CallbackAppender = (wLogCallbackAppender*)calloc(1, sizeof(wLogCallbackAppender)); + wLogCallbackAppender* CallbackAppender = + (wLogCallbackAppender*)calloc(1, sizeof(wLogCallbackAppender)); if (!CallbackAppender) return NULL; - CallbackAppender->Type = WLOG_APPENDER_CALLBACK; + CallbackAppender->common.Type = WLOG_APPENDER_CALLBACK; + CallbackAppender->common.Open = WLog_CallbackAppender_Open; + CallbackAppender->common.Close = WLog_CallbackAppender_Close; + CallbackAppender->common.WriteMessage = WLog_CallbackAppender_WriteMessage; + CallbackAppender->common.WriteDataMessage = WLog_CallbackAppender_WriteDataMessage; + CallbackAppender->common.WriteImageMessage = WLog_CallbackAppender_WriteImageMessage; + CallbackAppender->common.WritePacketMessage = WLog_CallbackAppender_WritePacketMessage; + CallbackAppender->common.Free = WLog_CallbackAppender_Free; + CallbackAppender->common.Set = WLog_CallbackAppender_Set; - CallbackAppender->Open = WLog_CallbackAppender_Open; - CallbackAppender->Close = WLog_CallbackAppender_Close; - CallbackAppender->WriteMessage = WLog_CallbackAppender_WriteMessage; - CallbackAppender->WriteDataMessage = WLog_CallbackAppender_WriteDataMessage; - CallbackAppender->WriteImageMessage = WLog_CallbackAppender_WriteImageMessage; - CallbackAppender->WritePacketMessage = WLog_CallbackAppender_WritePacketMessage; - CallbackAppender->Free = WLog_CallbackAppender_Free; - CallbackAppender->Set = WLog_CallbackAppender_Set; - - return (wLogAppender*)CallbackAppender; + return &CallbackAppender->common; } diff --git a/winpr/libwinpr/utils/wlog/CallbackAppender.h b/winpr/libwinpr/utils/wlog/CallbackAppender.h index cd10f7d3f..ff1c4fcb6 100644 --- a/winpr/libwinpr/utils/wlog/CallbackAppender.h +++ b/winpr/libwinpr/utils/wlog/CallbackAppender.h @@ -23,6 +23,6 @@ #include "wlog.h" WINPR_ATTR_MALLOC(WLog_Appender_Free, 2) -wLogAppender* WLog_CallbackAppender_New(wLog* log); +WINPR_LOCAL wLogAppender* WLog_CallbackAppender_New(wLog* log); #endif /* WINPR_WLOG_CALLBACK_APPENDER_PRIVATE_H */ diff --git a/winpr/libwinpr/utils/wlog/ConsoleAppender.c b/winpr/libwinpr/utils/wlog/ConsoleAppender.c index 3ada03c4e..5d883ecd6 100644 --- a/winpr/libwinpr/utils/wlog/ConsoleAppender.c +++ b/winpr/libwinpr/utils/wlog/ConsoleAppender.c @@ -33,7 +33,7 @@ typedef struct { - WLOG_APPENDER_COMMON(); + wLogAppender common; int outputStream; } wLogConsoleAppender; @@ -51,33 +51,29 @@ static BOOL WLog_ConsoleAppender_Close(WINPR_ATTR_UNUSED wLog* log, } static BOOL WLog_ConsoleAppender_WriteMessage(wLog* log, wLogAppender* appender, - wLogMessage* message) + const wLogMessage* cmessage) { - FILE* fp = NULL; - char prefix[WLOG_MAX_PREFIX_SIZE] = { 0 }; - wLogConsoleAppender* consoleAppender = NULL; if (!appender) return FALSE; - consoleAppender = (wLogConsoleAppender*)appender; + wLogConsoleAppender* consoleAppender = (wLogConsoleAppender*)appender; - message->PrefixString = prefix; - WLog_Layout_GetMessagePrefix(log, appender->Layout, message); + char prefix[WLOG_MAX_PREFIX_SIZE] = { 0 }; + WLog_Layout_GetMessagePrefix(log, appender->Layout, cmessage, prefix, sizeof(prefix)); #ifdef _WIN32 if (consoleAppender->outputStream == WLOG_CONSOLE_DEBUG) { - OutputDebugStringA(message->PrefixString); - OutputDebugStringA(message->TextString); + OutputDebugStringA(prefix); + OutputDebugStringA(cmessage->TextString); OutputDebugStringA("\n"); return TRUE; } #endif #ifdef ANDROID - (void)fp; android_LogPriority level; - switch (message->Level) + switch (cmessage->Level) { case WLOG_TRACE: level = ANDROID_LOG_VERBOSE; @@ -106,9 +102,10 @@ static BOOL WLog_ConsoleAppender_WriteMessage(wLog* log, wLogAppender* appender, } if (level != ANDROID_LOG_SILENT) - __android_log_print(level, log->Name, "%s%s", message->PrefixString, message->TextString); + __android_log_print(level, log->Name, "%s%s", prefix, cmessage->TextString); #else + FILE* fp = NULL; switch (consoleAppender->outputStream) { case WLOG_CONSOLE_STDOUT: @@ -118,7 +115,7 @@ static BOOL WLog_ConsoleAppender_WriteMessage(wLog* log, wLogAppender* appender, fp = stderr; break; default: - switch (message->Level) + switch (cmessage->Level) { case WLOG_TRACE: case WLOG_DEBUG: @@ -132,8 +129,8 @@ static BOOL WLog_ConsoleAppender_WriteMessage(wLog* log, wLogAppender* appender, break; } - if (message->Level != WLOG_OFF) - (void)fprintf(fp, "%s%s\n", message->PrefixString, message->TextString); + if (cmessage->Level != WLOG_OFF) + (void)fprintf(fp, "%s%s\n", prefix, cmessage->TextString); #endif return TRUE; } @@ -142,7 +139,7 @@ static int g_DataId = 0; static BOOL WLog_ConsoleAppender_WriteDataMessage(WINPR_ATTR_UNUSED wLog* log, WINPR_ATTR_UNUSED wLogAppender* appender, - wLogMessage* message) + const wLogMessage* message) { #if defined(ANDROID) return FALSE; @@ -165,7 +162,7 @@ static int g_ImageId = 0; static BOOL WLog_ConsoleAppender_WriteImageMessage(WINPR_ATTR_UNUSED wLog* log, WINPR_ATTR_UNUSED wLogAppender* appender, - wLogMessage* message) + const wLogMessage* message) { #if defined(ANDROID) return FALSE; @@ -188,7 +185,8 @@ static BOOL WLog_ConsoleAppender_WriteImageMessage(WINPR_ATTR_UNUSED wLog* log, static int g_PacketId = 0; static BOOL WLog_ConsoleAppender_WritePacketMessage(WINPR_ATTR_UNUSED wLog* log, - wLogAppender* appender, wLogMessage* message) + wLogAppender* appender, + const wLogMessage* message) { #if defined(ANDROID) return FALSE; @@ -251,23 +249,21 @@ static void WLog_ConsoleAppender_Free(wLogAppender* appender) wLogAppender* WLog_ConsoleAppender_New(WINPR_ATTR_UNUSED wLog* log) { - wLogConsoleAppender* ConsoleAppender = NULL; - - ConsoleAppender = (wLogConsoleAppender*)calloc(1, sizeof(wLogConsoleAppender)); + wLogConsoleAppender* ConsoleAppender = + (wLogConsoleAppender*)calloc(1, sizeof(wLogConsoleAppender)); if (!ConsoleAppender) return NULL; - ConsoleAppender->Type = WLOG_APPENDER_CONSOLE; - - ConsoleAppender->Open = WLog_ConsoleAppender_Open; - ConsoleAppender->Close = WLog_ConsoleAppender_Close; - ConsoleAppender->WriteMessage = WLog_ConsoleAppender_WriteMessage; - ConsoleAppender->WriteDataMessage = WLog_ConsoleAppender_WriteDataMessage; - ConsoleAppender->WriteImageMessage = WLog_ConsoleAppender_WriteImageMessage; - ConsoleAppender->WritePacketMessage = WLog_ConsoleAppender_WritePacketMessage; - ConsoleAppender->Set = WLog_ConsoleAppender_Set; - ConsoleAppender->Free = WLog_ConsoleAppender_Free; + ConsoleAppender->common.Type = WLOG_APPENDER_CONSOLE; + ConsoleAppender->common.Open = WLog_ConsoleAppender_Open; + ConsoleAppender->common.Close = WLog_ConsoleAppender_Close; + ConsoleAppender->common.WriteMessage = WLog_ConsoleAppender_WriteMessage; + ConsoleAppender->common.WriteDataMessage = WLog_ConsoleAppender_WriteDataMessage; + ConsoleAppender->common.WriteImageMessage = WLog_ConsoleAppender_WriteImageMessage; + ConsoleAppender->common.WritePacketMessage = WLog_ConsoleAppender_WritePacketMessage; + ConsoleAppender->common.Set = WLog_ConsoleAppender_Set; + ConsoleAppender->common.Free = WLog_ConsoleAppender_Free; ConsoleAppender->outputStream = WLOG_CONSOLE_DEFAULT; @@ -276,5 +272,5 @@ wLogAppender* WLog_ConsoleAppender_New(WINPR_ATTR_UNUSED wLog* log) ConsoleAppender->outputStream = WLOG_CONSOLE_DEBUG; #endif - return (wLogAppender*)ConsoleAppender; + return &ConsoleAppender->common; } diff --git a/winpr/libwinpr/utils/wlog/ConsoleAppender.h b/winpr/libwinpr/utils/wlog/ConsoleAppender.h index f6a1405ca..0c86d7a41 100644 --- a/winpr/libwinpr/utils/wlog/ConsoleAppender.h +++ b/winpr/libwinpr/utils/wlog/ConsoleAppender.h @@ -23,6 +23,6 @@ #include "wlog.h" WINPR_ATTR_MALLOC(WLog_Appender_Free, 2) -wLogAppender* WLog_ConsoleAppender_New(wLog* log); +WINPR_LOCAL wLogAppender* WLog_ConsoleAppender_New(wLog* log); #endif /* WINPR_WLOG_CONSOLE_APPENDER_PRIVATE_H */ diff --git a/winpr/libwinpr/utils/wlog/FileAppender.c b/winpr/libwinpr/utils/wlog/FileAppender.c index d8df8a69e..e3be3c5a5 100644 --- a/winpr/libwinpr/utils/wlog/FileAppender.c +++ b/winpr/libwinpr/utils/wlog/FileAppender.c @@ -29,7 +29,7 @@ typedef struct { - WLOG_APPENDER_COMMON(); + wLogAppender common; char* FileName; char* FilePath; @@ -126,24 +126,21 @@ static BOOL WLog_FileAppender_Close(wLog* log, wLogAppender* appender) return TRUE; } -static BOOL WLog_FileAppender_WriteMessage(wLog* log, wLogAppender* appender, wLogMessage* message) +static BOOL WLog_FileAppender_WriteMessage(wLog* log, wLogAppender* appender, + const wLogMessage* cmessage) { - FILE* fp = NULL; - char prefix[WLOG_MAX_PREFIX_SIZE] = { 0 }; - wLogFileAppender* fileAppender = NULL; - - if (!log || !appender || !message) + if (!log || !appender || !cmessage) return FALSE; - fileAppender = (wLogFileAppender*)appender; - fp = fileAppender->FileDescriptor; + wLogFileAppender* fileAppender = (wLogFileAppender*)appender; + FILE* fp = fileAppender->FileDescriptor; if (!fp) return FALSE; - message->PrefixString = prefix; - WLog_Layout_GetMessagePrefix(log, appender->Layout, message); - (void)fprintf(fp, "%s%s\n", message->PrefixString, message->TextString); + char prefix[WLOG_MAX_PREFIX_SIZE] = { 0 }; + WLog_Layout_GetMessagePrefix(log, appender->Layout, cmessage, prefix, sizeof(prefix)); + (void)fprintf(fp, "%s%s\n", prefix, cmessage->TextString); (void)fflush(fp); /* slow! */ return TRUE; } @@ -151,7 +148,7 @@ static BOOL WLog_FileAppender_WriteMessage(wLog* log, wLogAppender* appender, wL static int g_DataId = 0; static BOOL WLog_FileAppender_WriteDataMessage(wLog* log, wLogAppender* appender, - wLogMessage* message) + const wLogMessage* message) { int DataId = 0; char* FullFileName = NULL; @@ -169,7 +166,7 @@ static BOOL WLog_FileAppender_WriteDataMessage(wLog* log, wLogAppender* appender static int g_ImageId = 0; static BOOL WLog_FileAppender_WriteImageMessage(wLog* log, wLogAppender* appender, - wLogMessage* message) + const wLogMessage* message) { int ImageId = 0; char* FullFileName = NULL; @@ -227,14 +224,14 @@ wLogAppender* WLog_FileAppender_New(WINPR_ATTR_UNUSED wLog* log) if (!FileAppender) return NULL; - FileAppender->Type = WLOG_APPENDER_FILE; - FileAppender->Open = WLog_FileAppender_Open; - FileAppender->Close = WLog_FileAppender_Close; - FileAppender->WriteMessage = WLog_FileAppender_WriteMessage; - FileAppender->WriteDataMessage = WLog_FileAppender_WriteDataMessage; - FileAppender->WriteImageMessage = WLog_FileAppender_WriteImageMessage; - FileAppender->Free = WLog_FileAppender_Free; - FileAppender->Set = WLog_FileAppender_Set; + FileAppender->common.Type = WLOG_APPENDER_FILE; + FileAppender->common.Open = WLog_FileAppender_Open; + FileAppender->common.Close = WLog_FileAppender_Close; + FileAppender->common.WriteMessage = WLog_FileAppender_WriteMessage; + FileAppender->common.WriteDataMessage = WLog_FileAppender_WriteDataMessage; + FileAppender->common.WriteImageMessage = WLog_FileAppender_WriteImageMessage; + FileAppender->common.Free = WLog_FileAppender_Free; + FileAppender->common.Set = WLog_FileAppender_Set; name = "WLOG_FILEAPPENDER_OUTPUT_FILE_PATH"; nSize = GetEnvironmentVariableA(name, NULL, 0); diff --git a/winpr/libwinpr/utils/wlog/FileAppender.h b/winpr/libwinpr/utils/wlog/FileAppender.h index 8938488c0..52c5fd879 100644 --- a/winpr/libwinpr/utils/wlog/FileAppender.h +++ b/winpr/libwinpr/utils/wlog/FileAppender.h @@ -23,6 +23,6 @@ #include "wlog.h" WINPR_ATTR_MALLOC(WLog_Appender_Free, 2) -wLogAppender* WLog_FileAppender_New(wLog* log); +WINPR_LOCAL wLogAppender* WLog_FileAppender_New(wLog* log); #endif /* WINPR_WLOG_FILE_APPENDER_PRIVATE_H */ diff --git a/winpr/libwinpr/utils/wlog/JournaldAppender.c b/winpr/libwinpr/utils/wlog/JournaldAppender.c index 7efa81388..3748d3e28 100644 --- a/winpr/libwinpr/utils/wlog/JournaldAppender.c +++ b/winpr/libwinpr/utils/wlog/JournaldAppender.c @@ -31,7 +31,7 @@ typedef struct { - WLOG_APPENDER_COMMON(); + wLogAppender common; char* identifier; FILE* stream; } wLogJournaldAppender; @@ -72,18 +72,15 @@ static BOOL WLog_JournaldAppender_Close(wLog* log, wLogAppender* appender) } static BOOL WLog_JournaldAppender_WriteMessage(wLog* log, wLogAppender* appender, - wLogMessage* message) + const wLogMessage* cmessage) { - char* formatStr = NULL; - wLogJournaldAppender* journaldAppender = NULL; - char prefix[WLOG_MAX_PREFIX_SIZE] = { 0 }; - - if (!log || !appender || !message) + if (!log || !appender || !cmessage) return FALSE; - journaldAppender = (wLogJournaldAppender*)appender; + wLogJournaldAppender* journaldAppender = (wLogJournaldAppender*)appender; - switch (message->Level) + const char* formatStr = NULL; + switch (cmessage->Level) { case WLOG_TRACE: case WLOG_DEBUG: @@ -104,25 +101,25 @@ static BOOL WLog_JournaldAppender_WriteMessage(wLog* log, wLogAppender* appender case WLOG_OFF: return TRUE; default: - (void)fprintf(stderr, "%s: unknown level %" PRIu32 "\n", __func__, message->Level); + (void)fprintf(stderr, "%s: unknown level %" PRIu32 "\n", __func__, cmessage->Level); return FALSE; } - message->PrefixString = prefix; - WLog_Layout_GetMessagePrefix(log, appender->Layout, message); + char prefix[WLOG_MAX_PREFIX_SIZE] = { 0 }; + WLog_Layout_GetMessagePrefix(log, appender->Layout, cmessage, prefix, sizeof(prefix)); - if (message->Level != WLOG_OFF) + if (cmessage->Level != WLOG_OFF) { WINPR_PRAGMA_DIAG_PUSH WINPR_PRAGMA_DIAG_IGNORED_FORMAT_NONLITERAL(void) - fprintf(journaldAppender->stream, formatStr, message->PrefixString, message->TextString); + fprintf(journaldAppender->stream, formatStr, prefix, cmessage->TextString); WINPR_PRAGMA_DIAG_POP } return TRUE; } static BOOL WLog_JournaldAppender_WriteDataMessage(wLog* log, wLogAppender* appender, - wLogMessage* message) + const wLogMessage* message) { if (!log || !appender || !message) return FALSE; @@ -131,7 +128,7 @@ static BOOL WLog_JournaldAppender_WriteDataMessage(wLog* log, wLogAppender* appe } static BOOL WLog_JournaldAppender_WriteImageMessage(wLog* log, wLogAppender* appender, - wLogMessage* message) + const wLogMessage* message) { if (!log || !appender || !message) return FALSE; @@ -175,24 +172,22 @@ static void WLog_JournaldAppender_Free(wLogAppender* appender) wLogAppender* WLog_JournaldAppender_New(wLog* log) { - wLogJournaldAppender* appender = NULL; - DWORD nSize = 0; LPCSTR name = "WLOG_JOURNALD_ID"; - appender = (wLogJournaldAppender*)calloc(1, sizeof(wLogJournaldAppender)); + wLogJournaldAppender* appender = (wLogJournaldAppender*)calloc(1, sizeof(wLogJournaldAppender)); if (!appender) return NULL; - appender->Type = WLOG_APPENDER_JOURNALD; - appender->Open = WLog_JournaldAppender_Open; - appender->Close = WLog_JournaldAppender_Close; - appender->WriteMessage = WLog_JournaldAppender_WriteMessage; - appender->WriteDataMessage = WLog_JournaldAppender_WriteDataMessage; - appender->WriteImageMessage = WLog_JournaldAppender_WriteImageMessage; - appender->Set = WLog_JournaldAppender_Set; - appender->Free = WLog_JournaldAppender_Free; + appender->common.Type = WLOG_APPENDER_JOURNALD; + appender->common.Open = WLog_JournaldAppender_Open; + appender->common.Close = WLog_JournaldAppender_Close; + appender->common.WriteMessage = WLog_JournaldAppender_WriteMessage; + appender->common.WriteDataMessage = WLog_JournaldAppender_WriteDataMessage; + appender->common.WriteImageMessage = WLog_JournaldAppender_WriteImageMessage; + appender->common.Set = WLog_JournaldAppender_Set; + appender->common.Free = WLog_JournaldAppender_Free; - nSize = GetEnvironmentVariableA(name, NULL, 0); + const DWORD nSize = GetEnvironmentVariableA(name, NULL, 0); if (nSize) { appender->identifier = (LPSTR)malloc(nSize); diff --git a/winpr/libwinpr/utils/wlog/JournaldAppender.h b/winpr/libwinpr/utils/wlog/JournaldAppender.h index 49223c516..693f3fcff 100644 --- a/winpr/libwinpr/utils/wlog/JournaldAppender.h +++ b/winpr/libwinpr/utils/wlog/JournaldAppender.h @@ -26,6 +26,6 @@ #include "wlog.h" -wLogAppender* WLog_JournaldAppender_New(wLog* log); +WINPR_LOCAL wLogAppender* WLog_JournaldAppender_New(wLog* log); #endif /* WINPR_LIBWINPR_UTILS_WLOG_JOURNALDAPPENDER_H_ */ diff --git a/winpr/libwinpr/utils/wlog/Layout.c b/winpr/libwinpr/utils/wlog/Layout.c index e7cf52d6d..2374d7838 100644 --- a/winpr/libwinpr/utils/wlog/Layout.c +++ b/winpr/libwinpr/utils/wlog/Layout.c @@ -56,7 +56,12 @@ struct format_option const char* replace; size_t replacelen; const char* (*fkt)(void*); - void* arg; + union + { + void* pv; + const void* cpv; + size_t s; + } arg; const char* (*ext)(const struct format_option* opt, const char* str, size_t* preplacelen, size_t* pskiplen); struct format_option_recurse* recurse; @@ -68,7 +73,7 @@ struct format_option_recurse size_t nroptions; wLog* log; wLogLayout* layout; - wLogMessage* message; + const wLogMessage* message; char buffer[WLOG_MAX_PREFIX_SIZE]; }; @@ -76,20 +81,19 @@ struct format_option_recurse * Log Layout */ WINPR_ATTR_FORMAT_ARG(3, 0) -static void WLog_PrintMessagePrefixVA(WINPR_ATTR_UNUSED wLog* log, wLogMessage* message, +static void WLog_PrintMessagePrefixVA(char* prefix, size_t prefixlen, WINPR_FORMAT_ARG const char* format, va_list args) { - WINPR_ASSERT(message); - (void)vsnprintf(message->PrefixString, WLOG_MAX_PREFIX_SIZE - 1, format, args); + (void)vsnprintf(prefix, prefixlen, format, args); } WINPR_ATTR_FORMAT_ARG(3, 4) -static void WLog_PrintMessagePrefix(wLog* log, wLogMessage* message, +static void WLog_PrintMessagePrefix(char* prefix, size_t prefixlen, WINPR_FORMAT_ARG const char* format, ...) { va_list args; va_start(args, format); - WLog_PrintMessagePrefixVA(log, message, format, args); + WLog_PrintMessagePrefixVA(prefix, prefixlen, format, args); va_end(args); } @@ -158,7 +162,7 @@ static const char* skip_if_null(const struct format_option* opt, const char* fmt return NULL; *pskiplen = WINPR_ASSERTING_INT_CAST(size_t, end - fmt) + opt->replacelen; - if (!opt->arg) + if (!opt->arg.cpv) return NULL; const size_t replacelen = WINPR_ASSERTING_INT_CAST(size_t, end - str); @@ -192,12 +196,12 @@ static BOOL replace_format_string(const char* FormatString, struct format_option size_t replacelen = opt->replacelen; size_t fmtlen = opt->fmtlen; const char* replace = opt->replace; - const void* arg = opt->arg; + const void* arg = opt->arg.cpv; if (opt->ext) replace = opt->ext(opt, FormatString, &replacelen, &fmtlen); if (opt->fkt) - arg = opt->fkt(opt->arg); + arg = opt->fkt(opt->arg.pv); if (replace && (replacelen > 0)) { @@ -231,12 +235,14 @@ static BOOL replace_format_string(const char* FormatString, struct format_option return TRUE; } -BOOL WLog_Layout_GetMessagePrefix(wLog* log, wLogLayout* layout, wLogMessage* message) +BOOL WLog_Layout_GetMessagePrefix(wLog* log, wLogLayout* layout, const wLogMessage* message, + char* prefix, size_t prefixlen) { char format[WLOG_MAX_PREFIX_SIZE] = { 0 }; WINPR_ASSERT(layout); WINPR_ASSERT(message); + WINPR_ASSERT(prefix); struct format_tid_arg targ = { 0 }; @@ -249,37 +255,77 @@ BOOL WLog_Layout_GetMessagePrefix(wLog* log, wLogLayout* layout, wLogMessage* me #define ENTRY(x) x, sizeof(x) - 1 struct format_option options[] = { - { ENTRY("%ctx"), ENTRY("%s"), log->custom, log->context, NULL, &recurse }, /* log context */ - { ENTRY("%dw"), ENTRY("%u"), NULL, (void*)(size_t)localTime.wDayOfWeek, NULL, + { ENTRY("%ctx"), + ENTRY("%s"), + log->custom, + { .pv = log->context }, + NULL, + &recurse }, /* log context */ + { ENTRY("%dw"), + ENTRY("%u"), + NULL, + { .s = localTime.wDayOfWeek }, + NULL, &recurse }, /* day of week */ - { ENTRY("%dy"), ENTRY("%u"), NULL, (void*)(size_t)localTime.wDay, NULL, - &recurse }, /* day of year */ - { ENTRY("%fl"), ENTRY("%s"), NULL, WINPR_CAST_CONST_PTR_AWAY(message->FileName, void*), - NULL, &recurse }, /* file */ - { ENTRY("%fn"), ENTRY("%s"), NULL, WINPR_CAST_CONST_PTR_AWAY(message->FunctionName, void*), - NULL, &recurse }, /* function */ - { ENTRY("%hr"), ENTRY("%02u"), NULL, (void*)(size_t)localTime.wHour, NULL, - &recurse }, /* hours */ - { ENTRY("%ln"), ENTRY("%" PRIuz), NULL, (void*)message->LineNumber, NULL, + { ENTRY("%dy"), ENTRY("%u"), NULL, { .s = localTime.wDay }, NULL, &recurse }, /* day of year + */ + { ENTRY("%fl"), ENTRY("%s"), NULL, { .cpv = message->FileName }, NULL, &recurse }, /* file + */ + { ENTRY("%fn"), + ENTRY("%s"), + NULL, + { .cpv = message->FunctionName }, + NULL, + &recurse }, /* function + */ + { ENTRY("%hr"), ENTRY("%02u"), NULL, { .s = localTime.wHour }, NULL, &recurse }, /* hours */ + { ENTRY("%ln"), + ENTRY("%" PRIuz), + NULL, + { .s = message->LineNumber }, + NULL, &recurse }, /* line number */ - { ENTRY("%lv"), ENTRY("%s"), NULL, - WINPR_CAST_CONST_PTR_AWAY(WLOG_LEVELS[message->Level], void*), NULL, + { ENTRY("%lv"), + ENTRY("%s"), + NULL, + { .cpv = WLOG_LEVELS[message->Level] }, + NULL, &recurse }, /* log level */ - { ENTRY("%mi"), ENTRY("%02u"), NULL, (void*)(size_t)localTime.wMinute, NULL, - &recurse }, /* minutes */ - { ENTRY("%ml"), ENTRY("%03u"), NULL, (void*)(size_t)localTime.wMilliseconds, NULL, - &recurse }, /* milliseconds */ - { ENTRY("%mn"), ENTRY("%s"), NULL, log->Name, NULL, &recurse }, /* module name */ - { ENTRY("%mo"), ENTRY("%u"), NULL, (void*)(size_t)localTime.wMonth, NULL, - &recurse }, /* month */ - { ENTRY("%pid"), ENTRY("%u"), NULL, (void*)(size_t)GetCurrentProcessId(), NULL, + { ENTRY("%mi"), + ENTRY("%02u"), + NULL, + { .s = localTime.wMinute }, + NULL, + &recurse }, /* minutes + */ + { ENTRY("%ml"), + ENTRY("%03u"), + NULL, + { .s = localTime.wMilliseconds }, + NULL, + &recurse }, /* milliseconds */ + { ENTRY("%mn"), ENTRY("%s"), NULL, { .cpv = log->Name }, NULL, &recurse }, /* module name */ + { ENTRY("%mo"), ENTRY("%u"), NULL, { .s = localTime.wMonth }, NULL, &recurse }, /* month */ + { ENTRY("%pid"), + ENTRY("%u"), + NULL, + { .s = GetCurrentProcessId() }, + NULL, &recurse }, /* process id */ - { ENTRY("%se"), ENTRY("%02u"), NULL, (void*)(size_t)localTime.wSecond, NULL, - &recurse }, /* seconds */ - { ENTRY("%tid"), ENTRY("%s"), get_tid, &targ, NULL, &recurse }, /* thread id */ - { ENTRY("%yr"), ENTRY("%u"), NULL, (void*)(size_t)localTime.wYear, NULL, - &recurse }, /* year */ - { ENTRY("%{"), ENTRY("%}"), NULL, log->context, skip_if_null, + { ENTRY("%se"), + ENTRY("%02u"), + NULL, + { .s = localTime.wSecond }, + NULL, + &recurse }, /* seconds + */ + { ENTRY("%tid"), ENTRY("%s"), get_tid, { .pv = &targ }, NULL, &recurse }, /* thread id */ + { ENTRY("%yr"), ENTRY("%u"), NULL, { .s = localTime.wYear }, NULL, &recurse }, /* year */ + { ENTRY("%{"), + ENTRY("%}"), + NULL, + { .pv = log->context }, + skip_if_null, &recurse }, /* skip if no context */ }; @@ -292,7 +338,7 @@ BOOL WLog_Layout_GetMessagePrefix(wLog* log, wLogLayout* layout, wLogMessage* me WINPR_PRAGMA_DIAG_PUSH WINPR_PRAGMA_DIAG_IGNORED_FORMAT_SECURITY - WLog_PrintMessagePrefix(log, message, format); + WLog_PrintMessagePrefix(prefix, prefixlen, format); WINPR_PRAGMA_DIAG_POP diff --git a/winpr/libwinpr/utils/wlog/Layout.h b/winpr/libwinpr/utils/wlog/Layout.h index 8698077a0..1fb4e7157 100644 --- a/winpr/libwinpr/utils/wlog/Layout.h +++ b/winpr/libwinpr/utils/wlog/Layout.h @@ -33,9 +33,9 @@ struct s_wLogLayout LPSTR FormatString; }; -void WLog_Layout_Free(wLog* log, wLogLayout* layout); +WINPR_LOCAL void WLog_Layout_Free(wLog* log, wLogLayout* layout); WINPR_ATTR_MALLOC(WLog_Layout_Free, 2) -wLogLayout* WLog_Layout_New(wLog* log); +WINPR_LOCAL wLogLayout* WLog_Layout_New(wLog* log); #endif /* WINPR_WLOG_LAYOUT_PRIVATE_H */ diff --git a/winpr/libwinpr/utils/wlog/SyslogAppender.c b/winpr/libwinpr/utils/wlog/SyslogAppender.c index 5849f6f80..05dc5009a 100644 --- a/winpr/libwinpr/utils/wlog/SyslogAppender.c +++ b/winpr/libwinpr/utils/wlog/SyslogAppender.c @@ -25,7 +25,7 @@ typedef struct { - WLOG_APPENDER_COMMON(); + wLogAppender common; } wLogSyslogAppender; static int getSyslogLevel(DWORD level) @@ -66,7 +66,7 @@ static BOOL WLog_SyslogAppender_Close(wLog* log, wLogAppender* appender) } static BOOL WLog_SyslogAppender_WriteMessage(wLog* log, wLogAppender* appender, - wLogMessage* message) + const wLogMessage* message) { int syslogLevel = 0; @@ -81,7 +81,7 @@ static BOOL WLog_SyslogAppender_WriteMessage(wLog* log, wLogAppender* appender, } static BOOL WLog_SyslogAppender_WriteDataMessage(wLog* log, wLogAppender* appender, - wLogMessage* message) + const wLogMessage* message) { int syslogLevel = 0; @@ -96,7 +96,7 @@ static BOOL WLog_SyslogAppender_WriteDataMessage(wLog* log, wLogAppender* append } static BOOL WLog_SyslogAppender_WriteImageMessage(wLog* log, wLogAppender* appender, - wLogMessage* message) + const wLogMessage* message) { int syslogLevel = 0; @@ -118,20 +118,18 @@ static void WLog_SyslogAppender_Free(wLogAppender* appender) wLogAppender* WLog_SyslogAppender_New(WINPR_ATTR_UNUSED wLog* log) { - wLogSyslogAppender* appender = NULL; - - appender = (wLogSyslogAppender*)calloc(1, sizeof(wLogSyslogAppender)); + wLogSyslogAppender* appender = (wLogSyslogAppender*)calloc(1, sizeof(wLogSyslogAppender)); if (!appender) return NULL; - appender->Type = WLOG_APPENDER_SYSLOG; + appender->common.Type = WLOG_APPENDER_SYSLOG; - appender->Open = WLog_SyslogAppender_Open; - appender->Close = WLog_SyslogAppender_Close; - appender->WriteMessage = WLog_SyslogAppender_WriteMessage; - appender->WriteDataMessage = WLog_SyslogAppender_WriteDataMessage; - appender->WriteImageMessage = WLog_SyslogAppender_WriteImageMessage; - appender->Free = WLog_SyslogAppender_Free; + appender->common.Open = WLog_SyslogAppender_Open; + appender->common.Close = WLog_SyslogAppender_Close; + appender->common.WriteMessage = WLog_SyslogAppender_WriteMessage; + appender->common.WriteDataMessage = WLog_SyslogAppender_WriteDataMessage; + appender->common.WriteImageMessage = WLog_SyslogAppender_WriteImageMessage; + appender->common.Free = WLog_SyslogAppender_Free; - return (wLogAppender*)appender; + return &appender->common; } diff --git a/winpr/libwinpr/utils/wlog/SyslogAppender.h b/winpr/libwinpr/utils/wlog/SyslogAppender.h index bbb30d5c8..c0a07c27d 100644 --- a/winpr/libwinpr/utils/wlog/SyslogAppender.h +++ b/winpr/libwinpr/utils/wlog/SyslogAppender.h @@ -27,6 +27,6 @@ #include "wlog.h" WINPR_ATTR_MALLOC(WLog_Appender_Free, 2) -wLogAppender* WLog_SyslogAppender_New(wLog* log); +WINPR_LOCAL wLogAppender* WLog_SyslogAppender_New(wLog* log); #endif /* WINPR_LIBWINPR_UTILS_WLOG_SYSLOGAPPENDER_H_ */ diff --git a/winpr/libwinpr/utils/wlog/UdpAppender.c b/winpr/libwinpr/utils/wlog/UdpAppender.c index 5425f948d..4a1c02db1 100644 --- a/winpr/libwinpr/utils/wlog/UdpAppender.c +++ b/winpr/libwinpr/utils/wlog/UdpAppender.c @@ -28,7 +28,7 @@ typedef struct { - WLOG_APPENDER_COMMON(); + wLogAppender common; char* host; struct sockaddr targetAddr; int targetAddrLen; @@ -87,22 +87,21 @@ static BOOL WLog_UdpAppender_Close(wLog* log, wLogAppender* appender) return TRUE; } -static BOOL WLog_UdpAppender_WriteMessage(wLog* log, wLogAppender* appender, wLogMessage* message) +static BOOL WLog_UdpAppender_WriteMessage(wLog* log, wLogAppender* appender, + const wLogMessage* cmessage) { - char prefix[WLOG_MAX_PREFIX_SIZE] = { 0 }; - wLogUdpAppender* udpAppender = NULL; - - if (!log || !appender || !message) + if (!log || !appender || !cmessage) return FALSE; - udpAppender = (wLogUdpAppender*)appender; - message->PrefixString = prefix; - WLog_Layout_GetMessagePrefix(log, appender->Layout, message); - (void)_sendto(udpAppender->sock, message->PrefixString, - (int)strnlen(message->PrefixString, INT_MAX), 0, &udpAppender->targetAddr, - udpAppender->targetAddrLen); - (void)_sendto(udpAppender->sock, message->TextString, - (int)strnlen(message->TextString, INT_MAX), 0, &udpAppender->targetAddr, + wLogUdpAppender* udpAppender = (wLogUdpAppender*)appender; + + char prefix[WLOG_MAX_PREFIX_SIZE] = { 0 }; + WLog_Layout_GetMessagePrefix(log, appender->Layout, cmessage, prefix, sizeof(prefix)); + + (void)_sendto(udpAppender->sock, prefix, (int)strnlen(prefix, ARRAYSIZE(prefix)), 0, + &udpAppender->targetAddr, udpAppender->targetAddrLen); + (void)_sendto(udpAppender->sock, cmessage->TextString, + (int)strnlen(cmessage->TextString, INT_MAX), 0, &udpAppender->targetAddr, udpAppender->targetAddrLen); (void)_sendto(udpAppender->sock, "\n", 1, 0, &udpAppender->targetAddr, udpAppender->targetAddrLen); @@ -110,7 +109,7 @@ static BOOL WLog_UdpAppender_WriteMessage(wLog* log, wLogAppender* appender, wLo } static BOOL WLog_UdpAppender_WriteDataMessage(wLog* log, wLogAppender* appender, - wLogMessage* message) + const wLogMessage* message) { if (!log || !appender || !message) return FALSE; @@ -119,7 +118,7 @@ static BOOL WLog_UdpAppender_WriteDataMessage(wLog* log, wLogAppender* appender, } static BOOL WLog_UdpAppender_WriteImageMessage(wLog* log, wLogAppender* appender, - wLogMessage* message) + const wLogMessage* message) { if (!log || !appender || !message) return FALSE; @@ -169,22 +168,21 @@ static void WLog_UdpAppender_Free(wLogAppender* appender) wLogAppender* WLog_UdpAppender_New(wLog* log) { - wLogUdpAppender* appender = NULL; DWORD nSize = 0; LPCSTR name = NULL; - appender = (wLogUdpAppender*)calloc(1, sizeof(wLogUdpAppender)); + wLogUdpAppender* appender = (wLogUdpAppender*)calloc(1, sizeof(wLogUdpAppender)); if (!appender) return NULL; - appender->Type = WLOG_APPENDER_UDP; - appender->Open = WLog_UdpAppender_Open; - appender->Close = WLog_UdpAppender_Close; - appender->WriteMessage = WLog_UdpAppender_WriteMessage; - appender->WriteDataMessage = WLog_UdpAppender_WriteDataMessage; - appender->WriteImageMessage = WLog_UdpAppender_WriteImageMessage; - appender->Free = WLog_UdpAppender_Free; - appender->Set = WLog_UdpAppender_Set; + appender->common.Type = WLOG_APPENDER_UDP; + appender->common.Open = WLog_UdpAppender_Open; + appender->common.Close = WLog_UdpAppender_Close; + appender->common.WriteMessage = WLog_UdpAppender_WriteMessage; + appender->common.WriteDataMessage = WLog_UdpAppender_WriteDataMessage; + appender->common.WriteImageMessage = WLog_UdpAppender_WriteImageMessage; + appender->common.Free = WLog_UdpAppender_Free; + appender->common.Set = WLog_UdpAppender_Set; appender->sock = _socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); if (appender->sock == INVALID_SOCKET) @@ -214,7 +212,7 @@ wLogAppender* WLog_UdpAppender_New(wLog* log) goto error_open; } - return (wLogAppender*)appender; + return &appender->common; error_open: free(appender->host); closesocket(appender->sock); diff --git a/winpr/libwinpr/utils/wlog/UdpAppender.h b/winpr/libwinpr/utils/wlog/UdpAppender.h index eda98b99b..134570657 100644 --- a/winpr/libwinpr/utils/wlog/UdpAppender.h +++ b/winpr/libwinpr/utils/wlog/UdpAppender.h @@ -29,6 +29,6 @@ #include "wlog.h" WINPR_ATTR_MALLOC(WLog_Appender_Free, 2) -wLogAppender* WLog_UdpAppender_New(wLog* log); +WINPR_LOCAL wLogAppender* WLog_UdpAppender_New(wLog* log); #endif /* WINPR_LIBWINPR_UTILS_WLOG_UDPAPPENDER_H_ */ diff --git a/winpr/libwinpr/utils/wlog/wlog.c b/winpr/libwinpr/utils/wlog/wlog.c index d69d2403f..ef4482217 100644 --- a/winpr/libwinpr/utils/wlog/wlog.c +++ b/winpr/libwinpr/utils/wlog/wlog.c @@ -38,6 +38,8 @@ #include "wlog.h" +#define WLOG_MAX_STRING_SIZE 16384 + typedef struct { DWORD Level; @@ -225,11 +227,10 @@ out: return status; } -static BOOL WLog_Write(wLog* log, wLogMessage* message) +static BOOL WLog_Write(wLog* log, const wLogMessage* message) { BOOL status = FALSE; - wLogAppender* appender = NULL; - appender = WLog_GetLogAppender(log); + wLogAppender* appender = WLog_GetLogAppender(log); if (!appender) return FALSE; @@ -256,11 +257,10 @@ static BOOL WLog_Write(wLog* log, wLogMessage* message) return status; } -static BOOL WLog_WriteData(wLog* log, wLogMessage* message) +static BOOL WLog_WriteData(wLog* log, const wLogMessage* message) { BOOL status = 0; - wLogAppender* appender = NULL; - appender = WLog_GetLogAppender(log); + wLogAppender* appender = WLog_GetLogAppender(log); if (!appender) return FALSE; @@ -349,6 +349,24 @@ static BOOL WLog_WritePacket(wLog* log, wLogMessage* message) return status; } +static BOOL WLog_PrintTextMessageInternal(wLog* log, const wLogMessage* cmessage, va_list args) +{ + assert(cmessage); + + char formattedLogMessage[WLOG_MAX_STRING_SIZE] = { 0 }; + wLogMessage message = *cmessage; + message.TextString = formattedLogMessage; + + WINPR_PRAGMA_DIAG_PUSH + WINPR_PRAGMA_DIAG_IGNORED_FORMAT_NONLITERAL + if (vsnprintf(formattedLogMessage, ARRAYSIZE(formattedLogMessage) - 1, cmessage->FormatString, + args) < 0) + return FALSE; + WINPR_PRAGMA_DIAG_POP + + return WLog_Write(log, &message); +} + BOOL WLog_PrintMessageVA(wLog* log, DWORD type, DWORD level, size_t line, const char* file, const char* function, va_list args) { @@ -365,26 +383,7 @@ BOOL WLog_PrintMessageVA(wLog* log, DWORD type, DWORD level, size_t line, const case WLOG_MESSAGE_TEXT: message.FormatString = va_arg(args, const char*); - if (!strchr(message.FormatString, '%')) - { - message.TextString = message.FormatString; - status = WLog_Write(log, &message); - } - else - { - char formattedLogMessage[WLOG_MAX_STRING_SIZE] = { 0 }; - - WINPR_PRAGMA_DIAG_PUSH - WINPR_PRAGMA_DIAG_IGNORED_FORMAT_NONLITERAL - if (vsnprintf(formattedLogMessage, WLOG_MAX_STRING_SIZE - 1, message.FormatString, - args) < 0) - return FALSE; - WINPR_PRAGMA_DIAG_POP - - message.TextString = formattedLogMessage; - status = WLog_Write(log, &message); - } - + status = WLog_PrintTextMessageInternal(log, &message, args); break; case WLOG_MESSAGE_DATA: @@ -418,7 +417,6 @@ BOOL WLog_PrintMessageVA(wLog* log, DWORD type, DWORD level, size_t line, const BOOL WLog_PrintTextMessageVA(wLog* log, DWORD level, size_t line, const char* file, const char* function, const char* fmt, va_list args) { - BOOL status = FALSE; wLogMessage message = { 0 }; message.Type = WLOG_MESSAGE_TEXT; message.Level = level; @@ -428,27 +426,7 @@ BOOL WLog_PrintTextMessageVA(wLog* log, DWORD level, size_t line, const char* fi message.FormatString = fmt; - if (!strchr(message.FormatString, '%')) - { - message.TextString = message.FormatString; - status = WLog_Write(log, &message); - } - else - { - char formattedLogMessage[WLOG_MAX_STRING_SIZE] = { 0 }; - - WINPR_PRAGMA_DIAG_PUSH - WINPR_PRAGMA_DIAG_IGNORED_FORMAT_NONLITERAL - if (vsnprintf(formattedLogMessage, WLOG_MAX_STRING_SIZE - 1, message.FormatString, args) < - 0) - return FALSE; - WINPR_PRAGMA_DIAG_POP - - message.TextString = formattedLogMessage; - status = WLog_Write(log, &message); - } - - return status; + return WLog_PrintTextMessageInternal(log, &message, args); } BOOL WLog_PrintMessage(wLog* log, DWORD type, DWORD level, size_t line, const char* file, diff --git a/winpr/libwinpr/utils/wlog/wlog.h b/winpr/libwinpr/utils/wlog/wlog.h index 2d4a41eb9..9cbf99a3c 100644 --- a/winpr/libwinpr/utils/wlog/wlog.h +++ b/winpr/libwinpr/utils/wlog/wlog.h @@ -23,43 +23,39 @@ #include #define WLOG_MAX_PREFIX_SIZE 512 -#define WLOG_MAX_STRING_SIZE 8192 typedef BOOL (*WLOG_APPENDER_OPEN_FN)(wLog* log, wLogAppender* appender); typedef BOOL (*WLOG_APPENDER_CLOSE_FN)(wLog* log, wLogAppender* appender); typedef BOOL (*WLOG_APPENDER_WRITE_MESSAGE_FN)(wLog* log, wLogAppender* appender, - wLogMessage* message); + const wLogMessage* message); typedef BOOL (*WLOG_APPENDER_WRITE_DATA_MESSAGE_FN)(wLog* log, wLogAppender* appender, - wLogMessage* message); + const wLogMessage* message); typedef BOOL (*WLOG_APPENDER_WRITE_IMAGE_MESSAGE_FN)(wLog* log, wLogAppender* appender, - wLogMessage* message); + const wLogMessage* message); typedef BOOL (*WLOG_APPENDER_WRITE_PACKET_MESSAGE_FN)(wLog* log, wLogAppender* appender, - wLogMessage* message); + const wLogMessage* message); typedef BOOL (*WLOG_APPENDER_SET)(wLogAppender* appender, const char* setting, void* value); typedef void (*WLOG_APPENDER_FREE)(wLogAppender* appender); -#define WLOG_APPENDER_COMMON() \ - DWORD Type; \ - BOOL active; \ - wLogLayout* Layout; \ - CRITICAL_SECTION lock; \ - BOOL recursive; \ - void* TextMessageContext; \ - void* DataMessageContext; \ - void* ImageMessageContext; \ - void* PacketMessageContext; \ - WLOG_APPENDER_OPEN_FN Open; \ - WLOG_APPENDER_CLOSE_FN Close; \ - WLOG_APPENDER_WRITE_MESSAGE_FN WriteMessage; \ - WLOG_APPENDER_WRITE_DATA_MESSAGE_FN WriteDataMessage; \ - WLOG_APPENDER_WRITE_IMAGE_MESSAGE_FN WriteImageMessage; \ - WLOG_APPENDER_WRITE_PACKET_MESSAGE_FN WritePacketMessage; \ - WLOG_APPENDER_FREE Free; \ - WLOG_APPENDER_SET Set - struct s_wLogAppender { - WLOG_APPENDER_COMMON(); + DWORD Type; + BOOL active; + wLogLayout* Layout; + CRITICAL_SECTION lock; + BOOL recursive; + void* TextMessageContext; + void* DataMessageContext; + void* ImageMessageContext; + void* PacketMessageContext; + WLOG_APPENDER_OPEN_FN Open; + WLOG_APPENDER_CLOSE_FN Close; + WLOG_APPENDER_WRITE_MESSAGE_FN WriteMessage; + WLOG_APPENDER_WRITE_DATA_MESSAGE_FN WriteDataMessage; + WLOG_APPENDER_WRITE_IMAGE_MESSAGE_FN WriteImageMessage; + WLOG_APPENDER_WRITE_PACKET_MESSAGE_FN WritePacketMessage; + WLOG_APPENDER_FREE Free; + WLOG_APPENDER_SET Set; }; struct s_wLog @@ -83,8 +79,10 @@ struct s_wLog void* context; }; -extern const char* WLOG_LEVELS[7]; -BOOL WLog_Layout_GetMessagePrefix(wLog* log, wLogLayout* layout, wLogMessage* message); +WINPR_LOCAL extern const char* WLOG_LEVELS[7]; +WINPR_LOCAL BOOL WLog_Layout_GetMessagePrefix(wLog* log, wLogLayout* layout, + const wLogMessage* message, char* prefix, + size_t prefixlen); #include "Layout.h" #include "Appender.h"