mirror of
https://github.com/freebsd/freebsd-src
synced 2024-09-29 21:26:51 +00:00
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:
parent
16a3f31561
commit
0138fc17c5
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=62008
|
@ -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++) {
|
||||
|
|
Loading…
Reference in a new issue