in src/native/windows/src/log.c [51:104]
static void logRotate(apx_logfile_st *lf, LPSYSTEMTIME t)
{
WCHAR sName[SIZ_PATHLEN];
ULARGE_INTEGER cft;
ULARGE_INTEGER lft;
HANDLE h;
if (lf->dwRotate == 0)
return;
SystemTimeToFileTime(&lf->sysTime, (LPFILETIME)&lft);
SystemTimeToFileTime(t, (LPFILETIME)&cft);
if (cft.QuadPart < (lft.QuadPart + lf->dwRotate * 10000000ULL))
return;
/* Rotate time */
lf->sysTime = *t;
if (lf->dwRotate < 86400)
StringCchPrintf(sName,
SIZ_PATHLEN,
L"\\%s" LOGF_EXR,
lf->szPrefix,
lf->sysTime.wYear,
lf->sysTime.wMonth,
lf->sysTime.wDay,
lf->sysTime.wHour,
lf->sysTime.wMinute,
lf->sysTime.wSecond);
else
StringCchPrintf(sName,
SIZ_PATHLEN,
L"\\%s" LOGF_EXT,
lf->szPrefix,
lf->sysTime.wYear,
lf->sysTime.wMonth,
lf->sysTime.wDay);
lstrlcpyW(lf->szFile, MAX_PATH, lf->szPath);
lstrlcatW(lf->szFile, MAX_PATH, sName);
h = CreateFileW(lf->szFile,
GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
OPEN_ALWAYS,
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_WRITE_THROUGH | FILE_FLAG_SEQUENTIAL_SCAN,
NULL);
if (h == INVALID_HANDLE_VALUE) {
/* TODO: Log something */
return;
}
/* Make sure we relock the correct file */
APX_LOGLOCK(h);
APX_LOGUNLOCK(lf->hFile);
/* Close original handle */
CloseHandle(lf->hFile);
lf->hFile = h;
}