10 #include <sys/param.h>
11 #include <sys/types.h>
18 #include "Ecore_Config.h"
19 #include "ecore_config_private.h"
20 #include "ecore_config_util.h"
22 struct _Ecore_Config_DB_File
27 Ecore_Config_DB_File *
28 _ecore_config_db_open_read(const char *file)
31 Ecore_Config_DB_File *db;
34 db = malloc(sizeof(Ecore_Config_DB_File));
36 ef = eet_open((char*)file, EET_FILE_MODE_READ);
46 Ecore_Config_DB_File *
47 _ecore_config_db_open_write(const char *file)
50 Ecore_Config_DB_File *db;
53 db = malloc(sizeof(Ecore_Config_DB_File));
55 ef = eet_open((char*)file, EET_FILE_MODE_WRITE);
66 _ecore_config_db_close(Ecore_Config_DB_File *db)
74 _ecore_config_db_keys_get(Ecore_Config_DB_File *db, int *num_ret)
80 keys = eet_list(db->ef, (char*)"*", &key_count);
86 /* make keys freeable - this is safe to do */
87 for (i = 0; i < key_count; i++) keys[i] = strdup(keys[i]);
93 _ecore_config_db_key_type_get(Ecore_Config_DB_File *db, const char *key)
98 data = eet_read(db->ef, (char*)key, &size);
104 return ECORE_CONFIG_NIL;
106 if (data[size - 1] != 0)
109 return ECORE_CONFIG_NIL;
111 return (Ecore_Config_Type) data[0];
113 return ECORE_CONFIG_NIL;
117 _ecore_config_db_read(Ecore_Config_DB_File *db, const char *key)
121 Ecore_Config_Type type;
123 data = eet_read(db->ef, (char*)key, &size);
134 if (data[size - 1] != 0)
139 /* "type" NIL 1242 NIL */
148 value = data + l + 1;
152 case ECORE_CONFIG_INT:
153 case ECORE_CONFIG_BLN:
156 prev_locale = setlocale(LC_NUMERIC, "C");
158 if (prev_locale) setlocale(LC_NUMERIC, prev_locale);
160 ecore_config_typed_set(key, (void *)&tmp, type);
163 case ECORE_CONFIG_FLT:
166 prev_locale = setlocale(LC_NUMERIC, "C");
168 if (prev_locale) setlocale(LC_NUMERIC, prev_locale);
170 ecore_config_typed_set(key, (void *)&tmp, type);
173 case ECORE_CONFIG_RGB:
174 ecore_config_argbstr_set(key, value);
176 case ECORE_CONFIG_STR:
177 case ECORE_CONFIG_THM:
178 ecore_config_typed_set(key, (void *)value, type);
180 case ECORE_CONFIG_SCT:
181 INF("loading struct %s", key);
184 WRN("Type %d not handled", type);
194 _ecore_config_db_key_data_get(Ecore_Config_DB_File *db, const char *key, int *size_ret)
199 data = eet_read(db->ef, (char*)key, &size);
210 if (data[size - 1] != 0)
215 * "type" NIL data_goes_here NIL *
222 dat = malloc(size - (l + 2));
223 memcpy(dat, data + l + 1, size - (l + 2));
225 *size_ret = size - (l + 2);
232 _ecore_config_db_write(Ecore_Config_DB_File *db, Ecore_Config_Prop *e)
234 char *prev_locale= NULL;
239 prev_locale = setlocale(LC_NUMERIC, "C");
243 case ECORE_CONFIG_INT:
244 esprintf(&val, "%i", _ecore_config_int_get(e));
246 case ECORE_CONFIG_BLN:
247 esprintf(&val, "%i", _ecore_config_boolean_get(e));
249 case ECORE_CONFIG_FLT:
250 esprintf(&val, "%16.16f", _ecore_config_float_get(e));
252 case ECORE_CONFIG_STR:
253 val = _ecore_config_string_get(e);
255 case ECORE_CONFIG_THM:
256 val = _ecore_config_theme_get(e);
258 case ECORE_CONFIG_RGB:
259 val = _ecore_config_argbstr_get(e);
262 WRN("Type %d not handled", e->type);
267 setlocale(LC_NUMERIC, prev_locale);
272 num = esprintf(&r, "%c%c%s%c", (char) e->type, 0, val, 0);
274 eet_write(db->ef, e->key, r, num, 1);
282 _ecore_config_db_key_data_set(Ecore_Config_DB_File *db, const char *key, void *data, int data_size)
287 num = 1 + 1 + data_size + 1;
290 buf[0] = (char) ECORE_CONFIG_BIN;
292 memcpy(buf + 2, data, data_size);
294 eet_write(db->ef, (char*)key, buf, num, 1);