diff --git a/clients/desktop-shell.c b/clients/desktop-shell.c index 48484490..3d5119a4 100644 --- a/clients/desktop-shell.c +++ b/clients/desktop-shell.c @@ -107,8 +107,8 @@ static int key_locking = 1; static const struct config_key shell_config_keys[] = { { "background-image", CONFIG_KEY_STRING, &key_background_image }, { "background-type", CONFIG_KEY_STRING, &key_background_type }, - { "panel-color", CONFIG_KEY_INTEGER, &key_panel_color }, - { "background-color", CONFIG_KEY_INTEGER, &key_background_color }, + { "panel-color", CONFIG_KEY_UNSIGNED_INTEGER, &key_panel_color }, + { "background-color", CONFIG_KEY_UNSIGNED_INTEGER, &key_background_color }, { "locking", CONFIG_KEY_BOOLEAN, &key_locking }, }; diff --git a/shared/config-parser.c b/shared/config-parser.c index 3b8c5c20..10f6f12e 100644 --- a/shared/config-parser.c +++ b/shared/config-parser.c @@ -32,6 +32,7 @@ handle_key(const struct config_key *key, const char *value) { char *end, *s; int i, len; + unsigned int ui; switch (key->type) { case CONFIG_KEY_INTEGER: @@ -43,6 +44,15 @@ handle_key(const struct config_key *key, const char *value) *(int *)key->data = i; return 0; + case CONFIG_KEY_UNSIGNED_INTEGER: + ui = strtoul(value, &end, 0); + if (*end != '\n') { + fprintf(stderr, "invalid integer: %s\n", value); + return -1; + } + *(unsigned int *)key->data = ui; + return 0; + case CONFIG_KEY_STRING: len = strlen(value); s = malloc(len); diff --git a/shared/config-parser.h b/shared/config-parser.h index 34f5c314..27f528db 100644 --- a/shared/config-parser.h +++ b/shared/config-parser.h @@ -24,9 +24,10 @@ #define CONFIGPARSER_H enum config_key_type { - CONFIG_KEY_INTEGER, /* typeof data = int */ - CONFIG_KEY_STRING, /* typeof data = char* */ - CONFIG_KEY_BOOLEAN /* typeof data = int */ + CONFIG_KEY_INTEGER, /* typeof data = int */ + CONFIG_KEY_UNSIGNED_INTEGER, /* typeof data = unsigned int */ + CONFIG_KEY_STRING, /* typeof data = char* */ + CONFIG_KEY_BOOLEAN /* typeof data = int */ }; struct config_key {