forked from enlightenment/efl
start an ecore_config overhaul - things will break, but overall we will be happy
step 1) start abstraction of read/write to eet file - this will be moved to handlers and [en|de]coders shortly - lists will follow this this breaks current .eet config files, but the API remains the same SVN revision: 15182
This commit is contained in:
parent
990a827101
commit
2ccfb66cc7
|
@ -83,7 +83,7 @@ _ecore_config_db_keys_get(Ecore_Config_DB_File *db, int *num_ret)
|
|||
return keys;
|
||||
}
|
||||
|
||||
char *
|
||||
Ecore_Config_Type
|
||||
_ecore_config_db_key_type_get(Ecore_Config_DB_File *db, const char *key)
|
||||
{
|
||||
char *data;
|
||||
|
@ -95,23 +95,25 @@ _ecore_config_db_key_type_get(Ecore_Config_DB_File *db, const char *key)
|
|||
if (size <= 2)
|
||||
{
|
||||
free(data);
|
||||
return NULL;
|
||||
return PT_NIL;
|
||||
}
|
||||
if (data[size - 1] != 0)
|
||||
{
|
||||
free(data);
|
||||
return NULL;
|
||||
return PT_NIL;
|
||||
}
|
||||
return data;
|
||||
return (Ecore_Config_Type) data[0];
|
||||
}
|
||||
return NULL;
|
||||
return PT_NIL;
|
||||
}
|
||||
|
||||
int
|
||||
_ecore_config_db_key_int_get(Ecore_Config_DB_File *db, const char *key, int *dest)
|
||||
_ecore_config_db_read(Ecore_Config_DB_File *db, const char *key)
|
||||
{
|
||||
char *data;
|
||||
char *data, *value;
|
||||
int size;
|
||||
Ecore_Config_Prop *prop;
|
||||
Ecore_Config_Type type;
|
||||
|
||||
data = eet_read(db->ef, (char*)key, &size);
|
||||
if (data)
|
||||
|
@ -137,90 +139,48 @@ _ecore_config_db_key_int_get(Ecore_Config_DB_File *db, const char *key, int *des
|
|||
return 0;
|
||||
}
|
||||
|
||||
prev_locale = setlocale(LC_NUMERIC, "C");
|
||||
*dest = atoi(data + l + 1);
|
||||
if (prev_locale) setlocale(LC_NUMERIC, prev_locale);
|
||||
type = data[0];
|
||||
value = data + l + 1;
|
||||
prop = ecore_config_get(key);
|
||||
|
||||
switch (type)
|
||||
{
|
||||
case PT_INT:
|
||||
case PT_BLN:
|
||||
{
|
||||
int tmp;
|
||||
prev_locale = setlocale(LC_NUMERIC, "C");
|
||||
tmp = atoi(value);
|
||||
if (prev_locale) setlocale(LC_NUMERIC, prev_locale);
|
||||
|
||||
ecore_config_typed_set(key, (void *)&tmp, type);
|
||||
break;
|
||||
}
|
||||
case PT_FLT:
|
||||
{
|
||||
float tmp;
|
||||
prev_locale = setlocale(LC_NUMERIC, "C");
|
||||
tmp = atof(value);
|
||||
if (prev_locale) setlocale(LC_NUMERIC, prev_locale);
|
||||
|
||||
ecore_config_typed_set(key, (void *)&tmp, type);
|
||||
break;
|
||||
}
|
||||
case PT_STR:
|
||||
case PT_RGB:
|
||||
case PT_THM:
|
||||
ecore_config_typed_set(key, (void *)value, type);
|
||||
break;
|
||||
default:
|
||||
E(0, "Type %d not handled\n", type);
|
||||
}
|
||||
free(data);
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
_ecore_config_db_key_float_get(Ecore_Config_DB_File *db, const char *key, double *dest)
|
||||
{
|
||||
char *data;
|
||||
int size;
|
||||
|
||||
data = eet_read(db->ef, (char*)key, &size);
|
||||
if (data)
|
||||
{
|
||||
int l;
|
||||
char *prev_locale;
|
||||
|
||||
if (size <= 2)
|
||||
{
|
||||
free(data);
|
||||
return 0;
|
||||
}
|
||||
if (data[size - 1] != 0)
|
||||
{
|
||||
free(data);
|
||||
return 0;
|
||||
}
|
||||
/* "type" NIL "1242.4234" NIL */
|
||||
l = strlen(data);
|
||||
if (l >= (size - 1))
|
||||
{
|
||||
free(data);
|
||||
return 0;
|
||||
}
|
||||
|
||||
prev_locale = setlocale(LC_NUMERIC, "C");
|
||||
*dest = atof(data + l + 1);
|
||||
if (prev_locale) setlocale(LC_NUMERIC, prev_locale);
|
||||
free(data);
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
char *
|
||||
_ecore_config_db_key_str_get(Ecore_Config_DB_File *db, const char *key)
|
||||
{
|
||||
char *data;
|
||||
int size;
|
||||
|
||||
data = eet_read(db->ef, (char*)key, &size);
|
||||
if (data)
|
||||
{
|
||||
int l;
|
||||
char *s;
|
||||
|
||||
if (size <= 2)
|
||||
{
|
||||
free(data);
|
||||
return NULL;
|
||||
}
|
||||
if (data[size - 1] != 0)
|
||||
{
|
||||
free(data);
|
||||
return NULL;
|
||||
}
|
||||
/* "type" NIL "string goes here" NIL */
|
||||
l = strlen(data);
|
||||
if (l >= (size - 1))
|
||||
{
|
||||
free(data);
|
||||
return NULL;
|
||||
}
|
||||
s = strdup(data + l + 1);
|
||||
free(data);
|
||||
return s;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
void *
|
||||
_ecore_config_db_key_data_get(Ecore_Config_DB_File *db, const char *key, int *size_ret)
|
||||
{
|
||||
|
@ -243,7 +203,7 @@ _ecore_config_db_key_data_get(Ecore_Config_DB_File *db, const char *key, int *si
|
|||
free(data);
|
||||
return NULL;
|
||||
}
|
||||
/* "type" NIL data_goes_here NIL */
|
||||
* "type" NIL data_goes_here NIL *
|
||||
l = strlen(data);
|
||||
if (l >= (size - 1))
|
||||
{
|
||||
|
@ -257,65 +217,70 @@ _ecore_config_db_key_data_get(Ecore_Config_DB_File *db, const char *key, int *si
|
|||
return dat;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
}*/
|
||||
|
||||
void
|
||||
_ecore_config_db_key_int_set(Ecore_Config_DB_File *db, const char *key, int val)
|
||||
_ecore_config_db_write(Ecore_Config_DB_File *db, const char *key)
|
||||
{
|
||||
char buf[256];
|
||||
int num;
|
||||
char *prev_locale;
|
||||
Ecore_Config_Prop *prop;
|
||||
Ecore_Config_Type type;
|
||||
|
||||
prev_locale = setlocale(LC_NUMERIC, "C");
|
||||
num = snprintf(buf, sizeof(buf), "%s %i ", "int", val);
|
||||
|
||||
type = ecore_config_get(key)->type;
|
||||
prev_locale = setlocale(LC_NUMERIC, "C");
|
||||
|
||||
switch (type)
|
||||
{
|
||||
case PT_INT:
|
||||
num = snprintf(buf, sizeof(buf), "%c %i ", (char) type,
|
||||
ecore_config_int_get(key));
|
||||
break;
|
||||
case PT_BLN:
|
||||
num = snprintf(buf, sizeof(buf), "%c %i ", (char) type,
|
||||
ecore_config_int_get(key));
|
||||
break;
|
||||
case PT_FLT:
|
||||
num = snprintf(buf, sizeof(buf), "%c %16.16f ", (char) type,
|
||||
ecore_config_float_get(key));
|
||||
break;
|
||||
case PT_STR:
|
||||
num = snprintf(buf, sizeof(buf), "%c %s ", (char) type,
|
||||
ecore_config_string_get(key));
|
||||
break;
|
||||
case PT_THM:
|
||||
num = snprintf(buf, sizeof(buf), "%c %s ", (char) type,
|
||||
ecore_config_theme_get(key));
|
||||
break;
|
||||
case PT_RGB:
|
||||
num = snprintf(buf, sizeof(buf), "%c %s ", (char) type,
|
||||
ecore_config_argbstr_get(key));
|
||||
break;
|
||||
default:
|
||||
E(0, "Type %d not handled\n", type);
|
||||
}
|
||||
|
||||
if (prev_locale) setlocale(LC_NUMERIC, prev_locale);
|
||||
buf[3] = 0;
|
||||
buf[1] = 0;
|
||||
buf[num - 1] = 0;
|
||||
eet_write(db->ef, (char*)key, buf, num, 1);
|
||||
}
|
||||
|
||||
void
|
||||
_ecore_config_db_key_float_set(Ecore_Config_DB_File *db, const char *key, double val)
|
||||
{
|
||||
char buf[256];
|
||||
int num;
|
||||
char *prev_locale;
|
||||
|
||||
prev_locale = setlocale(LC_NUMERIC, "C");
|
||||
num = snprintf(buf, sizeof(buf), "%s %16.16f ", "float", val);
|
||||
if (prev_locale) setlocale(LC_NUMERIC, prev_locale);
|
||||
buf[5] = 0;
|
||||
buf[num - 1] = 0;
|
||||
eet_write(db->ef, (char*)key, buf, num, 1);
|
||||
}
|
||||
|
||||
void
|
||||
_ecore_config_db_key_str_set(Ecore_Config_DB_File *db, const char *key, char *str)
|
||||
{
|
||||
char *buf;
|
||||
int num;
|
||||
|
||||
num = 3 + 1 + strlen(str) + 1;
|
||||
buf = malloc(num);
|
||||
if (!buf) return;
|
||||
strcpy(buf, "str");
|
||||
strcpy(buf + 4, str);
|
||||
eet_write(db->ef, (char*)key, buf, num, 1);
|
||||
free(buf);
|
||||
}
|
||||
|
||||
/*
|
||||
void
|
||||
_ecore_config_db_key_data_set(Ecore_Config_DB_File *db, const char *key, void *data, int data_size)
|
||||
{
|
||||
char *buf;
|
||||
int num;
|
||||
|
||||
num = 3 + 1 + data_size + 1;
|
||||
num = 1 + 1 + data_size + 1;
|
||||
buf = malloc(num);
|
||||
if (!buf) return;
|
||||
strcpy(buf, "data");
|
||||
memcpy(buf + 5, data, data_size);
|
||||
buf[0] = (char) PT_BIN;
|
||||
buf[1] = 0;
|
||||
memcpy(buf + 2, data, data_size);
|
||||
buf[num - 1] = 0;
|
||||
eet_write(db->ef, (char*)key, buf, num, 1);
|
||||
free(buf);
|
||||
}
|
||||
}*/
|
||||
|
|
|
@ -54,7 +54,8 @@ _ecore_config_ipc_global_prop_list(Ecore_Config_Server * srv __UNUSED__, long se
|
|||
int key_count, x;
|
||||
estring *s;
|
||||
int f;
|
||||
char buf[PATH_MAX], *p, *type, *data;
|
||||
char buf[PATH_MAX], *p, *data;
|
||||
Ecore_Config_Type type;
|
||||
|
||||
db = NULL;
|
||||
s = estring_new(8192);
|
||||
|
@ -77,33 +78,30 @@ _ecore_config_ipc_global_prop_list(Ecore_Config_Server * srv __UNUSED__, long se
|
|||
for (x = 0; x < key_count; x++)
|
||||
{
|
||||
type = _ecore_config_db_key_type_get(db, keys[x]);
|
||||
if (!type) type = strdup("?");
|
||||
if (!strcmp(type, "int"))
|
||||
estring_appendf(s, "%s%s: integer", f ? "\n" : "", keys[x]);
|
||||
else if (!strcmp(type, "float"))
|
||||
estring_appendf(s, "%s%s: float", f ? "\n" : "", keys[x]);
|
||||
else if (!strcmp(type, "str"))
|
||||
switch (type)
|
||||
{
|
||||
data = _ecore_config_db_key_str_get(db, keys[x]);
|
||||
if (data)
|
||||
{
|
||||
if (ecore_config_type_guess(keys[x], data) == PT_RGB)
|
||||
estring_appendf(s, "%s%s: colour", f ? "\n" : "", keys[x]);
|
||||
else
|
||||
estring_appendf(s, "%s%s: string", f ? "\n" : "", keys[x]);
|
||||
free(data);
|
||||
}
|
||||
else
|
||||
{
|
||||
estring_appendf(s, "%s%s: string", f ? "\n" : "", keys[x]);
|
||||
}
|
||||
case PT_INT:
|
||||
estring_appendf(s, "%s%s: integer", f ? "\n" : "", keys[x]);
|
||||
break;
|
||||
case PT_BLN:
|
||||
estring_appendf(s, "%s%s: boolean", f ? "\n" : "", keys[x]);
|
||||
break;
|
||||
case PT_FLT:
|
||||
estring_appendf(s, "%s%s: float", f ? "\n" : "", keys[x]);
|
||||
break;
|
||||
case PT_STR:
|
||||
estring_appendf(s, "%s%s: string", f ? "\n" : "", keys[x]);
|
||||
break;
|
||||
case PT_RGB:
|
||||
estring_appendf(s, "%s%s: colour", f ? "\n" : "", keys[x]);
|
||||
break;
|
||||
case PT_THM:
|
||||
estring_appendf(s, "%s%s: theme", f ? "\n" : "", keys[x]);
|
||||
break;
|
||||
default:
|
||||
estring_appendf(s, "%s%s: unknown", f ? "\n" : "", keys[x]);
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
estring_appendf(s, "%s%s: unknown", f ? "\n" : "", keys[x]);
|
||||
continue;
|
||||
}
|
||||
if (type) free(type);
|
||||
f = 1;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -21,14 +21,7 @@ Ecore_Config_DB_File *_ecore_config_db_open_read(const char *file);
|
|||
Ecore_Config_DB_File *_ecore_config_db_open_write(const char *file);
|
||||
void _ecore_config_db_close(Ecore_Config_DB_File *db);
|
||||
char **_ecore_config_db_keys_get(Ecore_Config_DB_File *db, int *num_ret);
|
||||
char *_ecore_config_db_key_type_get(Ecore_Config_DB_File *db, const char *key);
|
||||
int _ecore_config_db_key_int_get(Ecore_Config_DB_File *db, const char *key, int *dest);
|
||||
int _ecore_config_db_key_float_get(Ecore_Config_DB_File *db, const char *key, double *dest);
|
||||
char *_ecore_config_db_key_str_get(Ecore_Config_DB_File *db, const char *key);
|
||||
void *_ecore_config_db_key_data_get(Ecore_Config_DB_File *db, const char *key, int *size_ret);
|
||||
void _ecore_config_db_key_int_set(Ecore_Config_DB_File *db, const char *key, int val);
|
||||
void _ecore_config_db_key_float_set(Ecore_Config_DB_File *db, const char *key, double val);
|
||||
void _ecore_config_db_key_str_set(Ecore_Config_DB_File *db, const char *key, char *str);
|
||||
void _ecore_config_db_key_data_set(Ecore_Config_DB_File *db, const char *key, void *data, int data_size);
|
||||
int _ecore_config_db_read(Ecore_Config_DB_File *db, const char *key);
|
||||
void _ecore_config_db_write(Ecore_Config_DB_File *db, const char *key);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -57,14 +57,13 @@ ecore_config_file_load(const char *file)
|
|||
Ecore_Config_DB_File *db;
|
||||
char **keys;
|
||||
int key_count;
|
||||
double ftmp;
|
||||
int x, pt;
|
||||
int itmp;
|
||||
double ftmp;
|
||||
char *type;
|
||||
Ecore_Config_Type type;
|
||||
char *data;
|
||||
|
||||
db = NULL;
|
||||
type = NULL;
|
||||
data = NULL;
|
||||
|
||||
db = _ecore_config_db_open_read(file);
|
||||
|
@ -79,72 +78,7 @@ ecore_config_file_load(const char *file)
|
|||
{
|
||||
for (x = 0; x < key_count; x++)
|
||||
{
|
||||
type = _ecore_config_db_key_type_get(db, keys[x]);
|
||||
if (!type) type = strdup("?");
|
||||
if (!strcmp(type, "int"))
|
||||
{
|
||||
if (_ecore_config_db_key_int_get(db, keys[x], &itmp))
|
||||
{
|
||||
Ecore_Config_Prop *p;
|
||||
|
||||
pt = PT_INT;
|
||||
if ((p = ecore_config_get(keys[x]))) pt = p->type;
|
||||
switch (pt)
|
||||
{
|
||||
case PT_BLN:
|
||||
ecore_config_boolean_set(keys[x], itmp);
|
||||
break;
|
||||
default:
|
||||
ecore_config_int_set(keys[x], itmp);
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
E(0, "Could not read key %s!\n", keys[x]);
|
||||
}
|
||||
}
|
||||
else if (!strcmp(type, "float"))
|
||||
{
|
||||
if (_ecore_config_db_key_float_get(db, keys[x], &ftmp))
|
||||
{
|
||||
ecore_config_float_set(keys[x], ftmp);
|
||||
}
|
||||
else
|
||||
{
|
||||
E(0, "Could not read key %s!\n", keys[x]);
|
||||
}
|
||||
}
|
||||
else if (!strcmp(type, "str"))
|
||||
{
|
||||
data = _ecore_config_db_key_str_get(db, keys[x]);
|
||||
if (data)
|
||||
{
|
||||
pt = ecore_config_type_guess(keys[x], data);
|
||||
switch (pt)
|
||||
{
|
||||
case PT_RGB:
|
||||
ecore_config_argb_set(keys[x], data);
|
||||
break;
|
||||
case PT_THM:
|
||||
ecore_config_theme_set(keys[x], data);
|
||||
break;
|
||||
default:
|
||||
ecore_config_string_set(keys[x], data);
|
||||
}
|
||||
free(data);
|
||||
}
|
||||
else
|
||||
{
|
||||
E(0, "Could not read key %s!\n", keys[x]);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
E(1, "Unexpected type: %s\n", type);
|
||||
continue;
|
||||
}
|
||||
if (type) free(type);
|
||||
_ecore_config_db_read(db, keys[x]);
|
||||
}
|
||||
}
|
||||
_ecore_config_db_close(db);
|
||||
|
@ -194,7 +128,6 @@ ecore_config_file_save(const char *file)
|
|||
Ecore_Config_Prop *next;
|
||||
Ecore_Config_DB_File *db;
|
||||
struct stat status;
|
||||
char *tmp;
|
||||
|
||||
next = __ecore_config_bundle_local->data;
|
||||
db = NULL;
|
||||
|
@ -222,37 +155,7 @@ ecore_config_file_save(const char *file)
|
|||
continue;
|
||||
}
|
||||
|
||||
tmp = NULL;
|
||||
|
||||
switch (next->type)
|
||||
{
|
||||
case PT_INT:
|
||||
_ecore_config_db_key_int_set(db, next->key, ecore_config_int_get(next->key));
|
||||
break;
|
||||
case PT_BLN:
|
||||
_ecore_config_db_key_int_set(db, next->key, ecore_config_boolean_get(next->key));
|
||||
break;
|
||||
case PT_FLT:
|
||||
_ecore_config_db_key_float_set(db, next->key, ecore_config_float_get(next->key));
|
||||
break;
|
||||
case PT_RGB:
|
||||
tmp = ecore_config_argbstr_get(next->key);
|
||||
break;
|
||||
case PT_STR:
|
||||
tmp = ecore_config_string_get(next->key);
|
||||
break;
|
||||
case PT_THM:
|
||||
tmp = ecore_config_theme_get(next->key);
|
||||
break;
|
||||
case PT_NIL:
|
||||
/* currently we do nothing for undefined ojects */
|
||||
break;
|
||||
}
|
||||
|
||||
if (tmp) {
|
||||
_ecore_config_db_key_str_set(db, next->key, tmp);
|
||||
free(tmp);
|
||||
}
|
||||
_ecore_config_db_write(db, next->key);
|
||||
|
||||
next = next->next;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue