diff options
| author | Poul-Henning Kamp <phk@FreeBSD.org> | 2001-12-30 09:56:12 +0000 |
|---|---|---|
| committer | Poul-Henning Kamp <phk@FreeBSD.org> | 2001-12-30 09:56:12 +0000 |
| commit | aac2637bd1cdf19205f94c003359d0fbad4508b7 (patch) | |
| tree | 04a3a9f28a77d7c428cad52119d8b74e5867b1c6 /lib/libdisk | |
| parent | 2316c86bd03354712fc909b1012e4f1ad5e1e191 (diff) | |
Notes
Diffstat (limited to 'lib/libdisk')
| -rw-r--r-- | lib/libdisk/Makefile | 2 | ||||
| -rw-r--r-- | lib/libdisk/disk.c | 35 |
2 files changed, 26 insertions, 11 deletions
diff --git a/lib/libdisk/Makefile b/lib/libdisk/Makefile index 695c54c2903c..df22519aa185 100644 --- a/lib/libdisk/Makefile +++ b/lib/libdisk/Makefile @@ -6,7 +6,7 @@ SRCS= blocks.c disklabel.c chunk.c disk.c change.c \ INCS= libdisk.h # Remove KERN_DISKS_BROKEN when kern.disks sysctl returns disks in sorted order -CFLAGS+= -Wall -DKERN_DISKS_BROKEN +CFLAGS+= -Wall .if ${MACHINE} == "pc98" CFLAGS+= -DPC98 .endif diff --git a/lib/libdisk/disk.c b/lib/libdisk/disk.c index e333b345db2e..494637584a5b 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; @@ -506,14 +514,16 @@ 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"); #endif - 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); @@ -529,12 +539,17 @@ 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; +#if !defined(PC98) && !defined(KERN_DISKS_BROKEN) + } +#endif + qsort(disks, disk_cnt, sizeof(char*), qstrcmp); + + return disks; } #ifdef PC98 |
