The kernelemu's open_module_list() now also takes the built-in modules in to

account.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23772 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Axel Dörfler
2008-01-28 13:35:27 +00:00
parent 481c884164
commit 1245d1a3de
+20 -1
View File
@@ -125,6 +125,7 @@ public:
private: private:
void _FindModules(BDirectory &dir, const char *moduleDir, void _FindModules(BDirectory &dir, const char *moduleDir,
module_name_list *list); module_name_list *list);
void _FindBuiltInModules(const char *prefix, module_name_list *list);
status_t _GetAddOn(const char *path, ModuleAddOn **addon); status_t _GetAddOn(const char *path, ModuleAddOn **addon);
void _PutAddOn(ModuleAddOn *addon); void _PutAddOn(ModuleAddOn *addon);
@@ -478,6 +479,8 @@ ModuleManager::OpenModuleList(const char *prefix)
module_name_list *list = NULL; module_name_list *list = NULL;
if (prefix) { if (prefix) {
list = new module_name_list; list = new module_name_list;
_FindBuiltInModules(prefix, list);
for (int32 i = 0; gModuleDirs[i]; i++) { for (int32 i = 0; gModuleDirs[i]; i++) {
BPath path; BPath path;
BDirectory dir; BDirectory dir;
@@ -486,6 +489,7 @@ ModuleManager::OpenModuleList(const char *prefix)
_FindModules(dir, gModuleDirs[i], list); _FindModules(dir, gModuleDirs[i], list);
} }
} }
list->it = list->names.begin(); list->it = list->names.begin();
} }
return list; return list;
@@ -530,6 +534,7 @@ ModuleManager::AddBuiltInModule(module_info *info)
{ {
BAutolock _lock(fModules); BAutolock _lock(fModules);
TRACE(("add module %p, \"%s\"\n", info, info->name));
return fModules.AddModule(new Module(NULL, info)) ? B_OK : B_ERROR; return fModules.AddModule(new Module(NULL, info)) ? B_OK : B_ERROR;
} }
@@ -596,7 +601,21 @@ ModuleManager::_FindModules(BDirectory &dir, const char *moduleDir,
} }
} }
// _GetAddOn
void
ModuleManager::_FindBuiltInModules(const char *prefix, 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))
list->names.insert(module->Info()->name);
}
}
status_t status_t
ModuleManager::_GetAddOn(const char *name, ModuleAddOn **_addon) ModuleManager::_GetAddOn(const char *name, ModuleAddOn **_addon)
{ {