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:
handyande 2005-12-18 19:07:52 +00:00 committed by handyande
parent 520ca1ff13
commit 414d3e5352
5 changed files with 350 additions and 313 deletions

View File

@ -19,7 +19,8 @@ pathcmp(const char *s1, const char *s2)
char *s1d, *s2d;
// strip common part of paths
while(*s1 && *s2 && *s1 == *s2) {
while(*s1 && *s2 && *s1 == *s2)
{
s1++;
s2++;
}
@ -57,12 +58,14 @@ get(const char *key)
{
Ecore_Config_Prop *e;
if (!(e = ecore_config_get(key))) {
if (!(e = ecore_config_get(key)))
{
fprintf(stderr, "No such property\n");
return -1;
}
switch (e->type) {
switch (e->type)
{
case ECORE_CONFIG_NIL:
printf("\n");
break;
@ -100,6 +103,7 @@ list(const char *file)
Ecore_Config_Prop *e;
Ecore_Sheap *keys;
// Get number of keys and create heap for sort
ef = eet_open(file, EET_FILE_MODE_READ);
if (!ef) return -1;
@ -109,22 +113,29 @@ list(const char *file)
e = __ecore_config_bundle_local->data;
do {
do
{
// don't show system settings
if( !(e->flags & ECORE_CONFIG_FLAG_SYSTEM) )
ecore_sheap_insert(keys, e->key);
} while((e = e->next));
}
while((e = e->next));
while((key = ecore_sheap_extract(keys))) {
while((key = ecore_sheap_extract(keys)))
{
printf("%-28s\t", key);
get(key);
}
ecore_sheap_destroy(keys);
return 0;
}
void
usage_and_exit(const char *prog, int ret, const char *msg)
{
if (msg) fprintf(stderr, msg);
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");
@ -162,7 +173,8 @@ main(int argc, char * const argv[])
if(argc < 4)
usage_and_exit(prog, 2, NULL);
while(1) {
while(1)
{
static struct option long_options[] = {
{"file", 1, 0, 'c'},
{"list", 0, 0, 'a'},
@ -183,7 +195,8 @@ main(int argc, char * const argv[])
if(ret == -1)
break;
switch(ret) {
switch(ret)
{
case 'k':
key = strdup(optarg);
break;
@ -223,7 +236,7 @@ main(int argc, char * const argv[])
break;
case '?':
case ':':
usage_and_exit(prog, 2, "Bad argument\n");
usage_and_exit(prog, 2, "Bad argument");
default:
cmd = ret;
break;
@ -231,37 +244,38 @@ main(int argc, char * const argv[])
}
if(cmd == 's' && type == -1)
usage_and_exit(prog, 2, "You need to specify a command!\n");
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");
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!\n");
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);
ret = 0;
// Execute command
switch (cmd) {
switch (cmd)
{
case 's':
if (ecore_config_typed_set(key, value, type) != ECORE_CONFIG_ERR_SUCC) {
fprintf(stderr, "Set failed for %s\n", key);
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\n", key);
if(del(key))
{
fprintf(stderr, "Delete failed for %s", key);
ret = 1;
} else {
ecore_config_file_save(file);

View File

@ -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);
val = strdup("<nil>");
break;
case ECORE_CONFIG_INT:
esprintf(&r, "%s:%s=%ld", key, type, ecore_config_int_get(key));
esprintf(&val, "%ld", _ecore_config_int_get(e));
break;
case ECORE_CONFIG_BLN:
esprintf(&r, "%s:%s=%ld", key, type, ecore_config_boolean_get(key));
esprintf(&val, "%ld", _ecore_config_boolean_get(e));
break;
case ECORE_CONFIG_FLT:
esprintf(&r, "%s:%s=%lf", key, type, ecore_config_float_get(key));
esprintf(&val, "%lf", _ecore_config_float_get(e));
break;
case ECORE_CONFIG_STR:
esprintf(&r, "%s:%s=\"%s\"", key, type,
ecore_config_string_get(key));
esprintf(&val, "\"%s\"", _ecore_config_string_get(e));
break;
case ECORE_CONFIG_RGB:
esprintf(&r, "%s:%s=#%08x", key, type, ecore_config_int_get(key));
esprintf(&val, "#%08x", _ecore_config_int_get(e));
break;
case ECORE_CONFIG_THM:
esprintf(&r, "%s:%s=\"%s\"", key, type,
ecore_config_theme_get(key));
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)

View File

@ -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");
switch (type)
switch (e->type)
{
case ECORE_CONFIG_INT:
num = snprintf(buf, sizeof(buf), "%c %i ", (char) type,
(int) ecore_config_int_get(key));
esprintf(&val, "%i", _ecore_config_int_get(e));
break;
case ECORE_CONFIG_BLN:
num = snprintf(buf, sizeof(buf), "%c %i ", (char) type,
(int) ecore_config_boolean_get(key));
esprintf(&val, "%i", _ecore_config_boolean_get(e));
break;
case ECORE_CONFIG_FLT:
num = snprintf(buf, sizeof(buf), "%c %16.16f ", (char) type,
ecore_config_float_get(key));
esprintf(&val, "%16.16f", _ecore_config_float_get(e));
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));
}
case ECORE_CONFIG_STR:
val = _ecore_config_string_get(e);
break;
case ECORE_CONFIG_THM:
num = snprintf(buf, sizeof(buf), "%c %s ", (char) type,
ecore_config_theme_get(key));
val = _ecore_config_theme_get(e);
break;
case ECORE_CONFIG_RGB:
num = snprintf(buf, sizeof(buf), "%c %s ", (char) type,
ecore_config_argbstr_get(key));
val = _ecore_config_argbstr_get(e);
break;
default:
E(0, "Type %d not handled\n", type);
E(0, "Type %d not handled\n", e->type);
}
if (prev_locale) setlocale(LC_NUMERIC, 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 (prev_locale)
{
setlocale(LC_NUMERIC, prev_locale);
free(prev_locale);
}
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

View File

@ -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

View File

@ -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;
}