// Read an INI file into easy-to-access name/value pairs. // Public domain, Feb 2009, Ben Hoyt, http://benhoyt.com/ #include #include "ini.h" #include "INIReader.h" using std::string; INIReader::INIReader(string filename) { ini_parse(filename.c_str(), ValueHandler, this); } string INIReader::Get(string section, string name, string default_value) { string key = MakeKey(section, name); return _values.count(key) ? _values[key] : default_value; } long INIReader::GetInteger(string section, string name, long default_value) { const char* value = Get(section, name, "").c_str(); char* end; // This parses "1234" (decimal) and also "0x4D2" (hex) long n = strtol(value, &end, 0); return end > value ? n : default_value; } string INIReader::MakeKey(string section, string name) { string key = section + "." + name; // Convert to lower case to make lookups case-insensitive for (int i = 0; i < key.length(); i++) key[i] = tolower(key[i]); return key; } int INIReader::ValueHandler(void* user, const char* section, const char* name, const char* value) { INIReader* reader = (INIReader*)user; reader->_values[MakeKey(section, name)] = value; return 1; }