|
|
@@ -165,26 +165,20 @@ static int func_globalinit (struct NCDModuleInitParams params)
|
|
|
return 1;
|
|
|
}
|
|
|
|
|
|
-static void provide_func_new_templ (NCDModuleInst *i, int event)
|
|
|
+static void provide_func_new_templ (void *vo, NCDModuleInst *i, int event)
|
|
|
{
|
|
|
- // allocate instance
|
|
|
- struct provide *o = malloc(sizeof(*o));
|
|
|
- if (!o) {
|
|
|
- ModuleLog(i, BLOG_ERROR, "failed to allocate instance");
|
|
|
- goto fail0;
|
|
|
- }
|
|
|
+ struct provide *o = vo;
|
|
|
o->i = i;
|
|
|
- NCDModuleInst_Backend_SetUser(i, o);
|
|
|
|
|
|
// read arguments
|
|
|
NCDValRef name_arg;
|
|
|
if (!NCDVal_ListRead(i->args, 1, &name_arg)) {
|
|
|
ModuleLog(o->i, BLOG_ERROR, "wrong arity");
|
|
|
- goto fail1;
|
|
|
+ goto fail0;
|
|
|
}
|
|
|
if (!NCDVal_IsStringNoNulls(name_arg)) {
|
|
|
ModuleLog(o->i, BLOG_ERROR, "wrong type");
|
|
|
- goto fail1;
|
|
|
+ goto fail0;
|
|
|
}
|
|
|
o->name = NCDVal_StringValue(name_arg);
|
|
|
|
|
|
@@ -200,7 +194,7 @@ static void provide_func_new_templ (NCDModuleInst *i, int event)
|
|
|
|
|
|
if (!event) {
|
|
|
ModuleLog(o->i, BLOG_ERROR, "a provide with this name already exists");
|
|
|
- goto fail1;
|
|
|
+ goto fail0;
|
|
|
}
|
|
|
|
|
|
// set queued
|
|
|
@@ -218,27 +212,24 @@ static void provide_func_new_templ (NCDModuleInst *i, int event)
|
|
|
|
|
|
return;
|
|
|
|
|
|
-fail1:
|
|
|
- free(o);
|
|
|
fail0:
|
|
|
NCDModuleInst_Backend_SetError(i);
|
|
|
NCDModuleInst_Backend_Dead(i);
|
|
|
}
|
|
|
|
|
|
-static void provide_func_new (NCDModuleInst *i)
|
|
|
+static void provide_func_new (void *vo, NCDModuleInst *i)
|
|
|
{
|
|
|
- provide_func_new_templ(i, 0);
|
|
|
+ provide_func_new_templ(vo, i, 0);
|
|
|
}
|
|
|
|
|
|
-static void provide_event_func_new (NCDModuleInst *i)
|
|
|
+static void provide_event_func_new (void *vo, NCDModuleInst *i)
|
|
|
{
|
|
|
- provide_func_new_templ(i, 1);
|
|
|
+ provide_func_new_templ(vo, i, 1);
|
|
|
}
|
|
|
|
|
|
static void provide_free (struct provide *o)
|
|
|
{
|
|
|
ASSERT(o->is_queued || LinkedList2_IsEmpty(&o->depends))
|
|
|
- NCDModuleInst *i = o->i;
|
|
|
|
|
|
if (o->is_queued) {
|
|
|
// remove from existing provide's queued provides list
|
|
|
@@ -263,10 +254,7 @@ static void provide_free (struct provide *o)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- // free instance
|
|
|
- free(o);
|
|
|
-
|
|
|
- NCDModuleInst_Backend_Dead(i);
|
|
|
+ NCDModuleInst_Backend_Dead(o->i);
|
|
|
}
|
|
|
|
|
|
static void provide_func_die (void *vo)
|
|
|
@@ -296,26 +284,20 @@ static void provide_func_die (void *vo)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-static void depend_func_new (NCDModuleInst *i)
|
|
|
+static void depend_func_new (void *vo, NCDModuleInst *i)
|
|
|
{
|
|
|
- // allocate instance
|
|
|
- struct depend *o = malloc(sizeof(*o));
|
|
|
- if (!o) {
|
|
|
- ModuleLog(i, BLOG_ERROR, "failed to allocate instance");
|
|
|
- goto fail0;
|
|
|
- }
|
|
|
+ struct depend *o = vo;
|
|
|
o->i = i;
|
|
|
- NCDModuleInst_Backend_SetUser(i, o);
|
|
|
|
|
|
// read arguments
|
|
|
NCDValRef name_arg;
|
|
|
if (!NCDVal_ListRead(i->args, 1, &name_arg)) {
|
|
|
ModuleLog(o->i, BLOG_ERROR, "wrong arity");
|
|
|
- goto fail1;
|
|
|
+ goto fail0;
|
|
|
}
|
|
|
if (!NCDVal_IsStringNoNulls(name_arg)) {
|
|
|
ModuleLog(o->i, BLOG_ERROR, "wrong type");
|
|
|
- goto fail1;
|
|
|
+ goto fail0;
|
|
|
}
|
|
|
o->name = NCDVal_StringValue(name_arg);
|
|
|
|
|
|
@@ -342,8 +324,6 @@ static void depend_func_new (NCDModuleInst *i)
|
|
|
|
|
|
return;
|
|
|
|
|
|
-fail1:
|
|
|
- free(o);
|
|
|
fail0:
|
|
|
NCDModuleInst_Backend_SetError(i);
|
|
|
NCDModuleInst_Backend_Dead(i);
|
|
|
@@ -351,7 +331,6 @@ fail0:
|
|
|
|
|
|
static void depend_free (struct depend *o)
|
|
|
{
|
|
|
- NCDModuleInst *i = o->i;
|
|
|
ASSERT(!o->p || !o->p->is_queued)
|
|
|
|
|
|
if (o->p) {
|
|
|
@@ -367,10 +346,7 @@ static void depend_free (struct depend *o)
|
|
|
LinkedList2_Remove(&free_depends, &o->node);
|
|
|
}
|
|
|
|
|
|
- // free instance
|
|
|
- free(o);
|
|
|
-
|
|
|
- NCDModuleInst_Backend_Dead(i);
|
|
|
+ NCDModuleInst_Backend_Dead(o->i);
|
|
|
}
|
|
|
|
|
|
static void depend_func_die (void *vo)
|
|
|
@@ -421,19 +397,22 @@ static int depend_func_getobj (void *vo, const char *objname, NCDObject *out_obj
|
|
|
static const struct NCDModule modules[] = {
|
|
|
{
|
|
|
.type = "provide",
|
|
|
- .func_new = provide_func_new,
|
|
|
- .func_die = provide_func_die
|
|
|
+ .func_new2 = provide_func_new,
|
|
|
+ .func_die = provide_func_die,
|
|
|
+ .alloc_size = sizeof(struct provide)
|
|
|
}, {
|
|
|
.type = "provide_event",
|
|
|
- .func_new = provide_event_func_new,
|
|
|
- .func_die = provide_func_die
|
|
|
+ .func_new2 = provide_event_func_new,
|
|
|
+ .func_die = provide_func_die,
|
|
|
+ .alloc_size = sizeof(struct provide)
|
|
|
}, {
|
|
|
.type = "depend",
|
|
|
- .func_new = depend_func_new,
|
|
|
+ .func_new2 = depend_func_new,
|
|
|
.func_die = depend_func_die,
|
|
|
.func_clean = depend_func_clean,
|
|
|
.func_getobj = depend_func_getobj,
|
|
|
- .flags = NCDMODULE_FLAG_CAN_RESOLVE_WHEN_DOWN
|
|
|
+ .flags = NCDMODULE_FLAG_CAN_RESOLVE_WHEN_DOWN,
|
|
|
+ .alloc_size = sizeof(struct depend)
|
|
|
}, {
|
|
|
.type = NULL
|
|
|
}
|