Bug#452674: Relies on devfs compatibility
The following patch works for me. I tested with zero, one and two
disks.
Index: main.c
===================================================================
--- main.c (revision 50232)
+++ main.c (working copy)
@@ -24,44 +24,28 @@
return PED_EXCEPTION_CANCEL;
}
-/* NOTE:
- * DO NOT base new code in other parts of d-i on this function: it will not
- * work when using udev without devfs compatibility. New code should use
- * 'list-devices disk' from the shell instead.
- */
static int get_all_disks(PedDevice *discs[], int max_disks) {
- DIR *devdir;
- struct dirent *direntry;
+ FILE *fp;
+ char buf[1024];
int disk_count = 0;
- devdir = opendir("/dev/discs");
- if(devdir == NULL) {
- di_log(DI_LOG_LEVEL_ERROR, "Failed to open disc directory");
+ fp = popen("list-devices disk", "r");
+ if (fp == NULL) {
+ di_log(DI_LOG_LEVEL_ERROR, "Failed to list disks");
return(0);
}
-
- while((direntry = readdir(devdir)) != NULL) {
- char *fullname = NULL;
+ while (fgets(buf, sizeof(buf), fp) != NULL) {
PedDevice *dev;
-
- if(direntry->d_name[0] == '.')
- continue;
-
+ if (buf[strlen(buf) - 1] == '\n')
+ buf[strlen(buf) - 1] = '\0';
if (disk_count >= max_disks) {
di_log(DI_LOG_LEVEL_INFO, "More than %d discs", max_disks);
break;
}
-
- asprintf(&fullname, "%s/%s/%s", "/dev/discs",
- direntry->d_name, "disc");
-
- if ((dev = ped_device_get(fullname)) && !dev->read_only)
+ if ((dev = ped_device_get(buf)) && !dev->read_only)
discs[disk_count++] = dev;
- free(fullname);
}
-
- closedir(devdir);
-
+ fclose(fp);
return(disk_count);
}
--
Martin Michlmayr
http://www.cyrius.com/
Reply to: