CMdb::CMdb(const char* sName) { CRbTreeNode* pEnd = m_oMdbTable.End(); g_oMdbMutex.Enter(); CRbTreeNode* pIt = m_oMdbTable.Find(sName); if(pIt != pEnd) FocpAbort(("CMdb::CMdb(%s) failure: repeate register dbname", sName)); pIt = m_oMdbTable.Insert(CString(sName), this); m_sDbName = m_oMdbTable.GetKey(pIt).GetStr(); if(g_oDbList.GetSize()) g_oDbList += ","; g_oDbList += sName; g_oMdbMutex.Leave(); }
uint32 CLogArchiver::GetInt(const char* &pStr, CString &oValue) { SkipWhiteSpace(pStr); if(pStr[0] =='+' || pStr[0] == '-') { ++pStr; oValue = pStr[0]; } while(pStr[0] >= '0' && pStr[0] <= '9') { oValue += pStr[0]; ++pStr; } if(oValue.GetSize()) return 0; return 1; }
void CFile::GetIpFileName(const CIpAddr& oAddr, CString &oIpFileName, bool bFriendly) { if(bFriendly) { SystemLock(); struct hostent *hptr = gethostbyaddr((const char*)&oAddr.nAddr, 4, AF_INET); if(hptr && hptr->h_name && hptr->h_name[0]) oIpFileName = hptr->h_name; SystemUnLock(); } if(oIpFileName.Empty()) { uint8* pAddr = (uint8*)&oAddr.nAddr; CStringFormatter(&oIpFileName).Print("%u8.%u8.%u8.%u8", pAddr[0], pAddr[1], pAddr[2], pAddr[3]); } if(oAddr.nPort) CStringFormatter(&oIpFileName, oIpFileName.GetSize()).Print(":%u16", oAddr.nPort); }
void CLogArchiver::Process(CLogMsg& oLog) { CString oLogInfo; GetLogInfo(oLog, oLogInfo); if(NotAccess()) { ++m_nLogId; if(m_nLogId > m_nLogNo) { if(m_bNeedArch) { m_oFile.Redirect(NULL); DoArchive(); } m_nLogId = 1; } CreateLogFile(); } m_oFile.Write(oLogInfo.GetStr(), oLogInfo.GetSize()); }
CAutoLibrary::CAutoLibrary(const char* sLibDir) { char sLibFile[FOCP_MAX_PATH]; #if defined(WINDOWS)// || defined(CYGWIN_NT) const char * sPostfix = ".dll"; const char * sPrefix = ""; #elif defined(CYGWIN_NT) const char * sPostfix = ".dll"; const char * sPrefix = "cyg"; #else const char * sPostfix = ".so"; const char * sPrefix = "lib"; #endif CDynamicLibrary* pLibrary = NULL; CDiskFileSystem* pFileSystem = CDiskFileSystem::GetInstance(); void* pDirectory = pFileSystem->OpenDirectory(sLibDir); if(pDirectory == NULL) { FocpLog(FOCP_LOG_ERROR, ("OpenDirectory(%s) failure", sLibDir)); return; } //这里不能使用CFile,因为文件驱动的加载需要使用该函数,会形成死递归调用 FILE* fp; CString oLibraryList, oUnLoadList; CString::StringCopy(sLibFile, sLibDir); CString::StringCatenate(sLibFile, "/load.cfg"); pFileSystem->GetOsPathName(sLibFile); fp = fopen(sLibFile, "rb"); if(fp) { fseek(fp, 0, SEEK_END); int32 nSize = ftell(fp); fseek(fp, 0, SEEK_SET); oLibraryList.Append('A', nSize); fread((void*)oLibraryList.GetStr(), 1, nSize, fp); fclose(fp); } CString::StringCopy(sLibFile, sLibDir); CString::StringCatenate(sLibFile, "/unload.cfg"); pFileSystem->GetOsPathName(sLibFile); fp = fopen(sLibFile, "rb"); if(fp) { fseek(fp, 0, SEEK_END); int32 nSize = ftell(fp); fseek(fp, 0, SEEK_SET); oUnLoadList.Append('A', nSize); fread((void*)oUnLoadList.GetStr(), 1, nSize, fp); fclose(fp); } bool bIsDirectory; const char* sFileName; uint32 nLen2 = CString::StringLength(sPostfix); uint32 nLen3 = CString::StringLength(sPrefix); if(!oLibraryList.Empty()) { CString oFileName; CStringFormatter oFormatter(&oLibraryList); while(oFormatter.Scan("%r", &oFileName)==1) { oFileName.Trim(); if(!oFileName.Empty()) { if(!oUnLoadList.Empty()) { uint32 nLen = oFileName.GetSize(); const char* sHead = oUnLoadList.GetStr(); char* sLib = CString::StringOfString(sHead, oFileName.GetStr(), false); if(sLib && (sLib[nLen] == '\0' || CString::IsSpace(sLib[nLen])) && (sHead == sLib || CString::IsSpace(*(sLib-1)))) continue; } CString::StringCopy(sLibFile, sLibDir); CString::StringCatenate(sLibFile, "/"); CString::StringCatenate(sLibFile, sPrefix); CString::StringCatenate(sLibFile, oFileName.GetStr()); CString::StringCatenate(sLibFile, sPostfix); if(pLibrary == NULL) pLibrary = new CDynamicLibrary; if(pLibrary->Load(sLibFile)) { m_oLibrary.Insert(m_oLibrary.GetSize(), pLibrary); pLibrary = NULL; } } } } else while( (sFileName = pFileSystem->ReadDirectory(pDirectory, bIsDirectory)) ) { if(bIsDirectory) continue; uint32 nLen = CString::StringLength(sFileName); if(nLen <= nLen2+nLen3) continue; if(CString::StringCompare(sFileName+nLen-nLen2, sPostfix)) continue; if(nLen3 && CString::StringCompare(sFileName, sPrefix, true, nLen3)) continue; if(!oUnLoadList.Empty()) { uint32 nLen4 = nLen-nLen2-nLen3; CString oSimpleFileName(sFileName+nLen3, nLen4); const char* sHead = oUnLoadList.GetStr(); char* sLib = CString::StringOfString(sHead, oSimpleFileName.GetStr(), false); if(sLib && (sLib[nLen4] == '\0' || CString::IsSpace(sLib[nLen4])) && (sHead == sLib || CString::IsSpace(*(sLib-1)))) continue; } CString::StringCopy(sLibFile, sLibDir); CString::StringCatenate(sLibFile, "/"); CString::StringCatenate(sLibFile, sFileName); if(pLibrary == NULL) pLibrary = new CDynamicLibrary; if(pLibrary->Load(sLibFile)) { m_oLibrary.Insert(m_oLibrary.GetSize(), pLibrary); pLibrary = NULL; } } pFileSystem->CloseDirectory(pDirectory); if(pLibrary) delete pLibrary; }