GString *li_common_value_to_string_(liValue *val) { GString *str = NULL; switch (val->type) { case LI_VALUE_NONE: str = g_string_new("null"); break; case LI_VALUE_BOOLEAN: str = g_string_new(val->data.boolean ? "true" : "false"); break; case LI_VALUE_NUMBER: str = g_string_sized_new(0); g_string_printf(str, "%" G_GINT64_FORMAT, val->data.number); break; case LI_VALUE_STRING: str = g_string_new_len(CONST_STR_LEN("\"")); g_string_append_len(str, GSTR_LEN(val->data.string)); g_string_append_c(str, '"'); break; case LI_VALUE_LIST: str = g_string_new_len(CONST_STR_LEN("(")); if (val->data.list->len) { GString *tmp = li_value_to_string(g_ptr_array_index(val->data.list, 0)); g_string_append(str, tmp->str); g_string_free(tmp, TRUE); for (guint i = 1; i < val->data.list->len; i++) { tmp = li_value_to_string(g_ptr_array_index(val->data.list, 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; default: /* other cases need to be handled by li_value_to_string */ break; } return str; }
gboolean li_plugins_handle_item(liServer *srv, GString *itemname, liValue *parameters, GError **err) { liPlugins *ps = &srv->plugins; server_item *si; #if 0 /* debug items */ { GString *tmp = li_value_to_string(parameters); ERROR(srv, "Item '%s': %s", itemname->str, tmp->str); g_string_free(tmp, TRUE); } #endif si = g_hash_table_lookup(ps->load_items, itemname->str); if (!si) { g_set_error(err, LI_ANGEL_CONFIG_PARSER_ERROR, LI_ANGEL_CONFIG_PARSER_ERROR_PARSE, "Unknown item '%s' - perhaps you forgot to load the module?", itemname->str); return FALSE; } else { return si->p_item->handle_parse_item(srv, si->p, parameters, err); } }
GString *li_value_to_string(liValue *val) { GString *str; switch (val->type) { case LI_VALUE_NONE: return NULL; case LI_VALUE_BOOLEAN: str = g_string_new(val->data.boolean ? "true" : "false"); break; case LI_VALUE_NUMBER: str = g_string_sized_new(0); g_string_printf(str, "%" G_GINT64_FORMAT, val->data.number); break; case LI_VALUE_STRING: str = g_string_new_len(CONST_STR_LEN("\"")); g_string_append_len(str, GSTR_LEN(val->data.string)); g_string_append_c(str, '"'); break; case LI_VALUE_LIST: str = g_string_new_len(CONST_STR_LEN("(")); if (val->data.list->len) { GString *tmp = li_value_to_string(g_array_index(val->data.list, liValue*, 0)); g_string_append(str, tmp->str); g_string_free(tmp, TRUE); for (guint i = 1; i < val->data.list->len; i++) { tmp = li_value_to_string(g_array_index(val->data.list, liValue*, 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 LI_VALUE_HASH: { GHashTableIter iter; gpointer k, v; GString *tmp; guint i = 0; str = g_string_new_len(CONST_STR_LEN("[")); g_hash_table_iter_init(&iter, val->data.hash); while (g_hash_table_iter_next(&iter, &k, &v)) { if (i) g_string_append_len(str, CONST_STR_LEN(", ")); tmp = li_value_to_string((liValue*)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 LI_VALUE_ACTION: str = g_string_new_len(CONST_STR_LEN("<action>")); break; case LI_VALUE_CONDITION: str = g_string_new_len(CONST_STR_LEN("<condition>")); break; default: return NULL; }