diff options
| author | Neil Blakey-Milner <nbm@FreeBSD.org> | 2000-06-23 14:01:06 +0000 |
|---|---|---|
| committer | Neil Blakey-Milner <nbm@FreeBSD.org> | 2000-06-23 14:01:06 +0000 |
| commit | 0138fc17c5a70e8b54ae293fdfd215582df265d8 (patch) | |
| tree | 19c1df0217eb9f3601e936a5974f8798b3f415cc | |
| parent | 16a3f31561eebd73c3ec821b2798b74c48a6ffd6 (diff) | |
Notes
| -rw-r--r-- | lib/libdisk/disk.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/lib/libdisk/disk.c b/lib/libdisk/disk.c index f75dcbf27673..c23c0ed25152 100644 --- a/lib/libdisk/disk.c +++ b/lib/libdisk/disk.c @@ -16,6 +16,7 @@ #include <fcntl.h> #include <string.h> #include <err.h> +#include <sys/sysctl.h> #include <sys/types.h> #include <sys/stat.h> #include <sys/ioctl.h> @@ -457,9 +458,23 @@ Disk_Names() struct diskslices ds; int fd; static char **disks; + int error; + size_t listsize; + char *disklist, **dp; disks = malloc(sizeof *disks * (1 + MAX_NO_DISKS)); memset(disks,0,sizeof *disks * (1 + MAX_NO_DISKS)); + error = sysctlbyname("kern.disks", NULL, &listsize, NULL, 0); + if (!error) { + disklist = (char *)malloc(listsize); + error = sysctlbyname("kern.disks", disklist, &listsize, NULL, 0); + if (error) + err(1, "sysctlbyname(\"kern.disks\") failed"); + k = 0; + for (dp = disks; ((*dp = strsep(&disklist, " ")) != NULL) && k < MAX_NO_DISKS; k++, dp++); + return disks; + } + warn("kern.disks sysctl not available"); k = 0; for (j = 0; device_list[j]; j++) { for (i = 0; i < MAX_NO_DISKS; i++) { |
