ReactOS 0.4.16-dev-1946-g52006dd
log.c File Reference
#include "tcpsvcs.h"
Include dependency graph for log.c:

Go to the source code of this file.

Macros

#define DEBUG
 
#define STATUS_INTEGER_OVERFLOW   ((DWORD)0xC0000095)
 

Functions

static VOID LogToEventLog (LPCWSTR lpMsg, DWORD errNum, DWORD exitCode, UINT flags)
 
static BOOL OpenLogFile ()
 
static VOID LogToFile (LPCWSTR lpMsg, DWORD errNum, DWORD exitCode, UINT flags)
 
VOID LogEvent (LPCWSTR lpMsg, DWORD errNum, DWORD exitCode, UINT flags)
 
BOOL InitLogging ()
 
VOID UninitLogging ()
 

Variables

static LPWSTR lpEventSource = L"tcpsvcs"
 
static WCHAR szLogFileName [MAX_PATH]
 
static HANDLE hLogFile = NULL
 
static OVERLAPPED olWrite
 

Macro Definition Documentation

◆ DEBUG

#define DEBUG

Definition at line 12 of file log.c.

◆ STATUS_INTEGER_OVERFLOW

#define STATUS_INTEGER_OVERFLOW   ((DWORD)0xC0000095)

Definition at line 20 of file log.c.

Function Documentation

◆ InitLogging()

BOOL InitLogging ( )

Definition at line 211 of file log.c.

212{
213#ifdef DEBUG
214 BOOL bRet = FALSE;
215
217 {
219 }
220 StringCchCatW(szLogFileName, ARRAYSIZE(szLogFileName), L"\\tcpsvcs_log.log");
221
222 ZeroMemory(&olWrite, sizeof(OVERLAPPED));
223 olWrite.Offset = 0xFFFFFFFF;
224 olWrite.OffsetHigh = 0xFFFFFFFF;
226 if (olWrite.hEvent)
227 {
229
230 if (OpenLogFile())
231 {
232 WCHAR wcBom = 0xFEFF;
234
235 bRet = WriteFile(hLogFile,
236 &wcBom,
237 sizeof(WCHAR),
239 &olWrite);
240 if (!bRet)
241 {
243 {
244 LogToEventLog(L"Failed to write to log file",
245 GetLastError(),
246 0,
248 }
249 else
250 {
251 bRet = TRUE;
252 }
253 }
254 }
255 }
256
257 return bRet;
258#else
259 return TRUE;
260#endif
261}
static HANDLE hLogFile
Definition: log.c:16
static OVERLAPPED olWrite
Definition: log.c:18
static WCHAR szLogFileName[MAX_PATH]
Definition: log.c:15
static BOOL OpenLogFile()
Definition: log.c:49
static VOID LogToEventLog(LPCWSTR lpMsg, DWORD errNum, DWORD exitCode, UINT flags)
Definition: log.c:24
#define ERROR_IO_PENDING
Definition: dderror.h:15
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define ARRAYSIZE(array)
Definition: filtermapper.c:47
#define GetEnvironmentVariableW(x, y, z)
Definition: compat.h:755
BOOL WINAPI DeleteFileW(IN LPCWSTR lpFileName)
Definition: delete.c:39
BOOL WINAPI WriteFile(IN HANDLE hFile, IN LPCVOID lpBuffer, IN DWORD nNumberOfBytesToWrite OPTIONAL, OUT LPDWORD lpNumberOfBytesWritten, IN LPOVERLAPPED lpOverlapped OPTIONAL)
Definition: rw.c:24
#define L(x)
Definition: resources.c:13
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
GLenum GLsizei GLuint GLint * bytesWritten
Definition: glext.h:11123
#define ZeroMemory
Definition: minwinbase.h:31
STRSAFEAPI StringCchCatW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc)
Definition: strsafe.h:325
STRSAFEAPI StringCchCopyW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc)
Definition: strsafe.h:149
DWORD OffsetHigh
Definition: minwinbase.h:226
DWORD Offset
Definition: minwinbase.h:225
HANDLE hEvent
Definition: minwinbase.h:230
#define LOG_EVENTLOG
Definition: tcpsvcs.h:15
#define LOG_ERROR
Definition: tcpsvcs.h:16
DWORD WINAPI GetLastError(void)
Definition: except.c:1042
#define CreateEvent
Definition: winbase.h:3497
__wchar_t WCHAR
Definition: xmlstorage.h:180

Referenced by _tmain().

◆ LogEvent()

VOID LogEvent ( LPCWSTR  lpMsg,
DWORD  errNum,
DWORD  exitCode,
UINT  flags 
)

Definition at line 197 of file log.c.

201{
202#ifdef DEBUG
203 if (flags & LOG_FILE || flags & LOG_ERROR)
204 LogToFile(lpMsg, errNum, exitCode, flags);
205#endif
206 if (flags & LOG_EVENTLOG)
207 LogToEventLog(lpMsg, errNum, exitCode, flags);
208}
static VOID LogToFile(LPCWSTR lpMsg, DWORD errNum, DWORD exitCode, UINT flags)
Definition: log.c:68
GLbitfield flags
Definition: glext.h:7161

Referenced by _tmain(), AcceptConnections(), ChargenHandler(), CreateServers(), CreateServiceThread(), DaytimeHandler(), DiscardHandler(), EchoHandler(), EchoIncomingPackets(), QotdHandler(), ReceiveIncomingPackets(), RetrieveQuote(), SendLine(), SendTime(), ServerCtrlHandler(), ServiceMain(), SetUpListener(), ShutdownConnection(), StartServer(), and UpdateStatus().

◆ LogToEventLog()

static VOID LogToEventLog ( LPCWSTR  lpMsg,
DWORD  errNum,
DWORD  exitCode,
UINT  flags 
)
static

Definition at line 24 of file log.c.

28{
29 HANDLE hEventLog;
30
32 if (hEventLog)
33 {
34 ReportEventW(hEventLog,
36 0,
37 0,
38 NULL,
39 1,
40 0,
41 &lpMsg,
42 NULL);
43
44 CloseEventLog(hEventLog);
45 }
46}
static LPWSTR lpEventSource
Definition: log.c:14
BOOL WINAPI CloseEventLog(IN HANDLE hEventLog)
Definition: eventlog.c:427
BOOL WINAPI ReportEventW(IN HANDLE hEventLog, IN WORD wType, IN WORD wCategory, IN DWORD dwEventID, IN PSID lpUserSid, IN WORD wNumStrings, IN DWORD dwDataSize, IN LPCWSTR *lpStrings, IN LPVOID lpRawData)
Definition: eventlog.c:1516
HANDLE WINAPI RegisterEventSourceW(IN LPCWSTR lpUNCServerName, IN LPCWSTR lpSourceName)
Definition: eventlog.c:1295
#define EVENTLOG_ERROR_TYPE
Definition: winnt_old.h:3057
#define EVENTLOG_SUCCESS
Definition: winnt_old.h:3056

Referenced by InitLogging(), LogEvent(), and LogToFile().

◆ LogToFile()

static VOID LogToFile ( LPCWSTR  lpMsg,
DWORD  errNum,
DWORD  exitCode,
UINT  flags 
)
static

Definition at line 68 of file log.c.

72{
73 LPWSTR lpFullMsg = NULL;
74 SIZE_T msgLen;
75
76 msgLen = wcslen(lpMsg) + 1;
77
78 if (flags & LOG_ERROR)
79 {
80 LPWSTR lpSysMsg;
81 DWORD eMsgLen;
82
84 NULL,
85 errNum,
87 (LPWSTR)&lpSysMsg,
88 0,
89 NULL);
90
91 msgLen = msgLen + eMsgLen + 40;
92
93 lpFullMsg = HeapAlloc(GetProcessHeap(),
94 0,
95 msgLen * sizeof(TCHAR));
96 if (lpFullMsg)
97 {
98 _snwprintf(lpFullMsg,
99 msgLen,
100 L"%s : %s\tErrNum = %lu ExitCode = %lu\r\n",
101 lpMsg,
102 lpSysMsg,
103 errNum,
104 exitCode);
105 }
106
107 LocalFree(lpSysMsg);
108
109 }
110 else
111 {
112 msgLen += 2;
113
114 lpFullMsg = HeapAlloc(GetProcessHeap(),
115 0,
116 msgLen * sizeof(TCHAR));
117 if (lpFullMsg)
118 {
119 _snwprintf(lpFullMsg,
120 msgLen,
121 L"%s\r\n",
122 lpMsg);
123 }
124 }
125
126 /* Make sure the length in bytes doesn't overflow a DWORD */
127 msgLen = wcslen(lpFullMsg);
128 if (msgLen > (MAXDWORD / sizeof(WCHAR)))
129 {
131 }
132
133 if (lpFullMsg)
134 {
136 DWORD dwRet;
137 BOOL bRet;
138
139 bRet = WriteFile(hLogFile,
140 lpFullMsg,
141 (DWORD)msgLen * sizeof(WCHAR),
143 &olWrite);
144 if (!bRet)
145 {
147 {
148 bRet = FALSE;
149 }
150 else
151 {
152 // Write is pending
154
155 switch (dwRet)
156 {
157 // event has been signaled
158 case WAIT_OBJECT_0:
159 {
161 &olWrite,
163 FALSE);
164 break;
165 }
166
167 default:
168 // An error has occurred in WaitForSingleObject.
169 // This usually indicates a problem with the
170 // OVERLAPPED structure's event handle.
171 bRet = FALSE;
172 break;
173 }
174 }
175 }
176
177 if (!bRet || bytesWritten == 0)
178 {
179 LogToEventLog(L"Failed to write to log file",
180 GetLastError(),
181 0,
183 }
184
186 0,
187 lpFullMsg);
188 }
189
190 if (exitCode > 0)
191 ExitProcess(exitCode);
192}
#define GetProcessHeap()
Definition: compat.h:736
#define HeapAlloc
Definition: compat.h:733
#define HeapFree(x, y, z)
Definition: compat.h:735
VOID WINAPI RaiseException(_In_ DWORD dwExceptionCode, _In_ DWORD dwExceptionFlags, _In_ DWORD nNumberOfArguments, _In_opt_ const ULONG_PTR *lpArguments)
Definition: except.c:700
VOID WINAPI ExitProcess(IN UINT uExitCode)
Definition: proc.c:1489
DWORD WINAPI FormatMessageW(DWORD dwFlags, LPCVOID lpSource, DWORD dwMessageId, DWORD dwLanguageId, LPWSTR lpBuffer, DWORD nSize, __ms_va_list *args)
Definition: format_msg.c:583
#define INFINITE
Definition: serial.h:102
HLOCAL NTAPI LocalFree(HLOCAL hMem)
Definition: heapmem.c:1594
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
BOOL WINAPI GetOverlappedResult(IN HANDLE hFile, IN LPOVERLAPPED lpOverlapped, OUT LPDWORD lpNumberOfBytesTransferred, IN BOOL bWait)
Definition: iocompl.c:221
#define EXCEPTION_INT_OVERFLOW
Definition: minwinbase.h:57
int _snwprintf(wchar_t *buffer, size_t count, const wchar_t *format,...)
#define MAXDWORD
#define LANG_NEUTRAL
Definition: nls.h:22
#define MAKELANGID(p, s)
Definition: nls.h:15
#define SUBLANG_DEFAULT
Definition: nls.h:168
DWORD WINAPI WaitForSingleObject(IN HANDLE hHandle, IN DWORD dwMilliseconds)
Definition: synch.c:82
ULONG_PTR SIZE_T
Definition: typedefs.h:80
#define FORMAT_MESSAGE_FROM_SYSTEM
Definition: winbase.h:400
#define FORMAT_MESSAGE_ALLOCATE_BUFFER
Definition: winbase.h:396
#define WAIT_OBJECT_0
Definition: winbase.h:383
char TCHAR
Definition: xmlstorage.h:189
WCHAR * LPWSTR
Definition: xmlstorage.h:184

Referenced by LogEvent().

◆ OpenLogFile()

static BOOL OpenLogFile ( )
static

Definition at line 49 of file log.c.

50{
54 NULL,
57 NULL);
59 {
60 hLogFile = NULL;
61 return FALSE;
62 }
63
64 return TRUE;
65}
#define INVALID_HANDLE_VALUE
Definition: compat.h:731
#define CreateFileW
Definition: compat.h:741
#define FILE_ATTRIBUTE_NORMAL
Definition: compat.h:137
#define FILE_SHARE_READ
Definition: compat.h:136
#define FILE_FLAG_OVERLAPPED
Definition: disk.h:46
#define OPEN_ALWAYS
Definition: disk.h:70
#define GENERIC_WRITE
Definition: nt_native.h:90

Referenced by DECLARE_INTERFACE_(), InitLogging(), and LogToFile().

◆ UninitLogging()

VOID UninitLogging ( )

Definition at line 264 of file log.c.

265{
266 if (hLogFile)
267 {
270 }
271
272 if (olWrite.hEvent)
273 {
275 }
276}
#define CloseHandle
Definition: compat.h:739
BOOL WINAPI FlushFileBuffers(IN HANDLE hFile)
Definition: fileinfo.c:25

Referenced by _tmain().

Variable Documentation

◆ hLogFile

HANDLE hLogFile = NULL
static

Definition at line 16 of file log.c.

Referenced by InitLog(), InitLogging(), LogToFile(), OpenLogFile(), and UninitLogging().

◆ lpEventSource

LPWSTR lpEventSource = L"tcpsvcs"
static

Definition at line 14 of file log.c.

Referenced by AddNewEventSource(), and LogToEventLog().

◆ olWrite

OVERLAPPED olWrite
static

Definition at line 18 of file log.c.

Referenced by InitLogging(), LogToFile(), and UninitLogging().

◆ szLogFileName

WCHAR szLogFileName[MAX_PATH]
static

Definition at line 15 of file log.c.

Referenced by InitLogging(), and OpenLogFile().