@@ -299,17 +299,19 @@ std::vector<std::string> WsjcppCore::getListOfFiles(const std::string &sDirname)
299299 return vFiles;
300300 }
301301 DIR *dir = opendir (sDirname .c_str ());
302- struct dirent *entry = readdir (dir);
303- while (entry != NULL ) {
304- if (entry->d_type != DT_DIR) {
305- std::string sDir (entry->d_name );
306- if (sDir != " ." && sDir != " .." ) {
307- vFiles.push_back (sDir );
302+ if (dir != NULL ) {
303+ struct dirent *entry = readdir (dir);
304+ while (entry != NULL ) {
305+ if (entry->d_type != DT_DIR) {
306+ std::string sDir (entry->d_name );
307+ if (sDir != " ." && sDir != " .." ) {
308+ vFiles.push_back (sDir );
309+ }
308310 }
311+ entry = readdir (dir);
309312 }
310- entry = readdir (dir);
313+ closedir (dir);
311314 }
312- closedir (dir);
313315 return vFiles;
314316}
315317
@@ -756,30 +758,31 @@ bool WsjcppCore::recoursiveRemoveDir(const std::string& sDir) {
756758// ---------------------------------------------------------------------
757759// WsjcppLog
758760
759- std::mutex * WsjcppLog::g_WSJCPP_LOG_MUTEX = nullptr ;
760- std::string WsjcppLog::g_WSJCPP_LOG_DIR = " ./" ;
761- std::string WsjcppLog::g_WSJCPP_LOG_FILE = " " ;
762- std::string WsjcppLog::g_WSJCPP_LOG_PREFIX_FILE = " " ;
763- bool WsjcppLog::g_WSJCPP_ENABLE_LOG_FILE = true ;
764- long WsjcppLog::g_WSJCPP_LOG_START_TIME = 0 ;
765- long WsjcppLog::g_WSJCPP_LOG_ROTATION_PERIOD_IN_SECONDS = 51000 ;
766-
767- // Last log messages
768- std::deque<std::string> * WsjcppLog::g_WSJCPP_LOG_LAST_MESSAGES = nullptr ;
761+ WsjcppLogGlobalConf::WsjcppLogGlobalConf () {
762+ //
763+ logDir = " ./" ;
764+ logPrefixFile = " " ;
765+ logFile = " " ;
766+ enableLogFile = true ;
767+ logStartTime = 0 ;
768+ logRotationPeriodInSeconds = 51000 ;
769+ }
769770
770771// ---------------------------------------------------------------------
771772
772- void WsjcppLog ::doLogRotateUpdateFilename (bool bForce) {
773+ void WsjcppLogGlobalConf ::doLogRotateUpdateFilename (bool bForce) {
773774 long t = WsjcppCore::currentTime_seconds ();
774- long nEverySeconds = WsjcppLog::g_WSJCPP_LOG_ROTATION_PERIOD_IN_SECONDS ; // rotate log if started now or if time left more then 1 day
775- if (g_WSJCPP_LOG_START_TIME == 0 || t - g_WSJCPP_LOG_START_TIME > nEverySeconds || bForce) {
776- g_WSJCPP_LOG_START_TIME = t;
777- g_WSJCPP_LOG_FILE = g_WSJCPP_LOG_DIR + " /"
778- + WsjcppLog::g_WSJCPP_LOG_PREFIX_FILE + " _"
779- + WsjcppCore::formatTimeForFilename (g_WSJCPP_LOG_START_TIME ) + " .log" ;
775+ long nEverySeconds = logRotationPeriodInSeconds ; // rotate log if started now or if time left more then 1 day
776+ if (logStartTime == 0 || t - logStartTime > nEverySeconds || bForce) {
777+ logStartTime = t;
778+ logFile = logDir + " /"
779+ + logPrefixFile + " _"
780+ + WsjcppCore::formatTimeForFilename (logStartTime ) + " .log" ;
780781 }
781782}
782783
784+ WsjcppLogGlobalConf WsjcppLog::g_WSJCPP_LOG_GLOBAL_CONF;
785+
783786// ---------------------------------------------------------------------
784787
785788void WsjcppLog::info (const std::string & sTag , const std::string &sMessage ) {
@@ -819,89 +822,67 @@ void WsjcppLog::ok(const std::string &sTag, const std::string &sMessage) {
819822// ---------------------------------------------------------------------
820823
821824std::vector<std::string> WsjcppLog::getLastLogMessages () {
822- WsjcppLog::initGlobalVariables ();
823- std::lock_guard<std::mutex> lock (*WsjcppLog::g_WSJCPP_LOG_MUTEX);
825+ std::lock_guard<std::mutex> lock (WsjcppLog::g_WSJCPP_LOG_GLOBAL_CONF.logMutex );
824826 std::vector<std::string> vRet;
825- for (int i = 0 ; i < g_WSJCPP_LOG_LAST_MESSAGES-> size (); i++) {
826- vRet.push_back (g_WSJCPP_LOG_LAST_MESSAGES-> at (i) );
827+ for (int i = 0 ; i < WsjcppLog::g_WSJCPP_LOG_GLOBAL_CONF. logLastMessages . size (); i++) {
828+ vRet.push_back (WsjcppLog::g_WSJCPP_LOG_GLOBAL_CONF. logLastMessages [i] );
827829 }
828830 return vRet;
829831}
830832
831833// ---------------------------------------------------------------------
832834
833835void WsjcppLog::setLogDirectory (const std::string &sDirectoryPath ) {
834- WsjcppLog::g_WSJCPP_LOG_DIR = sDirectoryPath ;
835- if (!WsjcppCore::dirExists (WsjcppLog::g_WSJCPP_LOG_DIR )) {
836- if (!WsjcppCore::makeDir (WsjcppLog::g_WSJCPP_LOG_DIR )) {
836+ WsjcppLog::g_WSJCPP_LOG_GLOBAL_CONF. logDir = sDirectoryPath ;
837+ if (!WsjcppCore::dirExists (sDirectoryPath )) {
838+ if (!WsjcppCore::makeDir (sDirectoryPath )) {
837839 WsjcppLog::err (" setLogDirectory" , " Could not create log directory '" + sDirectoryPath + " '" );
838840 }
839841 }
840- WsjcppLog::doLogRotateUpdateFilename (true );
842+ WsjcppLog::g_WSJCPP_LOG_GLOBAL_CONF. doLogRotateUpdateFilename (true );
841843}
842844
843845// ---------------------------------------------------------------------
844846
845847void WsjcppLog::setPrefixLogFile (const std::string &sPrefixLogFile ) {
846- WsjcppLog::g_WSJCPP_LOG_PREFIX_FILE = sPrefixLogFile ;
847- WsjcppLog::doLogRotateUpdateFilename (true );
848+ WsjcppLog::g_WSJCPP_LOG_GLOBAL_CONF. logPrefixFile = sPrefixLogFile ;
849+ WsjcppLog::g_WSJCPP_LOG_GLOBAL_CONF. doLogRotateUpdateFilename (true );
848850}
849851
850852// ---------------------------------------------------------------------
851853
852854void WsjcppLog::setEnableLogFile (bool bEnable) {
853- WsjcppLog::g_WSJCPP_ENABLE_LOG_FILE = bEnable;
855+ WsjcppLog::g_WSJCPP_LOG_GLOBAL_CONF. enableLogFile = bEnable;
854856}
855857
856858// ---------------------------------------------------------------------
857859
858860void WsjcppLog::setRotationPeriodInSec (long nRotationPeriodInSec) {
859- WsjcppLog::g_WSJCPP_LOG_ROTATION_PERIOD_IN_SECONDS = nRotationPeriodInSec;
860- }
861-
862- // ---------------------------------------------------------------------
863-
864- void WsjcppLog::initGlobalVariables () {
865- // create deque if not created
866- if (WsjcppLog::g_WSJCPP_LOG_LAST_MESSAGES == nullptr ) {
867- WsjcppLog::g_WSJCPP_LOG_LAST_MESSAGES = new std::deque<std::string>();
868- // std::cout << WsjcppCore::currentTime_logformat() + ", " + WsjcppCore::threadId() + " Init last messages deque\r\n";
869- }
870- // create mutex if not created
871- if (WsjcppLog::g_WSJCPP_LOG_MUTEX == nullptr ) {
872- WsjcppLog::g_WSJCPP_LOG_MUTEX = new std::mutex ();
873- // std::cout << WsjcppCore::currentTime_logformat() + ", " + WsjcppCore::threadId() + " Init mutex for log\r\n";
874- }
875- }
876-
877- // ---------------------------------------------------------------------
878-
879- void WsjcppLog::deinitGlobalVariables () {
880- delete WsjcppLog::g_WSJCPP_LOG_LAST_MESSAGES;
881- delete WsjcppLog::g_WSJCPP_LOG_MUTEX;
861+ WsjcppLog::g_WSJCPP_LOG_GLOBAL_CONF.logRotationPeriodInSeconds = nRotationPeriodInSec;
882862}
883863
884864// ---------------------------------------------------------------------
885865
886866void WsjcppLog::add (WsjcppColorModifier &clr, const std::string &sType , const std::string &sTag , const std::string &sMessage ) {
887- WsjcppLog::initGlobalVariables ();
888- WsjcppLog::doLogRotateUpdateFilename ();
867+ WsjcppLog::g_WSJCPP_LOG_GLOBAL_CONF.doLogRotateUpdateFilename ();
889868
890- std::lock_guard<std::mutex> lock (* WsjcppLog::g_WSJCPP_LOG_MUTEX );
869+ std::lock_guard<std::mutex> lock (WsjcppLog::g_WSJCPP_LOG_GLOBAL_CONF. logMutex );
891870 WsjcppColorModifier def (WsjcppColorCode::FG_DEFAULT);
892871
893872 std::string sLogMessage = WsjcppCore::currentTime_logformat () + " , " + WsjcppCore::threadId ()
894873 + " [" + sType + " ] " + sTag + " : " + sMessage ;
895874 std::cout << clr << sLogMessage << def << std::endl;
896875
897- g_WSJCPP_LOG_LAST_MESSAGES->push_front (sLogMessage );
898- while (g_WSJCPP_LOG_LAST_MESSAGES->size () > 50 ) {
899- g_WSJCPP_LOG_LAST_MESSAGES->pop_back ();
876+ WsjcppLog::g_WSJCPP_LOG_GLOBAL_CONF.logLastMessages .push_front (sLogMessage );
877+
878+
879+ while (WsjcppLog::g_WSJCPP_LOG_GLOBAL_CONF.logLastMessages .size () > 50 ) {
880+ WsjcppLog::g_WSJCPP_LOG_GLOBAL_CONF.logLastMessages .pop_back ();
900881 }
901882
902- // log file
903- if (WsjcppLog::g_WSJCPP_ENABLE_LOG_FILE ) {
904- std::ofstream logFile (WsjcppLog::g_WSJCPP_LOG_FILE , std::ios::app);
883+ // log file
884+ if (WsjcppLog::g_WSJCPP_LOG_GLOBAL_CONF. enableLogFile ) {
885+ std::ofstream logFile (WsjcppLog::g_WSJCPP_LOG_GLOBAL_CONF. logFile , std::ios::app);
905886 if (!logFile) {
906887 std::cout << " Error Opening File" << std::endl;
907888 return ;
0 commit comments