in src/native/windows/apps/prunsrv/prunsrv.c [297:372]
static BOOL redirectStdStreams(APX_STDWRAP *lpWrapper, LPAPXCMDLINE lpCmdline)
{
BOOL aErr = FALSE;
BOOL aOut = FALSE;
/* Allocate console if we have none
*/
if (GetConsoleWindow() == NULL) {
HWND hc;
AllocConsole();
if ((hc = GetConsoleWindow()) != NULL)
ShowWindow(hc, SW_HIDE);
}
/* redirect to file or console */
if (lpWrapper->szStdOutFilename) {
if (lstrcmpiW(lpWrapper->szStdOutFilename, PRSRV_AUTO) == 0) {
WCHAR lsn[1024];
aOut = TRUE;
lstrlcpyW(lsn, 1020, lpCmdline->szApplication);
lstrlcatW(lsn, 1020, L"-stdout");
lstrlocaseW(lsn);
lpWrapper->szStdOutFilename = apxLogFile(gPool,
lpWrapper->szLogPath,
lsn,
NULL, TRUE,
SO_LOGROTATE);
}
/* Delete the file if not in append mode
* XXX: See if we can use the params instead of that.
*/
if (!aOut)
DeleteFileW(lpWrapper->szStdOutFilename);
if ((lpWrapper->fpStdOutFile = _wfsopen(lpWrapper->szStdOutFilename,
L"a",
_SH_DENYNO))) {
_dup2(_fileno(lpWrapper->fpStdOutFile), 1);
*stdout = *lpWrapper->fpStdOutFile;
setvbuf(stdout, NULL, _IONBF, 0);
}
else {
lpWrapper->szStdOutFilename = NULL;
}
}
if (lpWrapper->szStdErrFilename) {
if (lstrcmpiW(lpWrapper->szStdErrFilename, PRSRV_AUTO) == 0) {
WCHAR lsn[1024];
aErr = TRUE;
lstrlcpyW(lsn, 1020, lpCmdline->szApplication);
lstrlcatW(lsn, 1020, L"-stderr");
lstrlocaseW(lsn);
lpWrapper->szStdErrFilename = apxLogFile(gPool,
lpWrapper->szLogPath,
lsn,
NULL, TRUE,
SO_LOGROTATE);
}
if (!aErr)
DeleteFileW(lpWrapper->szStdErrFilename);
if ((lpWrapper->fpStdErrFile = _wfsopen(lpWrapper->szStdErrFilename,
L"a",
_SH_DENYNO))) {
_dup2(_fileno(lpWrapper->fpStdErrFile), 2);
*stderr = *lpWrapper->fpStdErrFile;
setvbuf(stderr, NULL, _IONBF, 0);
}
else {
lpWrapper->szStdOutFilename = NULL;
}
}
else if (lpWrapper->fpStdOutFile) {
_dup2(_fileno(lpWrapper->fpStdOutFile), 2);
*stderr = *lpWrapper->fpStdOutFile;
setvbuf(stderr, NULL, _IONBF, 0);
}
return TRUE;
}