示例#1
0
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();
}
示例#2
0
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;
}
示例#3
0
文件: File.cpp 项目: nightstyles/focp
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);
}
示例#4
0
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());
}
示例#5
0
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;
}