summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorphk <phk@FreeBSD.org>2001-12-23 21:43:48 +0000
committerphk <phk@FreeBSD.org>2001-12-23 21:43:48 +0000
commitc77a6625c0cf178db7a8fa903094a80503bf70d9 (patch)
treebef015e11042455bca88dce9672d0bd50dcc2fdc /lib
parent06a160f63598dc05c6f4f4b09fdde6c74ba7b18c (diff)
downloadFreeBSD-src-c77a6625c0cf178db7a8fa903094a80503bf70d9.zip
FreeBSD-src-c77a6625c0cf178db7a8fa903094a80503bf70d9.tar.gz
Sort the disknames when we get them from the kernel.
Submitted by: <anarcat@anarcat.dyndns.org>
Diffstat (limited to 'lib')
-rw-r--r--lib/libdisk/disk.c33
1 files changed, 23 insertions, 10 deletions
diff --git a/lib/libdisk/disk.c b/lib/libdisk/disk.c
index ee9a90c..277e5a9 100644
--- a/lib/libdisk/disk.c
+++ b/lib/libdisk/disk.c
@@ -483,10 +483,18 @@ static char * device_list[] = {"wd", "aacd", "ad", "da", "afd", "fla", "idad", "
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) {
+
+ char *str1 = *(char**)a;
+ char *str2 = *(char**)b;
+ return strcmp(str1, str2);
+
+}
+
char **
Disk_Names()
{
- int i,j,k;
+ int i,j,disk_cnt;
char disk[25];
char diskname[25];
struct stat st;
@@ -505,13 +513,15 @@ Disk_Names()
error = sysctlbyname("kern.disks", disklist, &listsize, NULL, 0);
if (error)
return NULL;
- k = 0;
- for (dp = disks; ((*dp = strsep(&disklist, " ")) != NULL) && k < MAX_NO_DISKS; k++, dp++);
- return disks;
- }
+ disk_cnt = 0;
+ for (dp = disks; ((*dp = strsep(&disklist, " ")) != NULL) &&
+ disk_cnt < MAX_NO_DISKS; disk_cnt++, dp++);
+ } else {
warn("kern.disks sysctl not available");
- k = 0;
+ 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++) {
sprintf(diskname, "%s%d", device_list[j], i);
sprintf(disk, _PATH_DEV"%s", diskname);
@@ -527,12 +537,15 @@ Disk_Names()
continue;
}
close(fd);
- disks[k++] = strdup(diskname);
- if(k == MAX_NO_DISKS)
- return disks;
+ disks[disk_cnt++] = strdup(diskname);
+ if(disk_cnt >= MAX_NO_DISKS)
+ break;
}
}
- return disks;
+ }
+ qsort(disks, disk_cnt, sizeof(char*), qstrcmp);
+
+ return disks;
}
#ifdef PC98
OpenPOWER on IntegriCloud