diff options
author | Matt Wilson <msw@redhat.com> | 2000-02-03 19:07:26 +0000 |
---|---|---|
committer | Matt Wilson <msw@redhat.com> | 2000-02-03 19:07:26 +0000 |
commit | 65517e58c6370e56805b378c1096361800c6be85 (patch) | |
tree | 11d9a784b69c43a6929eb3a89e28e7e58320eb15 /loader/devices.c | |
parent | b76babe3b95431179c8eea4279cbe1675c6c87db (diff) | |
download | anaconda-65517e58c6370e56805b378c1096361800c6be85.tar.gz anaconda-65517e58c6370e56805b378c1096361800c6be85.tar.xz anaconda-65517e58c6370e56805b378c1096361800c6be85.zip |
sort device list, add mcd
Diffstat (limited to 'loader/devices.c')
-rw-r--r-- | loader/devices.c | 44 |
1 files changed, 35 insertions, 9 deletions
diff --git a/loader/devices.c b/loader/devices.c index 15d24da25..b82264a53 100644 --- a/loader/devices.c +++ b/loader/devices.c @@ -190,6 +190,19 @@ int devLoadDriverDisk(moduleInfoSet modInfo, moduleList modLoaded, return 0; } +struct sortModuleList { + int index; + moduleInfoSet modInfo; +}; + +static int sortDrivers(const void * a, const void * b) { + const struct sortModuleList * one = a; + const struct sortModuleList * two = b; + + return strcmp(one->modInfo->moduleList[one->index].description, + one->modInfo->moduleList[two->index].description); +} + static int pickModule(moduleInfoSet modInfo, enum driverMajor type, moduleList modLoaded, moduleDeps modDeps, struct moduleInfo * suggestion, @@ -200,6 +213,20 @@ static int pickModule(moduleInfoSet modInfo, enum driverMajor type, newtGrid buttons, grid, subgrid; char specifyParameters = *specifyParams ? '*' : ' '; struct newtExitStruct es; + struct sortModuleList * sortedOrder; + int numSorted = 0; + + sortedOrder = alloca(sizeof(*sortedOrder) * modInfo->numModules); + + for (i = 0; i < modInfo->numModules; i++) { + if (modInfo->moduleList[i].major == type && + !mlModuleInList(modInfo->moduleList[i].moduleName, modLoaded)) { + sortedOrder[numSorted].index = i; + sortedOrder[numSorted++].modInfo = modInfo; + } + } + + qsort(sortedOrder, numSorted, sizeof(*sortedOrder), sortDrivers); do { if (FL_MODDISK(flags)) { @@ -224,15 +251,14 @@ static int pickModule(moduleInfoSet modInfo, enum driverMajor type, if (FL_MODDISK(flags)) newtFormAddHotKey(form, NEWT_KEY_F2); - for (i = 0; i < modInfo->numModules; i++) { - if (modInfo->moduleList[i].major == type && - !mlModuleInList(modInfo->moduleList[i].moduleName, modLoaded)) { - newtListboxAppendEntry(listbox, - modInfo->moduleList[i].description, - (void *) i); - if (modp && (modInfo->moduleList + i) == *modp) - newtListboxSetCurrentByKey(listbox, (void *) i); - } + for (i = 0; i < numSorted; i++) { + int num = sortedOrder[i].index; + + newtListboxAppendEntry(listbox, + modInfo->moduleList[num].description, + (void *) num); + if (modp && (modInfo->moduleList + num) == *modp) + newtListboxSetCurrentByKey(listbox, (void *) num); } subgrid = newtGridVStacked(NEWT_GRID_COMPONENT, listbox, |