tag 57368 patch
thanks

The following patch lets the user choose among PReP boot
partitions if there are more than one.  Could someone with a
PReP machine please test it?

Matt

Index: utilities/dbootstrap/bootconfig.c
===================================================================
RCS file: /cvs/debian-boot/boot-floppies/utilities/dbootstrap/bootconfig.c,v
retrieving revision 1.184
diff -u -p -r1.184 bootconfig.c
--- utilities/dbootstrap/bootconfig.c   2002/03/11 08:56:15     1.184
+++ utilities/dbootstrap/bootconfig.c   2002/03/13 16:43:21
@@ -2692,21 +2692,62 @@ redisplay_options:
   boot = Root->name;
 
   if (strcmp(Arch2, "PReP") == 0) {
-    if ((boot_part = fdisk_find_partition_by_type(PTYPE_PREP_BOOT)) != NULL) {
-      /* Copy a kernel to the PReP boot partition */
-      pleaseWaitBox(_("Copying the operating system kernel..."));
-      snprintf(prtbuf, sizeof(prtbuf), BC_RUN_PREPDD, "/target/vmlinuz", 
boot_part->name);
-      status=execlog(prtbuf, LOG_INFO);
-      /* FIXME MDP: Handle the error cases */
-      boxPopWindow();
-      notInstalledLILO=0;
-      return 0;
-    }
-    else {
-        /* FIXME MDP: Add in error message, must learn pointerize */
-/*      problemBox(_("No PReP boot partition found"),_("Problem")); */
+    struct fdisk_partition *p;
+
+    boot_part = fdisk_find_partition_by_type(PTYPE_PREP_BOOT);
+
+    /* If there is no boot partition, abort.  */
+    if (boot_part == NULL)
       return 1;
-    }
+
+    /* If there is more than one, let the user choose.  */
+    for (p = boot_part->next; p != NULL; p = p->next)
+      if (p->type == PTYPE_PREP_BOOT) {
+       struct d_choices *choices;
+       struct fdisk_partition **plist;
+       int i;
+
+       choices = malloc(2 * sizeof(struct d_choices));
+       plist = malloc(2 * sizeof(struct fdisk_partition *));
+
+       plist[0] = boot_part;
+       choices[0].string = boot_part->name;
+       choices[0].tag = NULL;
+       choices[0].state = 0;
+
+       for (i = 1; p != NULL; p = p->next) {
+         if (i >= 2) {
+           choices = realloc(choices, (i + 1) * sizeof (struct d_choices));
+           plist = realloc(plist, (i + 1) * sizeof (struct fdisk_partition *));
+         }
+         plist[i] = p;
+         choices[i].string = p->name;
+         choices[i].tag = NULL;
+         choices[i].state = 0;
+         i++;
+       }
+
+       i = menuBox(_("Select a PReP boot partition"),
+                   _("Select Partition"), choices, i, 1);
+
+       if (i < 0)
+         return 1;
+
+       boot_part = plist[i];
+       
+       free(choices);
+       free(plist);
+       break;
+      }
+         
+    /* Copy a kernel to the PReP boot partition */
+    pleaseWaitBox(_("Copying the operating system kernel..."));
+    snprintf(prtbuf, sizeof(prtbuf), BC_RUN_PREPDD, "/target/vmlinuz", 
+boot_part->name);
+    status=execlog(prtbuf, LOG_INFO);
+    /* FIXME MDP: Handle the error cases */
+    boxPopWindow();
+    notInstalledLILO=0;
+    return 0;
   }
   else {
     status = run_plilo();

Attachment: msg17230/pgp00000.pgp
Description: PGP signature

Reply via email to