From 80c27b7a537df0727a57ae75c5f5a67f8b6ae9ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Fri, 11 Jun 2004 00:56:26 +0000 Subject: [PATCH] Switched to opendir() and friends instead of directly calling VFS functions. Now correctly ignores "." and ".." in a directory. Minor cleanup. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@7895 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/kernel/drivers/dev.c | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/src/kernel/drivers/dev.c b/src/kernel/drivers/dev.c index 9773488390..74beeef0d5 100755 --- a/src/kernel/drivers/dev.c +++ b/src/kernel/drivers/dev.c @@ -14,7 +14,10 @@ #include #include #include -#include + +#include +#include +#include #ifdef ARCH_x86 # include @@ -28,33 +31,36 @@ * These are mainly here to allow testing and this needs to be revisited */ const char *device_paths[] = { + "/boot/beos/system/add-ons/kernel/drivers/dev", + "/boot/beos/system/add-ons/kernel/drivers/dev/audio", + "/boot/beos/system/add-ons/kernel/drivers/dev/misc", + "/boot/beos/system/add-ons/kernel/drivers/dev/net", "/boot/drivers/dev", - "/boot/drivers/dev/audio", - "/boot/drivers/dev/misc", - "/boot/drivers/dev/net", NULL }; -int dev_init(kernel_args *ka) + +int +dev_init(kernel_args *ka) { - int fd; const char **ptr; dprintf("dev_init: entry\n"); for (ptr = device_paths; (*ptr); ptr++) { - fd = sys_open_dir(*ptr); - if (fd >= 0) { - ssize_t len; - char buf[SYS_MAX_NAME_LEN + sizeof(struct dirent) + 1]; - struct dirent *dirent = (struct dirent *)buf; + DIR *dir = opendir(*ptr); + if (dir != NULL) { + struct dirent *dirent; + + while ((dirent = readdir(dir)) != NULL) { + if (!strcmp(dirent->d_name, ".") || !strcmp(dirent->d_name, "..")) + continue; - while ((len = sys_read_dir(fd, dirent, sizeof(buf), 1)) > 0) { dprintf("loading '%s' dev module\n", dirent->d_name); dev_load_dev_module(dirent->d_name, *ptr); dprintf("loaded dev module!\n"); } - sys_close(fd); + closedir(dir); } }