diff -ru murasaki-0.6.7.orig/pci/init.c murasaki-0.6.7/pci/init.c --- murasaki-0.6.7.orig/pci/init.c 2003-04-06 05:31:59.000000000 +0900 +++ murasaki-0.6.7/pci/init.c 2003-06-10 13:24:48.000000000 +0900 @@ -113,24 +113,25 @@ scan_bus(char *dirname,struct pci_init *pci) { char path[PATH_MAX]; - DIR *dir; - struct dirent *ent; + int n, i; + struct dirent **names, **ent; strcpy(path,dirname); strcat(path,"/"); strcat(path,pci->bus); - if ((dir = opendir(path)) == NULL) { - dprintf("opendir error %s\n",path); + if ((n = scandir(path, &names, NULL, alphasort)) < 0) { + dprintf("scandir error %s\n",path); return -1; } - while ((ent = readdir(dir)) != NULL) { - if (ent->d_name[0] == '.') + for (i = 0, ent = names; i < n; i++, ent++) { + if ((*ent)->d_name[0] == '.') continue; - pci->slot_fn = ent->d_name; + pci->slot_fn = (*ent)->d_name; if (scan_device(path,pci) != 0) break; } - closedir(dir); + if (names != NULL) + free(names); return 0; } @@ -138,28 +139,29 @@ int main(int argc,char **argv) { - DIR *dir; - struct dirent *ent; + int n, i; + struct dirent **names, **ent; char *dirname = PCI_PROC_DIR; struct pci_init pci; if (getenv("MURASAKI_DEBUG")) debug = 1; - if ((dir = opendir(dirname)) == NULL) { - dprintf("opendir error %s\n",dirname); + if ((n = scandir(dirname, &names, NULL, alphasort)) < 0) { + dprintf("scandir error %s\n",dirname); exit(1); } - while ((ent = readdir(dir)) != NULL) { - if (ent->d_name[0] == '.') + for (i = 0, ent = names; i < n; i++, ent++) { + if ((*ent)->d_name[0] == '.') continue; - dprintf("dirname %s\n",ent->d_name); - if (isdigit(ent->d_name[0]) && isdigit(ent->d_name[1])) { - pci.bus = ent->d_name; + dprintf("dirname %s\n",(*ent)->d_name); + if (isdigit((*ent)->d_name[0]) && isdigit((*ent)->d_name[1])) { + pci.bus = (*ent)->d_name; scan_bus(dirname,&pci); } } - closedir(dir); + if (names != NULL) + free(names); return 0; }