void ModuleManager::_FindBuiltInModules(const char *prefix, const char *suffix, module_name_list *list) { uint32 count = fModules.CountModules(); uint32 prefixLength = strlen(prefix); for (uint32 i = 0; i < count; i++) { Module *module = fModules.ModuleAt(i); if (!strncmp(module->Info()->name, prefix, prefixLength) && _MatchSuffix(module->Info()->name, suffix)) list->names.insert(module->Info()->name); } }
status_t ModuleManager::GetModule(const char *path, module_info **_info) { if (path == NULL || _info == NULL) return B_BAD_VALUE; BAutolock _lock(fModules); status_t error = B_OK; Module *module = fModules.FindModule(path); if (module == NULL) { // module not yet loaded, try to get it // get the responsible add-on ModuleAddOn *addon = NULL; error = _GetAddOn(path, &addon); if (error == B_OK) { // add-on found, get the module if (module_info *info = addon->FindModuleInfo(path)) { module = new Module(addon, info); fModules.AddModule(module); } else { _PutAddOn(addon); error = B_ENTRY_NOT_FOUND; } } } // "get" the module if (error == B_OK) error = module->Get(); if (error == B_OK) *_info = module->Info(); return error; }