예제 #1
0
liAction *li_plugin_config_action(liServer *srv, liWorker *wrk, const gchar *name, liValue *val) {
	liAction *a = NULL;
	liServerAction *sa;
	liServerOption *sopt;
	liServerOptionPtr *soptptr;

	if (NULL != (sa = (liServerAction*) g_hash_table_lookup(srv->actions, name))) {
		if (NULL == (a = sa->create_action(srv, wrk, sa->p, val, sa->userdata))) {
			ERROR(srv, "Action '%s' creation failed", name);
		}
	} else if (NULL != (sopt = find_option(srv, name))) {
		liOptionSet setting;

		if (!li_parse_option(srv, wrk, sopt, name, option_value(val), &setting)) goto exit;

		a = li_action_new_setting(setting);
	} else if (NULL != (soptptr = find_optionptr(srv, name))) {
		liOptionPtrSet setting;

		if (!li_parse_optionptr(srv, wrk, soptptr, name, option_value(val), &setting)) goto exit;

		a = li_action_new_settingptr(setting);
	} else if (NULL != g_hash_table_lookup(srv->setups, name)) {
		ERROR(srv, "'%s' can only be called in a setup block", name);
	} else {
		ERROR(srv, "unknown action %s", name);
	}

exit:
	li_value_free(val);
	return a;
}
예제 #2
0
void li_value_list_free(GPtrArray *vallist) {
	if (NULL == vallist) return;
	for (gsize i = 0; i < vallist->len; i++) {
		li_value_free(g_ptr_array_index(vallist, i));
	}
	g_ptr_array_free(vallist, TRUE);
}
예제 #3
0
static void vhost_map_regex_free(liServer *srv, gpointer param) {
	guint i;
	vhost_map_regex_data *mrd = param;
	GArray *list = mrd->list;
	UNUSED(srv);

	for (i = 0; i < list->len; i++) {
		vhost_map_regex_entry *entry = &g_array_index(list, vhost_map_regex_entry, i);

		g_regex_unref(entry->regex);
		li_value_free(entry->action);
	}
	g_array_free(list, TRUE);

	if (NULL != mrd->default_action) {
		li_value_free(mrd->default_action);
	}

	g_slice_free(vhost_map_regex_data, mrd);
}
예제 #4
0
static void vhost_map_free(liServer *srv, gpointer param) {
	vhost_map_data *md = param;

	UNUSED(srv);

	g_hash_table_destroy(md->hash);

	if (NULL != md->default_action)
		li_value_free(md->default_action);

	g_slice_free(vhost_map_data, md);
}
예제 #5
0
파일: mod_lua.c 프로젝트: lzw978/lighttpd2
static void lua_config_free(liServer *srv, gpointer param) {
	lua_config *conf = (lua_config*) param;
	UNUSED(srv);

	if (conf->worker_config) {
		lua_worker_config *wc = conf->worker_config;
		guint i;
		for (i = 0; i < srv->worker_count; i++) {
			li_action_release(srv, wc[i].act);
		}
		g_slice_free1(sizeof(lua_worker_config) * srv->worker_count, wc);
	}
	g_string_free(conf->filename, TRUE);
	li_value_free(conf->args);

	if (conf->mconf_link.data) { /* still in LI_SERVER_INIT */
		module_config *mc = conf->p->data;
		g_queue_unlink(&mc->lua_configs, &conf->mconf_link);
		conf->mconf_link.data = NULL;
	}

	g_slice_free(lua_config, conf);
}
예제 #6
0
파일: value.c 프로젝트: presbrey/lighttpd2
static void _value_hash_free_value(gpointer data) {
    li_value_free((liValue*) data);
}