Another patch by Vasilis Kaoutsis:

* Use find_directory() for the hash for preloaded modules. I am not sure this
  patch is needed, since it only concerns the hash. Please review.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25511 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Stephan Aßmus 2008-05-15 12:28:08 +00:00
parent f940ec3d9c
commit 9aa2788e97

View File

@ -950,7 +950,8 @@ register_preloaded_module_image(struct preloaded_image *image)
// that module). Also helpful for recurse_directory().
{
// ToDo: this is kind of a hack to have the full path in the hash
// (it always assumes the preloaded add-ons to be in the system directory)
// (it always assumes the preloaded add-ons to be in the system
// directory)
char path[B_FILE_NAME_LENGTH];
const char *name, *suffix;
if (moduleImage->info[0]
@ -958,12 +959,31 @@ register_preloaded_module_image(struct preloaded_image *image)
image->name)) != NULL) {
// even if strlcpy() is used here, it's by no means safe
// against buffer overflows
size_t length = strlcpy(path, "/boot/beos/system/add-ons/kernel/",
sizeof(path));
strlcpy(path + length, name, strlen(image->name)
+ 1 + (suffix - name));
KPath addonsKernelPath;
status_t status = find_directory(B_BEOS_ADDONS_DIRECTORY,
gBootDevice, false, addonsKernelPath.LockBuffer(),
addonsKernelPath.BufferSize());
if (status != B_OK) {
dprintf("register_preloaded_module_image: find_directory() "
"failed: %s\n", strerror(status));
}
addonsKernelPath.UnlockBuffer();
if (status == B_OK) {
status = addonsKernelPath.Append("kernel/");
// KPath does not remove the trailing '/'
}
if (status == B_OK) {
size_t length = strlcpy(path, addonsKernelPath.Path(),
sizeof(path));
strlcpy(path + length, name, strlen(image->name)
+ 1 + (suffix - name));
moduleImage->path = strdup(path);
moduleImage->path = strdup(path);
} else {
moduleImage->path = NULL;
// this will trigger B_NO_MEMORY, which is the only
// reason to get here anyways...
}
} else
moduleImage->path = strdup(image->name);
}