Exemplo n.º 1
0
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;
}
Exemplo n.º 2
0
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);
	}
}
Exemplo n.º 3
0
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;
    }