/* * Copyright 2000, International Business Machines Corporation and others. * All Rights Reserved. * * This software has been released under the terms of the IBM Public * License. For details, see the LICENSE file in the top-level source * directory or online at http://www.openafs.org/dl/license10.html */ /* * INCLUDES ___________________________________________________________________ * */ extern "C" { #include #include } extern "C" { #include } #include #include #include "logfile.h" #include #include /* * MEMBER FUNCTIONS _________________________________________________________ * */ LOGFILE::LOGFILE() { m_fp = 0; } LOGFILE::~LOGFILE() { if (m_fp) Close(); } BOOL LOGFILE::Open(const char *pszLogFilePath, LOGFILE_OPEN_MODE eOpenMode, LOGFILE_TIMESTAMP_MODE eTimeStampMode) { char *pszOpenMode; m_eTimeStampMode = eTimeStampMode; if (eOpenMode == OM_OVERWRITE) pszOpenMode = "w"; else pszOpenMode = "a+"; strcpy(m_szPath, pszLogFilePath); m_fp = fopen(pszLogFilePath, pszOpenMode); if (m_fp) { if (m_eTimeStampMode != TSM_NEVER) WriteTimeStamp(); fprintf(m_fp, "Log file open.\r\n"); return TRUE; } return FALSE; } BOOL LOGFILE::Close() { int nResult = 0; if (m_fp) { if (m_eTimeStampMode != TSM_NEVER) WriteTimeStamp(); fprintf(m_fp, "Closing log file.\r\n"); nResult = fclose(m_fp); if (nResult == 0) m_fp = 0; } return (nResult == 0); } BOOL LOGFILE::Write(const char *pszEntry, ...) { static BOOL bTimestampNextLine = TRUE; if (!m_fp) return FALSE; if (bTimestampNextLine && (m_eTimeStampMode == TSM_EACH_ENTRY)) WriteTimeStamp(); va_list args; va_start(args, pszEntry); int nWritten = vfprintf(m_fp, pszEntry, args); va_end(args); fflush(m_fp); // Don't timestamp next line unless current line ended with a newline bTimestampNextLine = (pszEntry[strlen(pszEntry) - 1] == '\n'); return (nWritten > 0); } BOOL LOGFILE::WriteError(const char *pszMsg, DWORD nErrorCode, ...) { if (!m_fp) return FALSE; if (m_eTimeStampMode == TSM_EACH_ENTRY) WriteTimeStamp(); va_list args; va_start(args, nErrorCode); int nWritten = vfprintf(m_fp, pszMsg, args); va_end(args); if (nWritten < 1) return FALSE; afs_status_t nStatus; const char *pszErrorText; int nResult = util_AdminErrorCodeTranslate(nErrorCode, TaLocale_GetLanguage(), &pszErrorText, &nStatus); if (nResult) fprintf(m_fp, ": (0x%lx), %s.\r\n", nErrorCode, pszErrorText); else fprintf(m_fp, ": (0x%lx).\r\n", nErrorCode); fflush(m_fp); return (nWritten > 0); } BOOL LOGFILE::WriteTimeStamp() { if (!m_fp) return FALSE; char szTime[64], szDate[64]; _strtime(szTime); _strdate(szDate); fprintf(m_fp, "%s %s: ", szTime, szDate); return TRUE; } BOOL LOGFILE::WriteBoolResult(BOOL bResult) { if (!m_fp) return FALSE; fprintf(m_fp, "%s.\r\n", bResult ? "Yes" : "No"); fflush(m_fp); return TRUE; } BOOL LOGFILE::WriteMultistring(const char *pszMultiStr) { if (!m_fp) return FALSE; for (const char *p = pszMultiStr; *p; p += strlen(p)) Write("%s\r\n", p); return TRUE; }