2 * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
14 #include <sys/param.h>
15 #include <sys/types.h>
22 #include "Ecore_Config.h"
23 #include "ecore_config_private.h"
24 #include "ecore_config_util.h"
26 struct _Ecore_Config_DB_File
31 Ecore_Config_DB_File *
32 _ecore_config_db_open_read(const char *file)
35 Ecore_Config_DB_File *db;
38 db = malloc(sizeof(Ecore_Config_DB_File));
40 ef = eet_open((char*)file, EET_FILE_MODE_READ);
50 Ecore_Config_DB_File *
51 _ecore_config_db_open_write(const char *file)
54 Ecore_Config_DB_File *db;
57 db = malloc(sizeof(Ecore_Config_DB_File));
59 ef = eet_open((char*)file, EET_FILE_MODE_WRITE);
70 _ecore_config_db_close(Ecore_Config_DB_File *db)
78 _ecore_config_db_keys_get(Ecore_Config_DB_File *db, int *num_ret)
84 keys = eet_list(db->ef, (char*)"*", &key_count);
90 /* make keys freeable - this is safe to do */
91 for (i = 0; i < key_count; i++) keys[i] = strdup(keys[i]);
97 _ecore_config_db_key_type_get(Ecore_Config_DB_File *db, const char *key)
102 data = eet_read(db->ef, (char*)key, &size);
108 return ECORE_CONFIG_NIL;
110 if (data[size - 1] != 0)
113 return ECORE_CONFIG_NIL;
115 return (Ecore_Config_Type) data[0];
117 return ECORE_CONFIG_NIL;
121 _ecore_config_db_read(Ecore_Config_DB_File *db, const char *key)
125 Ecore_Config_Type type;
127 data = eet_read(db->ef, (char*)key, &size);
138 if (data[size - 1] != 0)
143 /* "type" NIL 1242 NIL */
152 value = data + l + 1;
156 case ECORE_CONFIG_INT:
157 case ECORE_CONFIG_BLN:
160 prev_locale = setlocale(LC_NUMERIC, "C");
162 if (prev_locale) setlocale(LC_NUMERIC, prev_locale);
164 ecore_config_typed_set(key, (void *)&tmp, type);
167 case ECORE_CONFIG_FLT:
170 prev_locale = setlocale(LC_NUMERIC, "C");
172 if (prev_locale) setlocale(LC_NUMERIC, prev_locale);
174 ecore_config_typed_set(key, (void *)&tmp, type);
177 case ECORE_CONFIG_RGB:
178 ecore_config_argbstr_set(key, value);
180 case ECORE_CONFIG_STR:
181 case ECORE_CONFIG_THM:
182 ecore_config_typed_set(key, (void *)value, type);
184 case ECORE_CONFIG_SCT:
185 INF("loading struct %s", key);
188 WRN("Type %d not handled", type);
198 _ecore_config_db_key_data_get(Ecore_Config_DB_File *db, const char *key, int *size_ret)
203 data = eet_read(db->ef, (char*)key, &size);
214 if (data[size - 1] != 0)
219 * "type" NIL data_goes_here NIL *
226 dat = malloc(size - (l + 2));
227 memcpy(dat, data + l + 1, size - (l + 2));
229 *size_ret = size - (l + 2);
236 _ecore_config_db_write(Ecore_Config_DB_File *db, Ecore_Config_Prop *e)
238 char *prev_locale= NULL;
243 prev_locale = setlocale(LC_NUMERIC, "C");
247 case ECORE_CONFIG_INT:
248 esprintf(&val, "%i", _ecore_config_int_get(e));
250 case ECORE_CONFIG_BLN:
251 esprintf(&val, "%i", _ecore_config_boolean_get(e));
253 case ECORE_CONFIG_FLT:
254 esprintf(&val, "%16.16f", _ecore_config_float_get(e));
256 case ECORE_CONFIG_STR:
257 val = _ecore_config_string_get(e);
259 case ECORE_CONFIG_THM:
260 val = _ecore_config_theme_get(e);
262 case ECORE_CONFIG_RGB:
263 val = _ecore_config_argbstr_get(e);
266 WRN("Type %d not handled", e->type);
271 setlocale(LC_NUMERIC, prev_locale);
276 num = esprintf(&r, "%c%c%s%c", (char) e->type, 0, val, 0);
278 eet_write(db->ef, e->key, r, num, 1);
286 _ecore_config_db_key_data_set(Ecore_Config_DB_File *db, const char *key, void *data, int data_size)
291 num = 1 + 1 + data_size + 1;
294 buf[0] = (char) ECORE_CONFIG_BIN;
296 memcpy(buf + 2, data, data_size);
298 eet_write(db->ef, (char*)key, buf, num, 1);