]> Nishi Git Mirror - gwion.git/commitdiff
:art: Error on unknown module
authorfennecdjay <fennecdjay@gmail.com>
Sat, 16 Jul 2022 13:15:06 +0000 (15:15 +0200)
committerfennecdjay <fennecdjay@gmail.com>
Sat, 16 Jul 2022 13:15:06 +0000 (15:15 +0200)
include/plug.h
src/gwion.c
src/plug.c

index e53a04033842aa6e838cb2e6bbff15b861fafd9f..9b872f4c971cb1b0cd54a1a6ca2d475c8ea11125 100644 (file)
@@ -3,7 +3,7 @@
 
 ANN m_bool plug_ini(const struct Gwion_ *, const Vector);
 ANN m_bool driver_ini(const struct Gwion_ *);
-ANN void   plug_run(const struct Gwion_ *, const Map);
+ANN m_bool plug_run(const struct Gwion_ *, const Map);
 ANN void   free_plug(const Gwion);
 ANN void * get_module(const struct Gwion_ *, const m_str);
 ANN void   set_module(const struct Gwion_ *gwion, const m_str name,
index 76b461f93d4b2584beacf5983f1a4340d4503a7a..4ca0239da33735f80eb4ab559279973753317cde 100644 (file)
@@ -76,7 +76,7 @@ ANN static m_bool gwion_ok(const Gwion gwion, CliArg *arg) {
   CHECK_BB(plug_ini(gwion, &arg->lib));
   shreduler_set_loop(gwion->vm->shreduler, arg->loop);
   if (gwion_audio(gwion) > 0) {
-    plug_run(gwion, &arg->mod);
+    CHECK_BB(plug_run(gwion, &arg->mod));
     if (type_engine_init(gwion)) {
       vector_add(&gwion->data->plugs->vec, (m_uint)gwion->env->global_nspc);
       gwion->vm->cleaner_shred = gwion_cleaner(gwion);
index 576cf7dfe90edbf457102fb2a44984001a6568cb..340ca71d8a8cc18ab20df6459d9d4ef424b853d5 100644 (file)
@@ -129,21 +129,28 @@ ANN void set_module(const struct Gwion_ *gwion, const m_str name,
   map_set(map, (m_uint)name, (m_uint)plug);
 }
 
-ANN void plug_run(const struct Gwion_ *gwion, const Map mod) {
+ANN m_bool plug_run(const struct Gwion_ *gwion, const Map mod) {
   const Map map = &gwion->data->plugs->map;
   for (m_uint i = 0; i < map_size(mod); ++i) {
     const m_str name = (m_str)VKEY(mod, i);
     const m_str opt  = (m_str)VVAL(mod, i);
-    for (m_uint j = 0; j < map_size(map); ++j) {
+    m_uint j;
+    for (j = 0; j < map_size(map); ++j) {
       if (!strcmp(name, (m_str)VKEY(map, j))) {
         Plug         plug = (Plug)VVAL(map, j);
         const Vector arg  = opt ? split_args(gwion->mp, opt) : NULL;
         const modini ini  = DLSYM(plug->dl, modini, GWMODINI_NAME);
         plug->self        = ini(gwion, arg);
         if (arg) plug_free_arg(gwion->mp, arg);
+        break;
       }
     }
+    if(j == map_size(map)) {
+      gw_err("{+R}[module]{0} {C}%s{0} not found\n", name);
+      return GW_ERROR;
+    }
   }
+  return GW_OK;
 }
 
 ANN static m_bool dependencies(struct Gwion_ *gwion, const Plug plug, const loc_t loc) {