bool CConfigFile::Load(char const *f_name, bool isEncrypted) { uint32_t size; char *data; FILE *s_file; s_file = fopen(f_name, "rb"); if(!s_file) return false; fseek(s_file, 0, SEEK_END); size = ftell(s_file); fseek(s_file, 0, SEEK_SET); data = (char *)malloc(size); fread(data, 1, size, s_file); fclose(s_file); if(isEncrypted) DecryptMem(data, size); this->Load(data, size); if(data) delete data; return true; }
bool CConfigFile::Load(const char* filename, bool bCrypt) { FILE* fp = fopen(filename, "rb"); if (!fp) { LOG_INFO("File Open Error"); return false; } fseek(fp, 0, SEEK_END); int size = ftell(fp); fseek(fp, 0, SEEK_SET); char* buf = new char[size]; fread(buf, 1, size, fp); fclose(fp); if (bCrypt) DecryptMem(buf, size); Load(buf, size); delete [] buf; buf = NULL; return true; }
bool CConfigFile::Add(const char* group, const char* name, const char* value) { if(group == NULL || name == NULL || value == NULL) return false; char buf[1024]; if (strncmp(value, CRYPTHEADER, LEN_CRYPTHEADER) == 0) { value += LEN_CRYPTHEADER; int len = strlen(value) / 2; char* p = buf; while (*value) { unsigned char v = 0; switch (*value) { case '0': v += 0; break; case '1': v += 1; break; case '2': v += 2; break; case '3': v += 3; break; case '4': v += 4; break; case '5': v += 5; break; case '6': v += 6; break; case '7': v += 7; break; case '8': v += 8; break; case '9': v += 9; break; case 'A': v += 10; break; case 'B': v += 11; break; case 'C': v += 12; break; case 'D': v += 13; break; case 'E': v += 14; break; case 'F': v += 15; break; } value++; v <<= 4; switch (*value) { case '0': v += 0; break; case '1': v += 1; break; case '2': v += 2; break; case '3': v += 3; break; case '4': v += 4; break; case '5': v += 5; break; case '6': v += 6; break; case '7': v += 7; break; case '8': v += 8; break; case '9': v += 9; break; case 'A': v += 10; break; case 'B': v += 11; break; case 'C': v += 12; break; case 'D': v += 13; break; case 'E': v += 14; break; case 'F': v += 15; break; } value++; *p = (char)v; p++; } DecryptMem(buf, len); value = buf; } const char* ret = Find(group, name); if (ret[0]) { strcpy((char*)ret, value); return true; } if (m_cnt == MAX_CONFIG_DATA) return false; m_data[m_cnt] = new CConfigFileData; m_data[m_cnt]->Set(group, name, value); m_cnt++; Sort(); return true; }