#define MAX_MODULES 10
#define BUF_MAX 2048
+struct userdata;
+
struct module_item {
char *name;
char *args;
};
struct module_info {
+ struct userdata *userdata;
char *name;
struct module_item items[MAX_MODULES];
}
}
-static void unload_one_module(struct userdata *u, struct module_info*m, unsigned i) {
- pa_assert(u);
+static void unload_one_module(struct module_info *m, unsigned i) {
+ struct userdata *u;
+
pa_assert(m);
pa_assert(i < m->n_items);
+ u = m->userdata;
+
if (m->items[i].index == PA_INVALID_INDEX)
return;
m->items[i].name = m->items[i].args = NULL;
}
-static void unload_all_modules(struct userdata *u, struct module_info*m) {
+static void unload_all_modules(struct module_info *m) {
unsigned i;
- pa_assert(u);
pa_assert(m);
for (i = 0; i < m->n_items; i++)
- unload_one_module(u, m, i);
+ unload_one_module(m, i);
m->n_items = 0;
}
static void load_module(
- struct userdata *u,
struct module_info *m,
unsigned i,
const char *name,
const char *args,
pa_bool_t is_new) {
+ struct userdata *u;
pa_module *mod;
- pa_assert(u);
pa_assert(m);
pa_assert(name);
pa_assert(args);
+ u = m->userdata;
+
if (!is_new) {
if (m->items[i].index != PA_INVALID_INDEX &&
- strcmp(m->items[i].name, name) == 0 &&
- strcmp(m->items[i].args, args) == 0)
+ pa_streq(m->items[i].name, name) &&
+ pa_streq(m->items[i].args, args))
return;
- unload_one_module(u, m, i);
+ unload_one_module(m, i);
}
pa_log_debug("Loading module '%s' with args '%s' due to GConf configuration.", name, args);
m->items[i].index = mod->index;
}
-static void module_info_free(void *p, void *userdata) {
+static void module_info_free(void *p) {
struct module_info *m = p;
- struct userdata *u = userdata;
pa_assert(m);
- pa_assert(u);
- unload_all_modules(u, m);
+ unload_all_modules(m);
pa_xfree(m->name);
pa_xfree(m);
}
int ret = 0;
do {
- if ((opcode = read_byte(u)) < 0){
+ if ((opcode = read_byte(u)) < 0) {
if (errno == EINTR || errno == EAGAIN)
break;
goto fail;
if (!(m = pa_hashmap_get(u->module_infos, name))) {
m = pa_xnew(struct module_info, 1);
+ m->userdata = u;
m->name = name;
m->n_items = 0;
pa_hashmap_put(u->module_infos, m->name, m);
goto fail;
}
- load_module(u, m, i, module, args, i >= m->n_items);
+ load_module(m, i, module, args, i >= m->n_items);
i++;
/* Unload all removed modules */
for (j = i; j < m->n_items; j++)
- unload_one_module(u, m, j);
+ unload_one_module(m, j);
m->n_items = i;
if ((m = pa_hashmap_get(u->module_infos, name))) {
pa_hashmap_remove(u->module_infos, name);
- module_info_free(m, u);
+ module_info_free(m);
}
pa_xfree(name);
pa_close(u->fd);
if (u->module_infos)
- pa_hashmap_free(u->module_infos, module_info_free, u);
+ pa_hashmap_free(u->module_infos, (pa_free_cb_t) module_info_free);
pa_xfree(u);
}