diff options
author | nbm <nbm@FreeBSD.org> | 2000-06-22 11:44:43 +0000 |
---|---|---|
committer | nbm <nbm@FreeBSD.org> | 2000-06-22 11:44:43 +0000 |
commit | 23d56058cf4c09226e268a043ef817826f35a5bf (patch) | |
tree | 45b592030b05993c16f338a4bf762271d3cff227 /sys/kern/subr_disk.c | |
parent | 74ce1c2902ef51bc68468c407296c41fbfc6c086 (diff) | |
download | FreeBSD-src-23d56058cf4c09226e268a043ef817826f35a5bf.zip FreeBSD-src-23d56058cf4c09226e268a043ef817826f35a5bf.tar.gz |
Add 'kern.disks', a sysctl which returns the list of disks from
disk_enumerate(), space delimited. This allows non-root users to get a
list of disks and will simplify libdisk's Disk_Names().
Reviewed by: phk
Diffstat (limited to 'sys/kern/subr_disk.c')
-rw-r--r-- | sys/kern/subr_disk.c | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/sys/kern/subr_disk.c b/sys/kern/subr_disk.c index 5e18163..01cfcf2 100644 --- a/sys/kern/subr_disk.c +++ b/sys/kern/subr_disk.c @@ -18,6 +18,7 @@ #include <sys/conf.h> #include <sys/disk.h> #include <sys/malloc.h> +#include <sys/sysctl.h> #include <machine/md_var.h> MALLOC_DEFINE(M_DISK, "disk", "disk data"); @@ -114,6 +115,34 @@ disk_enumerate(struct disk *disk) return (LIST_NEXT(disk, d_list)); } +static int +sysctl_disks SYSCTL_HANDLER_ARGS +{ + struct disk *disk; + int error, first; + + disk = NULL; + first = 1; + + while ((disk = disk_enumerate(disk))) { + if (!first) { + error = SYSCTL_OUT(req, " ", 1); + if (error) + return error; + } else { + first = 0; + } + error = SYSCTL_OUT(req, disk->d_dev->si_name, strlen(disk->d_dev->si_name)); + if (error) + return error; + } + error = SYSCTL_OUT(req, "", 1); + return error; +} + +SYSCTL_PROC(_kern, OID_AUTO, disks, CTLTYPE_STRING | CTLFLAG_RD, 0, NULL, + sysctl_disks, "A", "names of available disks"); + /* * The cdevsw functions */ |