| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- #include "precompile.h"
- #include "kvpconfig.h"
- TOOLKIT_API int kvpconfig_init(struct kvpconfig_entry_t* pe, void *container)
- {
- struct kvpconfig_entry_t* entry = pe;
- while (entry && entry->key) {
- if (entry->type == KVP_INTEGER) {
- *(int*)((char*)container + entry->member_offset) = atoi(entry->default_value);
- } else if (entry->type == KVP_STRING) {
- char *tmp = _strdup(entry->default_value);
- char **member = (char**)((char*)container + entry->member_offset);
- *member = tmp;
- } else if (entry->type == KVP_BOOLEAN) {
- int *member = (int*)((char*)container + entry->member_offset);
- if (_stricmp(entry->default_value, "true") == 0 || _stricmp(entry->default_value, "1") == 0)
- *member = 1;
- else if (_stricmp(entry->default_value, "false") == 0 || _stricmp(entry->default_value, "0") == 0)
- *member = 0;
- else
- return -1;
- } else {
- assert(0);
- }
- entry++;
- }
- return 0;
- }
- TOOLKIT_API int kvpconfig_term(struct kvpconfig_entry_t* pe, void *container)
- {
- struct kvpconfig_entry_t* entry = pe;
- while (entry && entry->key) {
- if (entry->type == KVP_STRING) {
- char **member = (char**)((char*)container + entry->member_offset);
- if (*member)
- free(*member);
- }
- entry++;
- }
- return 0;
- }
- TOOLKIT_API int kvpconfig_set(struct kvpconfig_entry_t* pe,
- void *container,
- const char *key,
- const char *value)
- {
- struct kvpconfig_entry_t* entry = pe;
- while (entry && entry->key) {
- if (_stricmp(key, entry->key) == 0) {
- if (entry->type == KVP_INTEGER) {
- *(int*)((char*)container + entry->member_offset) = atoi(value);
- } else if (entry->type == KVP_STRING) {
- char **member = (char**)((char*)container + entry->member_offset);
- if (*member)
- free(*member);
- *member = _strdup(value);
- } else if (entry->type == KVP_BOOLEAN) {
- if (_stricmp(value, "true") == 0 || _stricmp(value, "1") == 0)
- *(int*)((char*)container + entry->member_offset) = 1;
- else if (_stricmp(value, "false") == 0 || _stricmp(value, "0") == 0)
- *(int*)((char*)container + entry->member_offset) = 0;
- else
- return -1;
- } else {
- assert(0);
- }
- return 0;
- }
- ++entry;
- }
- return -1;
- }
- TOOLKIT_API int kvpconfig_get(struct kvpconfig_entry_t* pe,
- void *container,
- const char *key,
- char *value)
- {
- struct kvpconfig_entry_t* entry = pe;
- while (entry && entry->key) {
- if (_stricmp(key, entry->key) == 0) {
- if (entry->type == KVP_INTEGER) {
- _itoa(*(int*)((char*)container + entry->member_offset), value, 10);
- } else if (entry->type == KVP_STRING) {
- strcpy(value, *(char**)((char*)container + entry->member_offset));
- } else if (entry->type == KVP_BOOLEAN) {
- int t = *(int*)((char*)container + entry->member_offset);
- strcpy(value, t ? "true" : "false");
- } else {
- assert(0);
- }
- return 0;
- }
- ++entry;
- }
- return -1;
- }
|