|
|
|
@ -194,3 +194,74 @@ gpointer option_extract_value(option *opt) {
|
|
|
|
|
opt->type = OPTION_NONE; |
|
|
|
|
return val; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
GString *option_to_string(option *opt) { |
|
|
|
|
GString *str; |
|
|
|
|
|
|
|
|
|
switch (opt->type) { |
|
|
|
|
case OPTION_NONE: |
|
|
|
|
return NULL; |
|
|
|
|
case OPTION_BOOLEAN: |
|
|
|
|
str = g_string_new(opt->value.opt_bool ? "true" : "false"); |
|
|
|
|
break; |
|
|
|
|
case OPTION_INT: |
|
|
|
|
str = g_string_sized_new(0); |
|
|
|
|
g_string_printf(str, "%d", opt->value.opt_int); |
|
|
|
|
break; |
|
|
|
|
case OPTION_STRING: |
|
|
|
|
str = g_string_new_len(CONST_STR_LEN("\"")); |
|
|
|
|
g_string_append_len(str, GSTR_LEN(opt->value.opt_string)); |
|
|
|
|
g_string_append_c(str, '"'); |
|
|
|
|
break; |
|
|
|
|
case OPTION_LIST: |
|
|
|
|
str = g_string_new_len(CONST_STR_LEN("(")); |
|
|
|
|
if (opt->value.opt_list->len) { |
|
|
|
|
GString *tmp = option_to_string(g_array_index(opt->value.opt_list, option*, 0)); |
|
|
|
|
g_string_append(str, tmp->str); |
|
|
|
|
g_string_free(tmp, TRUE); |
|
|
|
|
for (guint i = 1; i < opt->value.opt_list->len; i++) { |
|
|
|
|
tmp = option_to_string(g_array_index(opt->value.opt_list, option*, i)); |
|
|
|
|
g_string_append_len(str, CONST_STR_LEN(", ")); |
|
|
|
|
g_string_append(str, tmp->str); |
|
|
|
|
g_string_free(tmp, TRUE); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
g_string_append_c(str, ')'); |
|
|
|
|
break; |
|
|
|
|
case OPTION_HASH: |
|
|
|
|
{ |
|
|
|
|
str = g_string_new_len(CONST_STR_LEN("[")); |
|
|
|
|
GHashTableIter iter; |
|
|
|
|
gpointer k, v; |
|
|
|
|
GString *tmp; |
|
|
|
|
guint i = 0; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
g_hash_table_iter_init(&iter, opt->value.opt_hash); |
|
|
|
|
while (g_hash_table_iter_next(&iter, &k, &v)) { |
|
|
|
|
if (i) |
|
|
|
|
g_string_append_len(str, CONST_STR_LEN(", ")); |
|
|
|
|
tmp = option_to_string((option*)v); |
|
|
|
|
g_string_append_len(str, GSTR_LEN((GString*)k)); |
|
|
|
|
g_string_append_len(str, CONST_STR_LEN(": ")); |
|
|
|
|
g_string_append_len(str, GSTR_LEN(tmp)); |
|
|
|
|
g_string_free(tmp, TRUE); |
|
|
|
|
i++; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
g_string_append_c(str, ']'); |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
case OPTION_ACTION: |
|
|
|
|
str = g_string_new_len(CONST_STR_LEN("<action>")); |
|
|
|
|
break; |
|
|
|
|
case OPTION_CONDITION: |
|
|
|
|
str = g_string_new_len(CONST_STR_LEN("<condition>")); |
|
|
|
|
break; |
|
|
|
|
default: |
|
|
|
|
return NULL; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return str; |
|
|
|
|
} |
|
|
|
|