if (engine == NULL || name == NULL) {
return kr_error(EINVAL);
}
-
+ /* Check priority modules */
+ bool is_priority = false;
+ if (name[0] == '<') {
+ is_priority = true;
+ name += 1;
+ }
/* Make sure module is unloaded */
(void) engine_unregister(engine, name);
/* Attempt to load binary module */
free(module);
return ret;
}
-
if (array_push(engine->modules, module) < 0) {
engine_unload(engine, module);
return kr_error(ENOMEM);
}
+ /* Push to front if priority module */
+ if (is_priority) {
+ struct kr_module **arr = engine->modules.at;
+ memmove(&arr[1], &arr[0], sizeof(*arr) * (engine->modules.len - 1));
+ arr[0] = module;
+ }
/* Register properties */
if (module->props) {