📄 cfgcrypt.cpp
字号:
#include <algorithm>#include "cfgcrypt.h"#ifdef _WIN32 #define snprintf _snprintf#endifusing namespace std;/***********************************************************************************/string& ltrim(string& s){ int (*func)(int) = isspace; string::iterator iter; iter = find_if(s.begin(), s.end(), not1(ptr_fun(func))); s.erase(s.begin(), iter); return s;}string& rtrim(string& s){ int (*func)(int) = isspace; string::reverse_iterator iter; iter = find_if(s.rbegin(), s.rend(), not1(ptr_fun(func))); s.erase(iter.base(), s.end()); return s;}//删除字符串右边的空格char* rtrim(char* p){ if(p==NULL) { return p; } char* q = p+strlen(p)-1; while(isspace(*q)) { --q; } *(q+1) = '\0'; return p;}//删除字符串左边的空格char* ltrim(char* p){ if(p==NULL) { return p; } char* q = p; while(isspace(*q)) { ++q; } if(p!=q) { while(*p++ = *q++){} } return p;}string& trim(string& s){ return rtrim(ltrim(s));}char* trim(char* s){ return ltrim(rtrim(s));}/***********************************************************************************/CCfgCrypt::CCfgCrypt() : m_eScanRet(E_SCAN_NO){}CCfgCrypt::~CCfgCrypt(){}void CCfgCrypt::scanCfgFile(){ const char* pszCfgFile = getenv("PASSWORD_ETC"); if(pszCfgFile == NULL) { m_strScanErr.assign("Env variable 'PASSWORD_ETC' missed!"); m_eScanRet = E_SCAN_ERR; return; } FILE* f = fopen(pszCfgFile, "r"); if(f == NULL) { m_strScanErr.assign("Failed to open file: ").append(pszCfgFile); m_eScanRet = E_SCAN_ERR; return; } while(!feof(f)) { char szLine[128]; fgets(szLine, sizeof(szLine), f); string sLine = ltrim(szLine); if(sLine.empty() || sLine[0]=='#') { continue; } string::size_type pos = sLine.find("="); if(pos==string::npos) { continue; } string strTemp = sLine.substr(0, pos); string s1 = trim(strTemp); strTemp = sLine.substr(pos+1, sLine.size()-pos-1); string s2 = trim(strTemp); map<string, string>::iterator iter1 = m_CfgDict.lower_bound(s1); if(iter1 != m_CfgDict.end() && s1.compare(iter1->first) == 0) { m_strScanErr.assign("Duplicate item: ").append(s1); m_eScanRet = E_SCAN_ERR; fclose(f); return; } else { m_CfgDict.insert(iter1, make_pair(s1, s2)); } } fclose(f); m_eScanRet = E_SCAN_YES; return;}bool CCfgCrypt::getValue(const char* pszItem, string& strValue){ if(m_eScanRet == E_SCAN_NO) { this->scanCfgFile(); } if(m_eScanRet == E_SCAN_ERR) { strValue.assign(m_strScanErr); return false; } map<string, string>::const_iterator iter = m_CfgDict.find(pszItem); if(iter!=m_CfgDict.end()) { char szOut[512]; memset(szOut, 0, sizeof(szOut)); TCrypt::Decrypt(iter->second.c_str(), szOut, sizeof(szOut)); strValue.assign(szOut); return true; } else { char s[128]; memset(s, 0, sizeof(s)); snprintf(s, sizeof(s), "Config error!Item '%s' missed!", pszItem); strValue.assign(s); return false; } return false;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -