rearrange a few things

This commit is contained in:
Lennart Poettering 2009-02-04 17:17:32 +01:00
parent d6dd907cc8
commit 078a8d583f

View file

@ -79,11 +79,6 @@ static int add_key_value(pa_hashmap *map, char *key, char *value, const char* co
} }
pa_modargs *pa_modargs_new(const char *args, const char* const* valid_keys) { pa_modargs *pa_modargs_new(const char *args, const char* const* valid_keys) {
pa_hashmap *map = NULL;
map = pa_hashmap_new(pa_idxset_string_hash_func, pa_idxset_string_compare_func);
if (args) {
enum { enum {
WHITESPACE, WHITESPACE,
KEY, KEY,
@ -93,13 +88,20 @@ pa_modargs *pa_modargs_new(const char *args, const char* const* valid_keys) {
VALUE_TICKS VALUE_TICKS
} state; } state;
const char *p, *key, *value; const char *p, *key = NULL, *value = NULL;
size_t key_len = 0, value_len = 0; size_t key_len = 0, value_len = 0;
pa_hashmap *map;
map = pa_hashmap_new(pa_idxset_string_hash_func, pa_idxset_string_compare_func);
if (!args)
return (pa_modargs*) map;
key = value = NULL;
state = WHITESPACE; state = WHITESPACE;
for (p = args; *p; p++) { for (p = args; *p; p++) {
switch (state) { switch (state) {
case WHITESPACE: case WHITESPACE:
if (*p == '=') if (*p == '=')
goto fail; goto fail;
@ -109,6 +111,7 @@ pa_modargs *pa_modargs_new(const char *args, const char* const* valid_keys) {
key_len = 1; key_len = 1;
} }
break; break;
case KEY: case KEY:
if (*p == '=') if (*p == '=')
state = VALUE_START; state = VALUE_START;
@ -117,6 +120,7 @@ pa_modargs *pa_modargs_new(const char *args, const char* const* valid_keys) {
else else
key_len++; key_len++;
break; break;
case VALUE_START: case VALUE_START:
if (*p == '\'') { if (*p == '\'') {
state = VALUE_TICKS; state = VALUE_TICKS;
@ -136,6 +140,7 @@ pa_modargs *pa_modargs_new(const char *args, const char* const* valid_keys) {
value_len = 1; value_len = 1;
} }
break; break;
case VALUE_SIMPLE: case VALUE_SIMPLE:
if (isspace(*p)) { if (isspace(*p)) {
if (add_key_value(map, pa_xstrndup(key, key_len), pa_xstrndup(value, value_len), valid_keys) < 0) if (add_key_value(map, pa_xstrndup(key, key_len), pa_xstrndup(value, value_len), valid_keys) < 0)
@ -144,6 +149,7 @@ pa_modargs *pa_modargs_new(const char *args, const char* const* valid_keys) {
} else } else
value_len++; value_len++;
break; break;
case VALUE_DOUBLE_QUOTES: case VALUE_DOUBLE_QUOTES:
if (*p == '"') { if (*p == '"') {
if (add_key_value(map, pa_xstrndup(key, key_len), pa_xstrndup(value, value_len), valid_keys) < 0) if (add_key_value(map, pa_xstrndup(key, key_len), pa_xstrndup(value, value_len), valid_keys) < 0)
@ -152,6 +158,7 @@ pa_modargs *pa_modargs_new(const char *args, const char* const* valid_keys) {
} else } else
value_len++; value_len++;
break; break;
case VALUE_TICKS: case VALUE_TICKS:
if (*p == '\'') { if (*p == '\'') {
if (add_key_value(map, pa_xstrndup(key, key_len), pa_xstrndup(value, value_len), valid_keys) < 0) if (add_key_value(map, pa_xstrndup(key, key_len), pa_xstrndup(value, value_len), valid_keys) < 0)
@ -171,13 +178,11 @@ pa_modargs *pa_modargs_new(const char *args, const char* const* valid_keys) {
goto fail; goto fail;
} else if (state != WHITESPACE) } else if (state != WHITESPACE)
goto fail; goto fail;
}
return (pa_modargs*) map; return (pa_modargs*) map;
fail: fail:
if (map)
pa_modargs_free((pa_modargs*) map); pa_modargs_free((pa_modargs*) map);
return NULL; return NULL;