summaryrefslogtreecommitdiffstats
path: root/sys/kern/subr_disk.c
diff options
context:
space:
mode:
authornbm <nbm@FreeBSD.org>2000-06-22 11:44:43 +0000
committernbm <nbm@FreeBSD.org>2000-06-22 11:44:43 +0000
commit23d56058cf4c09226e268a043ef817826f35a5bf (patch)
tree45b592030b05993c16f338a4bf762271d3cff227 /sys/kern/subr_disk.c
parent74ce1c2902ef51bc68468c407296c41fbfc6c086 (diff)
downloadFreeBSD-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.c29
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
*/
OpenPOWER on IntegriCloud