Let Disk_Names() take advantage of the kern.disks sysctl if it's

available.  If not, it falls back to the existing hack and slash method.

A positive side effect is that non-root users may now use Disk_Names(),
for non-dangerous libh/disk.tcl testing.

Reviewed by:	phk
This commit is contained in:
Neil Blakey-Milner 2000-06-23 14:01:06 +00:00
parent 16a3f31561
commit 0138fc17c5
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=62008

View file

@ -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++) {