aboutsummaryrefslogtreecommitdiff
path: root/lib/libdisk
diff options
context:
space:
mode:
authorPoul-Henning Kamp <phk@FreeBSD.org>2002-10-23 20:15:10 +0000
committerPoul-Henning Kamp <phk@FreeBSD.org>2002-10-23 20:15:10 +0000
commit844c9bb88456101ff8b377e5f4d32eef21121112 (patch)
tree00028c670cf9d88cf5f048bff7fd20bb5e2f370a /lib/libdisk
parentb485e515522e1dc2cfb513af5b7baf058443682e (diff)
downloadsrc-844c9bb88456101ff8b377e5f4d32eef21121112.tar.gz
src-844c9bb88456101ff8b377e5f4d32eef21121112.zip
Rely on sysctl kern.disks to be there, and get rid of one of the far too
many lists of disk device driver names in the system. At this point we should really get the names from the XML, but hey...
Notes
Notes: svn path=/head/; revision=105818
Diffstat (limited to 'lib/libdisk')
-rw-r--r--lib/libdisk/disk.c105
1 files changed, 36 insertions, 69 deletions
diff --git a/lib/libdisk/disk.c b/lib/libdisk/disk.c
index ebd3def8e641..24ba45b7692f 100644
--- a/lib/libdisk/disk.c
+++ b/lib/libdisk/disk.c
@@ -888,86 +888,53 @@ Collapse_Disk(struct disk *d)
}
#endif
-#ifdef PC98
-static char * device_list[] = {"wd", "aacd", "ad", "da", "afd", "fla", "idad", "mlxd", "amrd", "twed", "ar", "fd", 0};
-#else
-static char * device_list[] = {"aacd", "ad", "da", "afd", "fla", "idad", "mlxd", "amrd", "twed", "ar", "fd", 0};
-#endif
-
-int qstrcmp(const void* a, const void* b) {
+static int
+qstrcmp(const void* a, const void* b)
+{
char *str1 = *(char**)a;
char *str2 = *(char**)b;
return strcmp(str1, str2);
-
}
char **
Disk_Names()
{
- int i,j,disk_cnt;
- char disk[25];
- char diskname[25];
- struct stat st;
- struct diskslices ds;
- int fd;
- static char **disks;
- int error;
- size_t listsize;
- char *disklist;
+ int disk_cnt;
+ static char **disks;
+ int error;
+ size_t listsize;
+ char *disklist;
- disks = malloc(sizeof *disks * (1 + MAX_NO_DISKS));
- if (disks == NULL)
- return NULL;
- memset(disks,0,sizeof *disks * (1 + MAX_NO_DISKS));
- error = sysctlbyname("kern.disks", NULL, &listsize, NULL, 0);
- if (!error) {
- disklist = (char *)malloc(listsize+1);
- if (disklist == NULL) {
- free(disks);
- return NULL;
- }
- memset(disklist, 0, listsize+1);
- error = sysctlbyname("kern.disks", disklist, &listsize, NULL, 0);
- if (error) {
- free(disklist);
- free(disks);
- return NULL;
- }
- for (disk_cnt = 0; disk_cnt < MAX_NO_DISKS; disk_cnt++) {
- disks[disk_cnt] = strsep(&disklist, " ");
- if (disks[disk_cnt] == NULL)
- break;
- }
- } else {
- warn("kern.disks sysctl not available");
- disk_cnt = 0;
- for (j = 0; device_list[j]; j++) {
- if(disk_cnt >= MAX_NO_DISKS)
- break;
- for (i = 0; i < MAX_NO_DISKS; i++) {
- snprintf(diskname, sizeof(diskname), "%s%d",
- device_list[j], i);
- snprintf(disk, sizeof(disk), _PATH_DEV"%s", diskname);
- if (stat(disk, &st) || !(st.st_mode & S_IFCHR))
- continue;
- if ((fd = open(disk, O_RDWR)) == -1)
- continue;
- if (ioctl(fd, DIOCGSLICEINFO, &ds) == -1) {
- DPRINT(("DIOCGSLICEINFO %s", disk));
- close(fd);
- continue;
- }
- close(fd);
- disks[disk_cnt++] = strdup(diskname);
- if(disk_cnt >= MAX_NO_DISKS)
- break;
- }
+ error = sysctlbyname("kern.disks", NULL, &listsize, NULL, 0);
+ if (error) {
+ warn("kern.disks sysctl not available");
+ return NULL;
+ }
+
+ disks = malloc(sizeof *disks * (1 + MAX_NO_DISKS));
+ if (disks == NULL)
+ return NULL;
+ disklist = (char *)malloc(listsize + 1);
+ if (disklist == NULL) {
+ free(disks);
+ return NULL;
+ }
+ memset(disks,0,sizeof *disks * (1 + MAX_NO_DISKS));
+ memset(disklist, 0, listsize + 1);
+ error = sysctlbyname("kern.disks", disklist, &listsize, NULL, 0);
+ if (error) {
+ free(disklist);
+ free(disks);
+ return NULL;
}
- }
- qsort(disks, disk_cnt, sizeof(char*), qstrcmp);
-
- return disks;
+ for (disk_cnt = 0; disk_cnt < MAX_NO_DISKS; disk_cnt++) {
+ disks[disk_cnt] = strsep(&disklist, " ");
+ if (disks[disk_cnt] == NULL)
+ break;
+ }
+ qsort(disks, disk_cnt, sizeof(char*), qstrcmp);
+ return disks;
}
#ifdef PC98