From 2a8de84342503059e33cfa3a36ee864b1c97daf4 Mon Sep 17 00:00:00 2001 From: David FORT Date: Sun, 1 Nov 2015 21:34:03 +0100 Subject: [PATCH] Take in account @bmiklautz remarks * I have added a function to set the journal identifier * the appender name has been changed from SYSTEMD to JOURNALD --- winpr/include/winpr/wlog.h | 3 +- winpr/libwinpr/utils/wlog/JournaldAppender.c | 61 ++++++++++++++------ winpr/libwinpr/utils/wlog/JournaldAppender.h | 1 + winpr/libwinpr/utils/wlog/wlog.c | 2 +- 4 files changed, 45 insertions(+), 22 deletions(-) diff --git a/winpr/include/winpr/wlog.h b/winpr/include/winpr/wlog.h index 6e86f0806..7ac9dd002 100644 --- a/winpr/include/winpr/wlog.h +++ b/winpr/include/winpr/wlog.h @@ -205,14 +205,13 @@ struct _wLogSyslogAppender }; typedef struct _wLogSyslogAppender wLogSyslogAppender; -#ifdef HAVE_JOURNALD_H struct _wLogJournaldAppender { WLOG_APPENDER_COMMON(); + char *identifier; FILE *stream; }; typedef struct _wLogJournaldAppender wLogJournaldAppender; -#endif /** diff --git a/winpr/libwinpr/utils/wlog/JournaldAppender.c b/winpr/libwinpr/utils/wlog/JournaldAppender.c index 797535790..4b8423018 100644 --- a/winpr/libwinpr/utils/wlog/JournaldAppender.c +++ b/winpr/libwinpr/utils/wlog/JournaldAppender.c @@ -35,12 +35,42 @@ #include "wlog/Message.h" #include "wlog/JournaldAppender.h" +BOOL Wlog_JournaldAppender_SetIdentifier(wLogJournaldAppender* appender, const char *id) +{ + if (appender->identifier) + free(appender->identifier); + + if (appender->stream) + { + fclose(appender->stream); + appender->stream = NULL; + } + + return ((appender->identifier = _strdup(id)) != NULL); +} static BOOL WLog_JournaldAppender_Open(wLog* log, wLogJournaldAppender* appender) { + int fd; + if (!log || !appender) return FALSE; + if (appender->stream) + return TRUE; + + fd = sd_journal_stream_fd(appender->identifier, LOG_INFO, 1); + if (fd < 0) + return FALSE; + + appender->stream = fdopen(fd, "w"); + if (!appender->stream) + { + close(fd); + return FALSE; + } + + setbuffer(appender->stream, NULL, 0); return TRUE; } @@ -109,9 +139,7 @@ wLogJournaldAppender* WLog_JournaldAppender_New(wLog* log) { wLogJournaldAppender* appender; DWORD nSize; - LPSTR env = NULL; LPCSTR name; - int fd; appender = (wLogJournaldAppender*) calloc(1, sizeof(wLogJournaldAppender)); if (!appender) @@ -132,32 +160,26 @@ wLogJournaldAppender* WLog_JournaldAppender_New(wLog* log) nSize = GetEnvironmentVariableA(name, NULL, 0); if (nSize) { - env = (LPSTR) malloc(nSize); - if (!env) + appender->identifier = (LPSTR) malloc(nSize); + if (!appender->identifier) goto error_env_malloc; - GetEnvironmentVariableA(name, env, nSize); + GetEnvironmentVariableA(name, appender->identifier, nSize); + + if (!WLog_JournaldAppender_Open(log, appender)) + goto error_open; } else { - env = _strdup("winpr"); + appender->identifier = _strdup("winpr"); + if (!appender->identifier) + goto error_env_malloc; } - fd = sd_journal_stream_fd(env, LOG_INFO, 1); - if (fd < 0) - goto error_journal_fd; - - appender->stream = fdopen(fd, "w"); - if (!appender->stream) - goto error_stream_open; - setbuffer(appender->stream, NULL, 0); - free(env); return appender; -error_stream_open: - close(fd); -error_journal_fd: - free(env); +error_open: + free(appender->identifier); error_env_malloc: free(appender); return NULL; @@ -169,6 +191,7 @@ void WLog_JournaldAppender_Free(wLog* log, wLogJournaldAppender* appender) { if (appender->stream) fclose(appender->stream); + free(appender->identifier); free(appender); } } diff --git a/winpr/libwinpr/utils/wlog/JournaldAppender.h b/winpr/libwinpr/utils/wlog/JournaldAppender.h index f3606eb03..9f2072d49 100644 --- a/winpr/libwinpr/utils/wlog/JournaldAppender.h +++ b/winpr/libwinpr/utils/wlog/JournaldAppender.h @@ -30,6 +30,7 @@ WINPR_API wLogJournaldAppender* WLog_JournaldAppender_New(wLog* log); WINPR_API void WLog_JournaldAppender_Free(wLog* log, wLogJournaldAppender* appender); +WINPR_API BOOL Wlog_JournaldAppender_SetIdentifier(wLogJournaldAppender* appender, const char *id); #endif /* WINPR_LIBWINPR_UTILS_WLOG_JOURNALDAPPENDER_H_ */ diff --git a/winpr/libwinpr/utils/wlog/wlog.c b/winpr/libwinpr/utils/wlog/wlog.c index 06bfa3ce8..7dc6208e8 100644 --- a/winpr/libwinpr/utils/wlog/wlog.c +++ b/winpr/libwinpr/utils/wlog/wlog.c @@ -703,7 +703,7 @@ wLog* WLog_GetRoot() logAppenderType = WLOG_APPENDER_SYSLOG; #endif /* HAVE_SYSLOG_H */ #ifdef HAVE_JOURNALD_H - else if (_stricmp(env, "SYSTEMD") == 0) + else if (_stricmp(env, "JOURNALD") == 0) logAppenderType = WLOG_APPENDER_JOURNALD; #endif