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; }
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); }
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); }
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); }
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); }
static void _value_hash_free_value(gpointer data) { li_value_free((liValue*) data); }