some more static analyzer suggestions

This commit is contained in:
DarthArgus
2016-07-25 22:11:10 -07:00
parent 88888e4091
commit 814cf4f731
16 changed files with 3350 additions and 3456 deletions
+300 -307
View File
@@ -16,335 +16,328 @@
#endif
#ifdef EXTERNAL_DISTRO
namespace NAMESPACE
namespace NAMESPACE
{
#endif
namespace Base
{
// set default values for global masks
CAutoLog::eLogLevel CAutoLog::nLogMask = eLOG_NORMAL; // what is logged in log files
CAutoLog::eLogLevel CAutoLog::nPrintMask = eLOG_ERROR; // what is printed on the screen
CAutoLog::eLogLevel CAutoLog::nFlushMask = eLOG_ERROR; // when is file flushed on every entry?
// class info
//-------------------------------------
bool CAutoLog::Open(const char * filename)
//-------------------------------------
{
if( nullptr == filename)
return false;
if (pFilename)
return false;
#ifdef WIN32
pFilename = _strdup(filename);
#else
pFilename = strdup(filename);
#endif
// Sanitize slashes
char *ptr;
while ((ptr = strchr(pFilename,WRONGSLASH)) != nullptr)
*ptr = SLASHCHAR[0];
char strPath[1024];
strcpy(strPath,pFilename);
ptr = strrchr(strPath, SLASHCHAR[0]);
if (ptr != nullptr)
{
*ptr = 0;
#ifdef WIN32
char curdir[128];
// remember current directory
if( _getcwd(curdir,sizeof(curdir)) == nullptr )
{
fprintf(stderr,"CAutoLog::Archive failed to get current directory!\n");
free(pFilename);
pFilename = nullptr;
return false; // error, can't proceed
}
if (_chdir(strPath))
{
// failed to find the directory, so we must create it
if (_mkdir(strPath))
{
fprintf(stderr,"CAutoLog::Archive failed to make directory: %s\n", strPath);
free(pFilename);
pFilename = nullptr;
return false; // error, can't proceed
}
}
else
{
// found the directory, but we don't want to be there, so go back
_chdir(curdir);
}
#else
struct stat SS;
// see if directory exists
if (stat(strPath,&SS))
{
// create directory
if (mkdir(strPath,0777))
{
fprintf(stderr,"CAutoLog::Archive failed to make directory: %s\n", strPath);
free(pFilename);
pFilename = nullptr;
return false; // error, can't proceed
}
}
#endif
}
pFile = fopen(pFilename,"a+");
if( pFile == nullptr || pFile == (FILE *)-1)
namespace Base
{
//fprintf(stderr,"CAutoLog::Open failed to open log file: %s\n",pFilename);
Close();
return false;
}
// set default values for global masks
CAutoLog::eLogLevel CAutoLog::nLogMask = eLOG_NORMAL; // what is logged in log files
CAutoLog::eLogLevel CAutoLog::nPrintMask = eLOG_ERROR; // what is printed on the screen
CAutoLog::eLogLevel CAutoLog::nFlushMask = eLOG_ERROR; // when is file flushed on every entry?
time_t t;
time(&t);
struct tm *ptm = localtime(&t);
nTodaysDayOfYear = ptm->tm_yday;
// class info
//printf("Open log file: %s\n",pFilename);
return true;
}
//-------------------------------------
bool CAutoLog::Open(const char * filename)
//-------------------------------------
{
if (nullptr == filename)
return false;
//-------------------------------------
void CAutoLog::Close(void)
//-------------------------------------
{
if( pFile != (FILE *)-1 && pFile != nullptr)
{
fclose(pFile);
}
pFile = (FILE *)-1;
free(pFilename);
pFilename = nullptr;
}
//-------------------------------------
void CAutoLog::LogError(char * format, ...)
{
char strInput[1024];
// parse format and input arguments
va_list varg;
va_start(varg, format);
vsprintf(strInput, format, varg);
va_end(varg);
Log(eLOG_ERROR, strInput);
}
//-------------------------------------
void CAutoLog::LogAlert(char * format, ...)
{
char strInput[1024];
// parse format and input arguments
va_list varg;
va_start(varg, format);
vsprintf(strInput, format, varg);
va_end(varg);
Log(eLOG_ALERT, strInput);
}
//-------------------------------------
void CAutoLog::Log(char * format, ...)
{
char strInput[1024];
// parse format and input arguments
va_list varg;
va_start(varg, format);
vsprintf(strInput, format, varg);
va_end(varg);
Log(eLOG_NORMAL, strInput);
}
//-------------------------------------
void CAutoLog::LogDebug(char * format, ...)
{
char strInput[1024];
// parse format and input arguments
va_list varg;
va_start(varg, format);
vsprintf(strInput, format, varg);
va_end(varg);
Log(eLOG_DEBUG, strInput);
}
//-------------------------------------
void CAutoLog::Log(eLogLevel severity, char *fmt, ...)
//-------------------------------------
{
if (pFile == (FILE *)-1 || pFile == nullptr)
{
//fprintf(stderr,"CAutoLog::Log called with no file open!\n");
return;
}
if (nLogMask == eLOG_NONE || nLogMask < severity)
{
if (nPrintMask == eLOG_NONE || nPrintMask < severity)
{ // no point in parsing, we're doing nothing.
return;
}
}
char strTime[128];
char strInput[1024];
char strOutput[1024+128];
time_t t;
// parse format and input arguments
va_list varg;
va_start(varg, fmt);
vsprintf(strInput, fmt, varg);
va_end(varg);
// make timestamp
time(&t);
strftime(strTime, sizeof(strTime), "[%m/%d/%Y %H:%M:%S]", localtime(&t) );
// construct output string
sprintf(strOutput, "%s %s\n", strTime, strInput);
// check to see if current file needs to be archived
Archive();
// log to file
if (!(nLogMask == eLOG_NONE || nLogMask < severity))
{
fwrite(strOutput,strlen(strOutput),1,pFile);
}
// print as standard output
if (!(nPrintMask == eLOG_NONE || nPrintMask < severity))
{
printf("%s", strOutput);
}
// flush file buffer if error is high severity
if (severity <= nFlushMask)
fflush(pFile);
}
//-------------------------------------
void CAutoLog::Archive(void)
//-------------------------------------
{
if( pFile == (FILE *)-1 || pFile == nullptr)
{
//fprintf(stderr,"CAutoLog::Archive called with no file open!\n");
return;
}
// check to see if it's time to archive
time_t t;
time(&t);
struct tm *ptm = localtime(&t);
if (ptm->tm_yday == nTodaysDayOfYear)
{
return; // nope, not time to archive
}
nTodaysDayOfYear = ptm->tm_yday;
char strPath[1024];
char strCurrent[1024];
char strTime[128];
char * pCurrent;
if (pFilename)
return false;
#ifdef WIN32
char curdir[128];
pFilename = _strdup(filename);
#else
struct stat SS;
pFilename = strdup(filename);
#endif
strftime(strTime, sizeof(strTime), "%m%d%Y", localtime(&t) ); // numerical time e.g. 041698
// Sanitize slashes
char *ptr;
while ((ptr = strchr(pFilename, WRONGSLASH)) != nullptr)
*ptr = SLASHCHAR[0];
strcpy(strCurrent,pFilename);
pCurrent = strrchr(strCurrent, SLASHCHAR[0]);
if (pCurrent != nullptr)
*pCurrent = 0;
else
sprintf(strCurrent,".");
sprintf(strPath,"%s" SLASHCHAR "%s", strCurrent, strTime); // logs/041698
char strPath[1024];
strcpy(strPath, pFilename);
ptr = strrchr(strPath, SLASHCHAR[0]);
if (ptr != nullptr)
{
*ptr = 0;
#ifdef WIN32
// remember current directory
if( _getcwd(curdir,sizeof(curdir)) == nullptr )
{
fprintf(stderr,"CAutoLog::Archive failed to get current directory!\n");
return; // error, can't proceed
}
char curdir[128];
if (_chdir(strPath))
{
// failed to find the directory, so we must create it
if (_mkdir(strPath))
{
fprintf(stderr,"CAutoLog::Archive failed to make directory: %s\n", strPath);
return; // error, can't proceed
}
}
else
{
// found the directory, but we don't want to be there, so go back
_chdir(curdir);
}
// remember current directory
if (_getcwd(curdir, sizeof(curdir)) == nullptr)
{
fprintf(stderr, "CAutoLog::Archive failed to get current directory!\n");
free(pFilename);
pFilename = nullptr;
return false; // error, can't proceed
}
if (_chdir(strPath))
{
// failed to find the directory, so we must create it
if (_mkdir(strPath))
{
fprintf(stderr, "CAutoLog::Archive failed to make directory: %s\n", strPath);
free(pFilename);
pFilename = nullptr;
return false; // error, can't proceed
}
}
else
{
// found the directory, but we don't want to be there, so go back
_chdir(curdir);
}
#else
// see if directory exists
if (stat(strPath,&SS))
{
// create directory
if (mkdir(strPath,0777))
{
fprintf(stderr,"CAutoLog::Archive failed to make directory: %s\n", strPath);
return; // error, can't proceed
}
}
struct stat SS;
// see if directory exists
if (stat(strPath, &SS))
{
// create directory
if (mkdir(strPath, 0777))
{
fprintf(stderr, "CAutoLog::Archive failed to make directory: %s\n", strPath);
free(pFilename);
pFilename = nullptr;
return false; // error, can't proceed
}
}
#endif
}
pFile = fopen(pFilename, "a+");
if (pFile == nullptr || pFile == (FILE *)-1)
{
//fprintf(stderr,"CAutoLog::Open failed to open log file: %s\n",pFilename);
Close();
return false;
}
time_t t;
time(&t);
struct tm *ptm = localtime(&t);
nTodaysDayOfYear = ptm->tm_yday;
//printf("Open log file: %s\n",pFilename);
return true;
}
//-------------------------------------
void CAutoLog::Close(void)
//-------------------------------------
{
if (pFile != (FILE *)-1 && pFile != nullptr)
{
fclose(pFile);
}
pFile = (FILE *)-1;
free(pFilename);
pFilename = nullptr;
}
//-------------------------------------
void CAutoLog::LogError(char * format, ...)
{
char strInput[1024];
// parse format and input arguments
va_list varg;
va_start(varg, format);
vsprintf(strInput, format, varg);
va_end(varg);
Log(eLOG_ERROR, strInput);
}
//-------------------------------------
void CAutoLog::LogAlert(char * format, ...)
{
char strInput[1024];
// parse format and input arguments
va_list varg;
va_start(varg, format);
vsprintf(strInput, format, varg);
va_end(varg);
Log(eLOG_ALERT, strInput);
}
//-------------------------------------
void CAutoLog::Log(char * format, ...)
{
char strInput[1024];
// parse format and input arguments
va_list varg;
va_start(varg, format);
vsprintf(strInput, format, varg);
va_end(varg);
Log(eLOG_NORMAL, strInput);
}
//-------------------------------------
void CAutoLog::LogDebug(char * format, ...)
{
char strInput[1024];
// parse format and input arguments
va_list varg;
va_start(varg, format);
vsprintf(strInput, format, varg);
va_end(varg);
Log(eLOG_DEBUG, strInput);
}
//-------------------------------------
void CAutoLog::Log(eLogLevel severity, char *fmt, ...)
//-------------------------------------
{
if (pFile == (FILE *)-1 || pFile == nullptr)
{
//fprintf(stderr,"CAutoLog::Log called with no file open!\n");
return;
}
if (nLogMask == eLOG_NONE || nLogMask < severity)
{
if (nPrintMask == eLOG_NONE || nPrintMask < severity)
{ // no point in parsing, we're doing nothing.
return;
}
}
char strTime[128];
char strInput[1024];
char strOutput[1024 + 128];
time_t t;
// parse format and input arguments
va_list varg;
va_start(varg, fmt);
vsprintf(strInput, fmt, varg);
va_end(varg);
// make timestamp
time(&t);
strftime(strTime, sizeof(strTime), "[%m/%d/%Y %H:%M:%S]", localtime(&t));
// construct output string
snprintf(strOutput, 1152, "%s %s\n", strTime, strInput);
// check to see if current file needs to be archived
Archive();
// log to file
if (!(nLogMask == eLOG_NONE || nLogMask < severity))
{
fwrite(strOutput, strlen(strOutput), 1, pFile);
}
// print as standard output
if (!(nPrintMask == eLOG_NONE || nPrintMask < severity))
{
printf("%s", strOutput);
}
// flush file buffer if error is high severity
if (severity <= nFlushMask)
fflush(pFile);
}
//-------------------------------------
void CAutoLog::Archive(void)
//-------------------------------------
{
if (pFile == (FILE *)-1 || pFile == nullptr)
{
//fprintf(stderr,"CAutoLog::Archive called with no file open!\n");
return;
}
// check to see if it's time to archive
time_t t;
time(&t);
struct tm *ptm = localtime(&t);
if (ptm->tm_yday == nTodaysDayOfYear)
{
return; // nope, not time to archive
}
nTodaysDayOfYear = ptm->tm_yday;
char strPath[1024];
char strCurrent[1024];
char strTime[128];
char * pCurrent;
#ifdef WIN32
char curdir[128];
#else
struct stat SS;
#endif
pCurrent = strrchr(pFilename, SLASHCHAR[0]);
if (pCurrent == nullptr)
pCurrent = pFilename;
else
pCurrent++;
strftime(strTime, sizeof(strTime), "%m%d%Y", localtime(&t)); // numerical time e.g. 041698
sprintf(strCurrent,"%s" SLASHCHAR "%s",strPath,pCurrent);
strcpy(strCurrent, pFilename);
pCurrent = strrchr(strCurrent, SLASHCHAR[0]);
if (pCurrent != nullptr)
*pCurrent = 0;
else
sprintf(strCurrent, ".");
fflush(pFile);
fclose(pFile);
snprintf(strPath, 1024, "%s" SLASHCHAR "%s", strCurrent, strTime); // logs/041698
rename(pFilename,strCurrent);
#ifdef WIN32
// remember current directory
if (_getcwd(curdir, sizeof(curdir)) == nullptr)
{
fprintf(stderr, "CAutoLog::Archive failed to get current directory!\n");
return; // error, can't proceed
}
pFile = fopen(pFilename,"w+");
}
if (_chdir(strPath))
{
// failed to find the directory, so we must create it
if (_mkdir(strPath))
{
fprintf(stderr, "CAutoLog::Archive failed to make directory: %s\n", strPath);
return; // error, can't proceed
}
}
else
{
// found the directory, but we don't want to be there, so go back
_chdir(curdir);
}
#else
// see if directory exists
if (stat(strPath, &SS))
{
// create directory
if (mkdir(strPath, 0777))
{
fprintf(stderr, "CAutoLog::Archive failed to make directory: %s\n", strPath);
return; // error, can't proceed
}
}
#endif
};
pCurrent = strrchr(pFilename, SLASHCHAR[0]);
if (pCurrent == nullptr)
pCurrent = pFilename;
else
pCurrent++;
sprintf(strCurrent, "%s" SLASHCHAR "%s", strPath, pCurrent);
fflush(pFile);
fclose(pFile);
rename(pFilename, strCurrent);
pFile = fopen(pFilename, "w+");
}
};
#ifdef EXTERNAL_DISTRO
};
#endif
#endif