forked from enlightenment/efl
latest patch from Morten Nilsen:
- fix indent in various places - check flag rather than walking list in util - eliminate multiple key searches while saving - optimizations SVN revision: 19115
This commit is contained in:
parent
520ca1ff13
commit
414d3e5352
|
@ -16,268 +16,282 @@
|
|||
int
|
||||
pathcmp(const char *s1, const char *s2)
|
||||
{
|
||||
char *s1d, *s2d;
|
||||
char *s1d, *s2d;
|
||||
|
||||
// strip common part of paths
|
||||
while(*s1 && *s2 && *s1 == *s2) {
|
||||
s1++;
|
||||
s2++;
|
||||
}
|
||||
// strip common part of paths
|
||||
while(*s1 && *s2 && *s1 == *s2)
|
||||
{
|
||||
s1++;
|
||||
s2++;
|
||||
}
|
||||
|
||||
// handle /foo/bar/baz <> /foo/bar_baz properly
|
||||
if (*s1 == '/' && *s2 != '/') return -1;
|
||||
if (*s1 != '/' && *s2 == '/') return 1;
|
||||
// handle /foo/bar/baz <> /foo/bar_baz properly
|
||||
if (*s1 == '/' && *s2 != '/') return -1;
|
||||
if (*s1 != '/' && *s2 == '/') return 1;
|
||||
|
||||
// skip leading /
|
||||
if (*s1 == '/') s1++;
|
||||
if (*s2 == '/') s2++;
|
||||
// skip leading /
|
||||
if (*s1 == '/') s1++;
|
||||
if (*s2 == '/') s2++;
|
||||
|
||||
// order folders before files
|
||||
s1d = strchr(s1, '/');
|
||||
s2d = strchr(s2, '/');
|
||||
if (s1d != NULL && s2d == NULL) return -1;
|
||||
if (s1d == NULL && s2d != NULL) return 1;
|
||||
// order folders before files
|
||||
s1d = strchr(s1, '/');
|
||||
s2d = strchr(s2, '/');
|
||||
if (s1d != NULL && s2d == NULL) return -1;
|
||||
if (s1d == NULL && s2d != NULL) return 1;
|
||||
|
||||
return strcmp(s1, s2);
|
||||
return strcmp(s1, s2);
|
||||
}
|
||||
|
||||
int
|
||||
del(const char *key)
|
||||
{
|
||||
Ecore_Config_Prop *e;
|
||||
e = ecore_config_get(key);
|
||||
if(e == NULL) return -1;
|
||||
Ecore_Config_Prop *e;
|
||||
e = ecore_config_get(key);
|
||||
if(e == NULL) return -1;
|
||||
|
||||
ecore_config_dst(e);
|
||||
return 0;
|
||||
ecore_config_dst(e);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
get(const char *key)
|
||||
{
|
||||
Ecore_Config_Prop *e;
|
||||
Ecore_Config_Prop *e;
|
||||
|
||||
if (!(e = ecore_config_get(key))) {
|
||||
fprintf(stderr, "No such property\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
switch (e->type) {
|
||||
if (!(e = ecore_config_get(key)))
|
||||
{
|
||||
fprintf(stderr, "No such property\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
switch (e->type)
|
||||
{
|
||||
case ECORE_CONFIG_NIL:
|
||||
printf("\n");
|
||||
break;
|
||||
printf("\n");
|
||||
break;
|
||||
case ECORE_CONFIG_INT:
|
||||
printf("integer %ld\n", ecore_config_int_get(key));
|
||||
break;
|
||||
printf("integer %ld\n", ecore_config_int_get(key));
|
||||
break;
|
||||
case ECORE_CONFIG_BLN:
|
||||
printf("bool %d\n", ecore_config_boolean_get(key));
|
||||
break;
|
||||
printf("bool %d\n", ecore_config_boolean_get(key));
|
||||
break;
|
||||
case ECORE_CONFIG_FLT:
|
||||
printf("float %lf\n", ecore_config_float_get(key));
|
||||
break;
|
||||
printf("float %lf\n", ecore_config_float_get(key));
|
||||
break;
|
||||
case ECORE_CONFIG_STR:
|
||||
printf("string \"%s\"\n", ecore_config_string_get(key));
|
||||
break;
|
||||
printf("string \"%s\"\n", ecore_config_string_get(key));
|
||||
break;
|
||||
case ECORE_CONFIG_RGB:
|
||||
printf("rgb \"%s\"\n", ecore_config_argbstr_get(key));
|
||||
break;
|
||||
printf("rgb \"%s\"\n", ecore_config_argbstr_get(key));
|
||||
break;
|
||||
case ECORE_CONFIG_THM:
|
||||
printf("theme \"%s\"\n", ecore_config_theme_get(key));
|
||||
break;
|
||||
printf("theme \"%s\"\n", ecore_config_theme_get(key));
|
||||
break;
|
||||
default:
|
||||
fprintf(stderr, "Property has unrecognised type");
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
fprintf(stderr, "Property has unrecognised type");
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
list(const char *file)
|
||||
{
|
||||
char *key;
|
||||
char *key;
|
||||
|
||||
Eet_File *ef;
|
||||
Ecore_Config_Prop *e;
|
||||
Ecore_Sheap *keys;
|
||||
Eet_File *ef;
|
||||
Ecore_Config_Prop *e;
|
||||
Ecore_Sheap *keys;
|
||||
|
||||
ef = eet_open(file, EET_FILE_MODE_READ);
|
||||
if (!ef) return -1;
|
||||
// Get number of keys and create heap for sort
|
||||
ef = eet_open(file, EET_FILE_MODE_READ);
|
||||
if (!ef) return -1;
|
||||
|
||||
keys = ecore_sheap_new(ECORE_COMPARE_CB(pathcmp), eet_num_entries(ef));
|
||||
keys = ecore_sheap_new(ECORE_COMPARE_CB(pathcmp), eet_num_entries(ef));
|
||||
|
||||
eet_close(ef);
|
||||
eet_close(ef);
|
||||
|
||||
e = __ecore_config_bundle_local->data;
|
||||
e = __ecore_config_bundle_local->data;
|
||||
|
||||
do {
|
||||
ecore_sheap_insert(keys, e->key);
|
||||
} while((e = e->next));
|
||||
do
|
||||
{
|
||||
// don't show system settings
|
||||
if( !(e->flags & ECORE_CONFIG_FLAG_SYSTEM) )
|
||||
ecore_sheap_insert(keys, e->key);
|
||||
}
|
||||
while((e = e->next));
|
||||
|
||||
while((key = ecore_sheap_extract(keys))) {
|
||||
printf("%-28s\t", key);
|
||||
get(key);
|
||||
}
|
||||
while((key = ecore_sheap_extract(keys)))
|
||||
{
|
||||
printf("%-28s\t", key);
|
||||
get(key);
|
||||
}
|
||||
|
||||
return 0;
|
||||
ecore_sheap_destroy(keys);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
usage_and_exit(const char *prog, int ret, const char *msg)
|
||||
{
|
||||
if (msg) fprintf(stderr, msg);
|
||||
fprintf(stderr, "Usage: %s <options> <command>\n", prog);
|
||||
fprintf(stderr, "Modify ecore_config files\n\n");
|
||||
fprintf(stderr, "Options:\n");
|
||||
fprintf(stderr, " -c, --file=FILE config file\n");
|
||||
fprintf(stderr, " -k, --key=KEY must be given for all commands except -a\n\n");
|
||||
fprintf(stderr, "Commands:\n");
|
||||
fprintf(stderr, " -a, --list get all keys\n");
|
||||
fprintf(stderr, " -g, --get get key\n");
|
||||
fprintf(stderr, " -d, --del delete key\n");
|
||||
fprintf(stderr, " -b, --bool=VALUE set boolean\n");
|
||||
fprintf(stderr, " -f, --float=VALUE set float\n");
|
||||
fprintf(stderr, " -i, --int=VALUE set integer\n");
|
||||
fprintf(stderr, " -n, --nil set nil\n");
|
||||
fprintf(stderr, " -r, --rgb=VALUE set RGBA\n");
|
||||
fprintf(stderr, " -s, --string=VALUE set string\n");
|
||||
fprintf(stderr, " -t, --theme=VALUE set theme\n\n");
|
||||
exit(ret);
|
||||
if (msg) fprintf(stderr, "%s\n\n", msg);
|
||||
fprintf(stderr, "Usage: %s <options> <command>\n", prog);
|
||||
fprintf(stderr, "Modify ecore_config files\n\n");
|
||||
fprintf(stderr, "Options:\n");
|
||||
fprintf(stderr, " -c, --file=FILE config file\n");
|
||||
fprintf(stderr, " -k, --key=KEY must be given for all commands except -a\n\n");
|
||||
fprintf(stderr, "Commands:\n");
|
||||
fprintf(stderr, " -a, --list get all keys\n");
|
||||
fprintf(stderr, " -g, --get get key\n");
|
||||
fprintf(stderr, " -d, --del delete key\n");
|
||||
fprintf(stderr, " -b, --bool=VALUE set boolean\n");
|
||||
fprintf(stderr, " -f, --float=VALUE set float\n");
|
||||
fprintf(stderr, " -i, --int=VALUE set integer\n");
|
||||
fprintf(stderr, " -n, --nil set nil\n");
|
||||
fprintf(stderr, " -r, --rgb=VALUE set RGBA\n");
|
||||
fprintf(stderr, " -s, --string=VALUE set string\n");
|
||||
fprintf(stderr, " -t, --theme=VALUE set theme\n\n");
|
||||
exit(ret);
|
||||
}
|
||||
|
||||
int
|
||||
main(int argc, char * const argv[])
|
||||
{
|
||||
const char *prog, *file, *key;
|
||||
void *value = (void *)NULL;
|
||||
char cmd = 's';
|
||||
int type = -1;
|
||||
int ret = 0;
|
||||
int i;
|
||||
float f;
|
||||
|
||||
file = key = prog = NULL;
|
||||
const char *prog, *file, *key;
|
||||
void *value = (void *)NULL;
|
||||
char cmd = 's';
|
||||
int type = -1;
|
||||
int ret = 0;
|
||||
int i;
|
||||
float f;
|
||||
|
||||
file = key = prog = NULL;
|
||||
|
||||
prog = strdup(argv[0]);
|
||||
prog = strdup(argv[0]);
|
||||
|
||||
if(argc < 4)
|
||||
usage_and_exit(prog, 2, NULL);
|
||||
if(argc < 4)
|
||||
usage_and_exit(prog, 2, NULL);
|
||||
|
||||
while(1) {
|
||||
static struct option long_options[] = {
|
||||
{"file", 1, 0, 'c'},
|
||||
{"list", 0, 0, 'a'},
|
||||
{"get", 0, 0, 'g'},
|
||||
{"del", 0, 0, 'd'},
|
||||
{"bool", 1, 0, 'b'},
|
||||
{"float", 1, 0, 'f'},
|
||||
{"int", 1, 0, 'i'},
|
||||
{"nil", 0, 0, 'n'},
|
||||
{"rgb", 1, 0, 'r'},
|
||||
{"string", 1, 0, 's'},
|
||||
{"theme", 1, 0, 't'},
|
||||
{"key", 1, 0, 'k'},
|
||||
{0, 0, 0, 0}
|
||||
};
|
||||
while(1)
|
||||
{
|
||||
static struct option long_options[] = {
|
||||
{"file", 1, 0, 'c'},
|
||||
{"list", 0, 0, 'a'},
|
||||
{"get", 0, 0, 'g'},
|
||||
{"del", 0, 0, 'd'},
|
||||
{"bool", 1, 0, 'b'},
|
||||
{"float", 1, 0, 'f'},
|
||||
{"int", 1, 0, 'i'},
|
||||
{"nil", 0, 0, 'n'},
|
||||
{"rgb", 1, 0, 'r'},
|
||||
{"string", 1, 0, 's'},
|
||||
{"theme", 1, 0, 't'},
|
||||
{"key", 1, 0, 'k'},
|
||||
{0, 0, 0, 0}
|
||||
};
|
||||
|
||||
ret = getopt_long(argc, argv, "c:agdb:f:i:nr:s:t:k:", long_options, NULL);
|
||||
if(ret == -1)
|
||||
break;
|
||||
ret = getopt_long(argc, argv, "c:agdb:f:i:nr:s:t:k:", long_options, NULL);
|
||||
if(ret == -1)
|
||||
break;
|
||||
|
||||
switch(ret) {
|
||||
case 'k':
|
||||
key = strdup(optarg);
|
||||
break;
|
||||
case 'n':
|
||||
type = ECORE_CONFIG_NIL;
|
||||
value = NULL;
|
||||
break;
|
||||
case 'b':
|
||||
type = ECORE_CONFIG_BLN;
|
||||
i = atoi(optarg);
|
||||
value = &i;
|
||||
break;
|
||||
case 'i':
|
||||
type = ECORE_CONFIG_INT;
|
||||
i = atoi(optarg);
|
||||
value = &i;
|
||||
break;
|
||||
case 'f':
|
||||
type = ECORE_CONFIG_FLT;
|
||||
f = atof(optarg);
|
||||
value = &f;
|
||||
break;
|
||||
case 'r':
|
||||
type = ECORE_CONFIG_RGB;
|
||||
value = strdup(optarg);
|
||||
break;
|
||||
case 's':
|
||||
type = ECORE_CONFIG_STR;
|
||||
value = strdup(optarg);
|
||||
break;
|
||||
case 't':
|
||||
type = ECORE_CONFIG_THM;
|
||||
value = strdup(optarg);
|
||||
break;
|
||||
case 'c':
|
||||
file = strdup(optarg);
|
||||
break;
|
||||
case '?':
|
||||
case ':':
|
||||
usage_and_exit(prog, 2, "Bad argument\n");
|
||||
default:
|
||||
cmd = ret;
|
||||
break;
|
||||
}
|
||||
}
|
||||
switch(ret)
|
||||
{
|
||||
case 'k':
|
||||
key = strdup(optarg);
|
||||
break;
|
||||
case 'n':
|
||||
type = ECORE_CONFIG_NIL;
|
||||
value = NULL;
|
||||
break;
|
||||
case 'b':
|
||||
type = ECORE_CONFIG_BLN;
|
||||
i = atoi(optarg);
|
||||
value = &i;
|
||||
break;
|
||||
case 'i':
|
||||
type = ECORE_CONFIG_INT;
|
||||
i = atoi(optarg);
|
||||
value = &i;
|
||||
break;
|
||||
case 'f':
|
||||
type = ECORE_CONFIG_FLT;
|
||||
f = atof(optarg);
|
||||
value = &f;
|
||||
break;
|
||||
case 'r':
|
||||
type = ECORE_CONFIG_RGB;
|
||||
value = strdup(optarg);
|
||||
break;
|
||||
case 's':
|
||||
type = ECORE_CONFIG_STR;
|
||||
value = strdup(optarg);
|
||||
break;
|
||||
case 't':
|
||||
type = ECORE_CONFIG_THM;
|
||||
value = strdup(optarg);
|
||||
break;
|
||||
case 'c':
|
||||
file = strdup(optarg);
|
||||
break;
|
||||
case '?':
|
||||
case ':':
|
||||
usage_and_exit(prog, 2, "Bad argument");
|
||||
default:
|
||||
cmd = ret;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(cmd == 's' && type == -1)
|
||||
usage_and_exit(prog, 2, "You need to specify a command!\n");
|
||||
if(cmd == 's' && type == -1)
|
||||
usage_and_exit(prog, 2, "You need to specify a command!");
|
||||
|
||||
if(cmd != 'a' && key == NULL)
|
||||
usage_and_exit(prog, 2, "You need to specify key!\n");
|
||||
|
||||
if(ecore_config_init("econfig") != ECORE_CONFIG_ERR_SUCC) {
|
||||
fprintf(stderr, "Couldn't init ecore_config!\n");
|
||||
return 1;
|
||||
}
|
||||
if(cmd != 'a' && key == NULL)
|
||||
usage_and_exit(prog, 2, "You need to specify key!");
|
||||
|
||||
if(ecore_config_init("econfig") != ECORE_CONFIG_ERR_SUCC)
|
||||
{
|
||||
fprintf(stderr, "Couldn't init ecore_config!");
|
||||
return 1;
|
||||
}
|
||||
|
||||
// Remove non-file data
|
||||
while (ecore_config_dst(__ecore_config_bundle_local->data));
|
||||
// Load configuration from file
|
||||
ecore_config_file_load(file);
|
||||
|
||||
// Load configuration from file
|
||||
ecore_config_file_load(file);
|
||||
ret = 0;
|
||||
|
||||
ret = 0;
|
||||
// Execute command
|
||||
switch (cmd)
|
||||
{
|
||||
case 's':
|
||||
if (ecore_config_typed_set(key, value, type) != ECORE_CONFIG_ERR_SUCC)
|
||||
{
|
||||
fprintf(stderr, "Set failed for %s", key);
|
||||
ret = 1;
|
||||
} else {
|
||||
ecore_config_file_save(file);
|
||||
}
|
||||
break;
|
||||
case 'd':
|
||||
if(del(key))
|
||||
{
|
||||
fprintf(stderr, "Delete failed for %s", key);
|
||||
ret = 1;
|
||||
} else {
|
||||
ecore_config_file_save(file);
|
||||
}
|
||||
break;
|
||||
case 'g':
|
||||
if (get(key)) ret = 1;
|
||||
break;
|
||||
case 'a':
|
||||
if (list(file)) ret = 1;
|
||||
break;
|
||||
}
|
||||
|
||||
// Execute command
|
||||
switch (cmd) {
|
||||
case 's':
|
||||
if (ecore_config_typed_set(key, value, type) != ECORE_CONFIG_ERR_SUCC) {
|
||||
fprintf(stderr, "Set failed for %s\n", key);
|
||||
ret = 1;
|
||||
} else {
|
||||
ecore_config_file_save(file);
|
||||
}
|
||||
break;
|
||||
case 'd':
|
||||
if(del(key)) {
|
||||
fprintf(stderr, "Delete failed for %s\n", key);
|
||||
ret = 1;
|
||||
} else {
|
||||
ecore_config_file_save(file);
|
||||
}
|
||||
break;
|
||||
case 'g':
|
||||
if (get(key)) ret = 1;
|
||||
break;
|
||||
case 'a':
|
||||
if (list(file)) ret = 1;
|
||||
break;
|
||||
}
|
||||
ecore_config_shutdown();
|
||||
|
||||
ecore_config_shutdown();
|
||||
|
||||
return ret;
|
||||
return ret;
|
||||
}
|
||||
#else
|
||||
int
|
||||
|
|
|
@ -164,9 +164,12 @@ ecore_config_data_get(const char *key)
|
|||
char *
|
||||
ecore_config_string_get(const char *key)
|
||||
{
|
||||
Ecore_Config_Prop *e;
|
||||
return _ecore_config_string_get( ecore_config_get(key) );
|
||||
}
|
||||
|
||||
e = ecore_config_get(key);
|
||||
char *
|
||||
_ecore_config_string_get(Ecore_Config_Prop *e)
|
||||
{
|
||||
return (e && (e->type == ECORE_CONFIG_STR) && e->ptr) ? strdup(e->ptr) : NULL;
|
||||
}
|
||||
|
||||
|
@ -180,9 +183,12 @@ ecore_config_string_get(const char *key)
|
|||
int
|
||||
ecore_config_boolean_get(const char *key)
|
||||
{
|
||||
Ecore_Config_Prop *e;
|
||||
return _ecore_config_boolean_get( ecore_config_get(key) );
|
||||
}
|
||||
|
||||
e = ecore_config_get(key);
|
||||
int
|
||||
_ecore_config_boolean_get(Ecore_Config_Prop *e)
|
||||
{
|
||||
return (e && ((e->type == ECORE_CONFIG_INT) || (e->type == ECORE_CONFIG_BLN))) ? (e->val != 0) : -1;
|
||||
}
|
||||
|
||||
|
@ -196,9 +202,12 @@ ecore_config_boolean_get(const char *key)
|
|||
long
|
||||
ecore_config_int_get(const char *key)
|
||||
{
|
||||
Ecore_Config_Prop *e;
|
||||
return _ecore_config_int_get( ecore_config_get(key) );
|
||||
}
|
||||
|
||||
e = ecore_config_get(key);
|
||||
long
|
||||
_ecore_config_int_get(Ecore_Config_Prop *e)
|
||||
{
|
||||
return (e && ((e->type == ECORE_CONFIG_INT) || (e->type == ECORE_CONFIG_RGB))) ? e->val : 0L;
|
||||
}
|
||||
|
||||
|
@ -212,12 +221,13 @@ ecore_config_int_get(const char *key)
|
|||
float
|
||||
ecore_config_float_get(const char *key)
|
||||
{
|
||||
Ecore_Config_Prop *e;
|
||||
return _ecore_config_float_get( ecore_config_get(key) );
|
||||
}
|
||||
|
||||
e = ecore_config_get(key);
|
||||
return (e
|
||||
&& (e->type ==
|
||||
ECORE_CONFIG_FLT)) ? ((float)e->val / ECORE_CONFIG_FLOAT_PRECISION) : 0.0;
|
||||
float
|
||||
_ecore_config_float_get(Ecore_Config_Prop *e)
|
||||
{
|
||||
return (e && (e->type == ECORE_CONFIG_FLT)) ? ((float)e->val / ECORE_CONFIG_FLOAT_PRECISION) : 0.0;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -234,8 +244,7 @@ ecore_config_float_get(const char *key)
|
|||
int
|
||||
ecore_config_rgb_get(const char *key, int *r, int *g, int *b)
|
||||
{
|
||||
int alpha;
|
||||
return ecore_config_argb_get(key, &alpha, r, g, b);
|
||||
return _ecore_config_argb_get( ecore_config_get(key), NULL, r, g, b);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -252,16 +261,18 @@ ecore_config_rgb_get(const char *key, int *r, int *g, int *b)
|
|||
int
|
||||
ecore_config_argb_get(const char *key, int *a, int *r, int *g, int *b)
|
||||
{
|
||||
Ecore_Config_Prop *e;
|
||||
|
||||
e = ecore_config_get(key);
|
||||
return _ecore_config_argb_get( ecore_config_get(key), a, r, g, b);
|
||||
}
|
||||
|
||||
int
|
||||
_ecore_config_argb_get(Ecore_Config_Prop *e, int *a, int *r, int *g, int *b)
|
||||
{
|
||||
if (e && ((e->type == ECORE_CONFIG_RGB)))
|
||||
{
|
||||
*a = (e->val >> 24) & 0xff;
|
||||
*r = (e->val >> 16) & 0xff;
|
||||
*g = (e->val >> 8) & 0xff;
|
||||
*b = e->val & 0xff;
|
||||
if(a) *a = (e->val >> 24) & 0xff;
|
||||
if(r) *r = (e->val >> 16) & 0xff;
|
||||
if(g) *g = (e->val >> 8) & 0xff;
|
||||
if(b) *b = e->val & 0xff;
|
||||
return ECORE_CONFIG_ERR_SUCC;
|
||||
}
|
||||
return ECORE_CONFIG_ERR_FAIL;
|
||||
|
@ -293,11 +304,17 @@ ecore_config_rgbstr_get(const char *key)
|
|||
*/
|
||||
char *
|
||||
ecore_config_argbstr_get(const char *key)
|
||||
{
|
||||
return _ecore_config_argbstr_get( ecore_config_get(key) );
|
||||
}
|
||||
|
||||
char *
|
||||
_ecore_config_argbstr_get(Ecore_Config_Prop *e)
|
||||
{
|
||||
char *r;
|
||||
|
||||
r = NULL;
|
||||
esprintf(&r, "#%08x", ecore_config_int_get(key));
|
||||
esprintf(&r, "#%08x", _ecore_config_int_get(e));
|
||||
return r;
|
||||
}
|
||||
|
||||
|
@ -311,9 +328,12 @@ ecore_config_argbstr_get(const char *key)
|
|||
char *
|
||||
ecore_config_theme_get(const char *key)
|
||||
{
|
||||
Ecore_Config_Prop *e;
|
||||
return _ecore_config_theme_get( ecore_config_get(key) );
|
||||
}
|
||||
|
||||
e = ecore_config_get(key);
|
||||
char *
|
||||
_ecore_config_theme_get(Ecore_Config_Prop *e)
|
||||
{
|
||||
return (e && (e->type == ECORE_CONFIG_THM)) ? strdup(e->ptr) : NULL;
|
||||
}
|
||||
|
||||
|
@ -328,44 +348,47 @@ char *
|
|||
ecore_config_as_string_get(const char *key)
|
||||
{
|
||||
Ecore_Config_Prop *e;
|
||||
char *val;
|
||||
char *r;
|
||||
|
||||
val = NULL;
|
||||
r = NULL;
|
||||
if (!(e = ecore_config_get(key)))
|
||||
E(0, "no such property, \"%s\"...\n", key);
|
||||
else
|
||||
{
|
||||
const char *type = ecore_config_type_get(e);
|
||||
|
||||
switch (e->type)
|
||||
{
|
||||
case ECORE_CONFIG_NIL:
|
||||
esprintf(&r, "%s:%s=<nil>", key, type);
|
||||
break;
|
||||
case ECORE_CONFIG_INT:
|
||||
esprintf(&r, "%s:%s=%ld", key, type, ecore_config_int_get(key));
|
||||
break;
|
||||
case ECORE_CONFIG_BLN:
|
||||
esprintf(&r, "%s:%s=%ld", key, type, ecore_config_boolean_get(key));
|
||||
break;
|
||||
case ECORE_CONFIG_FLT:
|
||||
esprintf(&r, "%s:%s=%lf", key, type, ecore_config_float_get(key));
|
||||
break;
|
||||
case ECORE_CONFIG_STR:
|
||||
esprintf(&r, "%s:%s=\"%s\"", key, type,
|
||||
ecore_config_string_get(key));
|
||||
break;
|
||||
case ECORE_CONFIG_RGB:
|
||||
esprintf(&r, "%s:%s=#%08x", key, type, ecore_config_int_get(key));
|
||||
break;
|
||||
case ECORE_CONFIG_THM:
|
||||
esprintf(&r, "%s:%s=\"%s\"", key, type,
|
||||
ecore_config_theme_get(key));
|
||||
break;
|
||||
default:
|
||||
esprintf(&r, "%s:unknown_type", key);
|
||||
break;
|
||||
}
|
||||
{
|
||||
case ECORE_CONFIG_NIL:
|
||||
val = strdup("<nil>");
|
||||
break;
|
||||
case ECORE_CONFIG_INT:
|
||||
esprintf(&val, "%ld", _ecore_config_int_get(e));
|
||||
break;
|
||||
case ECORE_CONFIG_BLN:
|
||||
esprintf(&val, "%ld", _ecore_config_boolean_get(e));
|
||||
break;
|
||||
case ECORE_CONFIG_FLT:
|
||||
esprintf(&val, "%lf", _ecore_config_float_get(e));
|
||||
break;
|
||||
case ECORE_CONFIG_STR:
|
||||
esprintf(&val, "\"%s\"", _ecore_config_string_get(e));
|
||||
break;
|
||||
case ECORE_CONFIG_RGB:
|
||||
esprintf(&val, "#%08x", _ecore_config_int_get(e));
|
||||
break;
|
||||
case ECORE_CONFIG_THM:
|
||||
esprintf(&val, "\"%s\"", _ecore_config_theme_get(e));
|
||||
break;
|
||||
default:
|
||||
esprintf(&r, "%s:unknown_type", key);
|
||||
break;
|
||||
}
|
||||
if (val)
|
||||
{
|
||||
esprintf(&r, "%s:%s=%s", key, e->type, val);
|
||||
free(val);
|
||||
}
|
||||
}
|
||||
return r;
|
||||
}
|
||||
|
@ -446,7 +469,7 @@ ecore_config_type_guess(const char *key, const char *val)
|
|||
|
||||
l = NULL;
|
||||
|
||||
if ((p = ecore_config_get(key)) && p->type != ECORE_CONFIG_NIL)
|
||||
if (key && (p = ecore_config_get(key)) && p->type != ECORE_CONFIG_NIL)
|
||||
return p->type;
|
||||
|
||||
if (!val)
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
#include "Ecore_Config.h"
|
||||
#include "ecore_config_private.h"
|
||||
#include "ecore_config_util.h"
|
||||
#include <Eet.h>
|
||||
|
||||
#include <stdlib.h>
|
||||
|
@ -220,64 +221,54 @@ _ecore_config_db_key_data_get(Ecore_Config_DB_File *db, const char *key, int *si
|
|||
}*/
|
||||
|
||||
void
|
||||
_ecore_config_db_write(Ecore_Config_DB_File *db, const char *key)
|
||||
_ecore_config_db_write(Ecore_Config_DB_File *db, Ecore_Config_Prop *e)
|
||||
{
|
||||
char buf[256];
|
||||
char* str = NULL;
|
||||
int num = 0;
|
||||
char *prev_locale;
|
||||
// Ecore_Config_Prop *prop;
|
||||
Ecore_Config_Type type;
|
||||
char *val = NULL;
|
||||
char *r = NULL;
|
||||
int num;
|
||||
|
||||
|
||||
type = ecore_config_get(key)->type;
|
||||
prev_locale = setlocale(LC_NUMERIC, "C");
|
||||
prev_locale = setlocale(LC_NUMERIC, "C");
|
||||
|
||||
switch (type)
|
||||
{
|
||||
case ECORE_CONFIG_INT:
|
||||
num = snprintf(buf, sizeof(buf), "%c %i ", (char) type,
|
||||
(int) ecore_config_int_get(key));
|
||||
break;
|
||||
case ECORE_CONFIG_BLN:
|
||||
num = snprintf(buf, sizeof(buf), "%c %i ", (char) type,
|
||||
(int) ecore_config_boolean_get(key));
|
||||
break;
|
||||
case ECORE_CONFIG_FLT:
|
||||
num = snprintf(buf, sizeof(buf), "%c %16.16f ", (char) type,
|
||||
ecore_config_float_get(key));
|
||||
break;
|
||||
case ECORE_CONFIG_STR: {
|
||||
int slen = (strlen(ecore_config_string_get(key)) * sizeof(char)) + 3;
|
||||
str = malloc(slen);
|
||||
num = snprintf(str, slen, "%c %s ", (char) type,
|
||||
ecore_config_string_get(key));
|
||||
}
|
||||
break;
|
||||
case ECORE_CONFIG_THM:
|
||||
num = snprintf(buf, sizeof(buf), "%c %s ", (char) type,
|
||||
ecore_config_theme_get(key));
|
||||
break;
|
||||
case ECORE_CONFIG_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);
|
||||
}
|
||||
switch (e->type)
|
||||
{
|
||||
case ECORE_CONFIG_INT:
|
||||
esprintf(&val, "%i", _ecore_config_int_get(e));
|
||||
break;
|
||||
case ECORE_CONFIG_BLN:
|
||||
esprintf(&val, "%i", _ecore_config_boolean_get(e));
|
||||
break;
|
||||
case ECORE_CONFIG_FLT:
|
||||
esprintf(&val, "%16.16f", _ecore_config_float_get(e));
|
||||
break;
|
||||
case ECORE_CONFIG_STR:
|
||||
val = _ecore_config_string_get(e);
|
||||
break;
|
||||
case ECORE_CONFIG_THM:
|
||||
val = _ecore_config_theme_get(e);
|
||||
break;
|
||||
case ECORE_CONFIG_RGB:
|
||||
val = _ecore_config_argbstr_get(e);
|
||||
break;
|
||||
default:
|
||||
E(0, "Type %d not handled\n", e->type);
|
||||
}
|
||||
|
||||
if (prev_locale) setlocale(LC_NUMERIC, prev_locale);
|
||||
if (prev_locale)
|
||||
{
|
||||
setlocale(LC_NUMERIC, prev_locale);
|
||||
free(prev_locale);
|
||||
}
|
||||
|
||||
if (!(type == ECORE_CONFIG_STR)) {
|
||||
buf[1] = 0;
|
||||
buf[num - 1] = 0;
|
||||
eet_write(db->ef, (char*)key, buf, num, 1);
|
||||
} else {
|
||||
str[1] = 0;
|
||||
str[num-1] = 0;
|
||||
eet_write(db->ef, (char*)key, str, num, 1);
|
||||
free(str);
|
||||
}
|
||||
if(val)
|
||||
{
|
||||
num = esprintf(&r, "%c%c%s%c", (char) e->type, 0, val, 0);
|
||||
if(num)
|
||||
eet_write(db->ef, e->key, r, num, 1);
|
||||
free(r);
|
||||
}
|
||||
|
||||
free(val);
|
||||
}
|
||||
/*
|
||||
void
|
||||
|
|
|
@ -23,6 +23,15 @@ void _ecore_config_db_close(Ecore_Config_DB_File *db);
|
|||
char **_ecore_config_db_keys_get(Ecore_Config_DB_File *db, int *num_ret);
|
||||
Ecore_Config_Type _ecore_config_db_key_type_get(Ecore_Config_DB_File *db, const char *key);
|
||||
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);
|
||||
void _ecore_config_db_write(Ecore_Config_DB_File *db, Ecore_Config_Prop *e);
|
||||
|
||||
int _ecore_config_boolean_get(Ecore_Config_Prop *e);
|
||||
char *_ecore_config_string_get(Ecore_Config_Prop *e);
|
||||
long _ecore_config_int_get(Ecore_Config_Prop *e);
|
||||
int _ecore_config_argb_get(Ecore_Config_Prop *e, int *a, int *r,
|
||||
int *g, int *b);
|
||||
char *_ecore_config_argbstr_get(Ecore_Config_Prop *e);
|
||||
float _ecore_config_float_get(Ecore_Config_Prop *e);
|
||||
char *_ecore_config_theme_get(Ecore_Config_Prop *e);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -23,7 +23,7 @@ ecore_config_load(void)
|
|||
char file[PATH_MAX];
|
||||
|
||||
if (!__ecore_config_app_name)
|
||||
return ECORE_CONFIG_ERR_FAIL;
|
||||
return ECORE_CONFIG_ERR_FAIL;
|
||||
|
||||
snprintf(file, PATH_MAX, "%s/.e/apps/%s/config.eet", getenv("HOME"),
|
||||
__ecore_config_app_name);
|
||||
|
@ -43,7 +43,7 @@ ecore_config_save(void)
|
|||
char file[PATH_MAX];
|
||||
|
||||
if (!__ecore_config_app_name)
|
||||
return ECORE_CONFIG_ERR_FAIL;
|
||||
return ECORE_CONFIG_ERR_FAIL;
|
||||
|
||||
snprintf(file, PATH_MAX, "%s/.e/apps/%s/config.eet", getenv("HOME"),
|
||||
__ecore_config_app_name);
|
||||
|
@ -85,7 +85,7 @@ ecore_config_file_load(const char *file)
|
|||
{
|
||||
for (x = 0; x < key_count; x++)
|
||||
{
|
||||
_ecore_config_db_read(db, keys[x]);
|
||||
_ecore_config_db_read(db, keys[x]);
|
||||
}
|
||||
}
|
||||
_ecore_config_db_close(db);
|
||||
|
@ -162,7 +162,7 @@ ecore_config_file_save(const char *file)
|
|||
continue;
|
||||
}
|
||||
|
||||
_ecore_config_db_write(db, next->key);
|
||||
_ecore_config_db_write(db, next);
|
||||
|
||||
next = next->next;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue