Ok,

This patch appears to work for me.  A few things still need to be
fixed, but I'm posting this here now because it's my first patch for
b-f that is somewhat intrusive, so if I have the totally wrong
approach or anything, I'd like to know, before I finish shaking out
any bugs.

I still need to test if this breaks anything else...

Index: utilities/dbootstrap/choose_medium.c
===================================================================
RCS file: /cvs/debian-boot/boot-floppies/utilities/dbootstrap/choose_medium.c,v
retrieving revision 1.106
diff -u -r1.106 choose_medium.c
--- utilities/dbootstrap/choose_medium.c        2001/07/05 14:13:49     1.106
+++ utilities/dbootstrap/choose_medium.c        2001/07/12 07:10:36
@@ -23,6 +23,7 @@
 int dirc = 0;
 char **dirv;
 char *pattern;
+char *backuppattern;
 
 /* #### This and several other globals probably belong in a header also once more of 
this is librified. */
 char *cdrom_device = NULL;
@@ -212,7 +213,7 @@
 {
     char buffer[PATH_MAX+1];
     char buffer2[PATH_MAX+1];
-    int i;
+    int i, found;
     char *mountpoint, *descr = "", *def;
     static char *preventry = NULL;
 /*  glob_t globbuf; */
@@ -284,6 +285,7 @@
        break;
     case debootstrap:
        pattern = DEBIAN_ARCHIVE_PREFIX ARCHNAME "/Release";
+       backuppattern = BASETGZ;
        descr = _("the Base system");
        break;
 #if #cpu(alpha)
@@ -312,33 +314,38 @@
     else
        snprintf(prtbuf, sizeof(prtbuf), 
                "%s/" DEBIAN_ARCHIVE_PREFIX ARCHNAME "/Release", mountpoint);
-
-    if (NAME_ISREG(prtbuf, &statbuf)) {
-      DEBUGMSG("located file at %s", prtbuf);
-      /* do an additional test when installing kernel and modules,
-         since we need drivers disk */
-      if (disqtype == kernel) {
-       snprintf(prtbuf, sizeof(prtbuf),"%s/" ARCHIVE_LOCATION "/%s",
-                mountpoint, ARCHNAME, drivers_path);
-       if (NAME_ISREG(prtbuf, &statbuf)) {
-         /* success */
-         snprintf(prtbuf, sizeof(prtbuf), "%s/" ARCHIVE_LOCATION, 
-                  mountpoint, ARCHNAME);
-         def = strdup(prtbuf);
-       } else {
-         INFOMSG("found kernel, but no drivers at %s", prtbuf);
-       }
-      } else {
-       /* success, the file is where we expect it */
-       if (disqtype != debootstrap ) {
-         snprintf(prtbuf, sizeof(prtbuf), "%s/" ARCHIVE_LOCATION,
-                  mountpoint, ARCHNAME);
-         def = strdup(prtbuf);
+    
+    found = NAME_ISREG(prtbuf, &statbuf);
+    if (!found && backuppattern) {
+       snprintf(prtbuf, sizeof(prtbuf), "%s/%s",
+                mountpoint, backuppattern);
+       found = NAME_ISREG(prtbuf, &statbuf);
+    }
+    
+    if (found) {
+       DEBUGMSG("located file at %s", prtbuf);
+       /* do an additional test when installing kernel and modules,
+          since we need drivers disk */
+       if (disqtype == kernel) {
+           snprintf(prtbuf, sizeof(prtbuf),"%s/" ARCHIVE_LOCATION "/%s",
+                    mountpoint, ARCHNAME, drivers_path);
+           if (NAME_ISREG(prtbuf, &statbuf)) {
+               /* success */
+               snprintf(prtbuf, sizeof(prtbuf), "%s/" ARCHIVE_LOCATION, 
+                        mountpoint, ARCHNAME);
+               def = strdup(prtbuf);
+           } else {
+               INFOMSG("found kernel, but no drivers at %s", prtbuf);
+           }
+       } else if (disqtype == debootstrap) {
+           /* If we found basedebs.tgz, tell debootstrap about it */
+           def = strdup(strstr(prtbuf, BASETGZ) ? prtbuf : mountpoint);
+           DEBUGMSG("disqtype = debootstrap, def: %s", def ? def : "(null)");
        } else {
-         /* special handling for debootstrap, it wants the mountpoint */
-         def = strdup(mountpoint);
+           snprintf(prtbuf, sizeof(prtbuf), "%s/" ARCHIVE_LOCATION,
+                    mountpoint, ARCHNAME);
+           def = strdup(prtbuf);
        }
-      }
     } else if (disqtype == kernel) {
       /* try a flat dir structure */
       INFOMSG(_("no file '%s' found, kernel not in default location"), prtbuf);
@@ -363,21 +370,34 @@
       INFOMSG(_("no file '%s' found, Debian archive not in default location"), 
              prtbuf);
     }
+
+    DEBUGMSG("def: %s", def ? def : "(null)");
+    
     if (def && ! bootargs.isverbose) {
        /* there's a default, lets go with it */
        status = 0;
     } else {
        if (def) {
-           snprintf(prtbuf, sizeof(prtbuf),
-                    _("Please select the directory containing a file %s that you will 
use to install %s.\nUnless you really know what you need choose the default."),
-                    pattern, descr);
+           if (backuppattern)
+               snprintf(prtbuf, sizeof(prtbuf),
+                        _("Please select the directory containing a file %s or %s 
+that you will use to install %s.\nUnless you really know what you need choose the 
+default."),
+                        pattern, backuppattern, descr);
+           else
+               snprintf(prtbuf, sizeof(prtbuf),
+                        _("Please select the directory containing a file %s that you 
+will use to install %s.\nUnless you really know what you need choose the default."),
+                        pattern, descr);
            choices--;
            ilist--;
            items++;
        } else {
-           snprintf(prtbuf, sizeof(prtbuf),
-                    _("Please select the directory containing a file %s that you will 
use to install %s."),
-                    pattern, descr);
+           if (backuppattern)
+               snprintf(prtbuf, sizeof(prtbuf),
+                        _("Please select the directory containing a file %s or %s 
+that you will use to install %s."),
+                        pattern, backuppattern, descr);
+           else
+               snprintf(prtbuf, sizeof(prtbuf),
+                        _("Please select the directory containing a file %s that you 
+will use to install %s."),
+                        pattern, descr);
        }
        status = menuBox(prtbuf, _("Select Debian Archive path"), 
                         choices, items, 1);
@@ -390,8 +410,8 @@
 
        switch (data) {
        case ARC_default:
-           Archive_Dir = strdup(def);
-           free(def);
+           Archive_Dir = def;
+           DEBUGMSG("default chosen, Archive_Dir: %s", Archive_Dir);
            break;
        case ARC_list:
            /*
@@ -430,6 +450,13 @@
                recursiveAction(mountpoint, TRUE, FALSE, FALSE, match_find, NULL);
            }
 #endif
+           if (dirc < 1 && backuppattern) {
+               char *opattern = pattern;
+               pattern = backuppattern;
+               DEBUGMSG(_("looking for %s under %s"), pattern, mountpoint);
+               recursiveAction(mountpoint, TRUE, FALSE, FALSE, match_find, NULL);
+               pattern = opattern;
+           }
            
            boxPopWindow();
 
@@ -497,6 +524,7 @@
                Archive_Dir = strdup(buffer);
                snprintf(prtbuf, sizeof(prtbuf), "%s/%s", Archive_Dir,
                         pattern);
+               /* FIXME: add support for backuppattern here */
                if (!NAME_ISREG(prtbuf, &statbuf)) {
                    INFOMSG("manual dir specified for %s, but %s not found", descr, 
prtbuf);
                    snprintf(prtbuf, sizeof(prtbuf),


Index: utilities/dbootstrap/extract_base.c
===================================================================
RCS file: /cvs/debian-boot/boot-floppies/utilities/dbootstrap/extract_base.c,v
retrieving revision 1.53
diff -u -r1.53 extract_base.c
--- utilities/dbootstrap/extract_base.c 2001/07/08 14:24:33     1.53
+++ utilities/dbootstrap/extract_base.c 2001/07/12 07:11:10
@@ -241,6 +241,7 @@
   struct stat statbuf;
   char *suite;
   char *basesuite;
+  char *tem;
   char *source;
   char *msg=_("Please choose the release you would like to install.  Unless you have 
specific needs you should choose \"stable\".");
   char *title=_("Select a Distribution");
@@ -328,7 +329,7 @@
          return -1;
   }
 
-
+  DEBUGMSG("Extracting base, Archive_Dir: %s", Archive_Dir);
   if (!strcmp (Archive_Dir, "netfetch"))
     {
        nf_initialize();
@@ -384,16 +385,22 @@
     source = strdup("null:");
   }
   /* Are we trying to install from basedebs.tgz? */
-  else if (strstr(Archive_Dir, BASETGZ)) {
+  else if (
+          ({
+              snprintf(prtbuf, sizeof(prtbuf), "%s/%s",
+                       Archive_Dir, BASETGZ);
+              NAME_ISREG(prtbuf, &statbuf);
+          })) {
+      char *filename = strdup(prtbuf);
       status = extract_from_file (filename, _("Basedebs"));
       if (status) {
-         ERRMSG("extracting %s failed with %d", Archive_Dir, status);
+         ERRMSG("extracting %s failed with %d", filename, status);
+         free(filename);
          return 1;
       }
+      free(filename);
       source = strdup("null:");
-  }
-  else
-    {
+  } else {
       /* archive is on the filesystem */
       snprintf(prtbuf, sizeof prtbuf, "file:%s", Archive_Dir); 
       source = strdup(prtbuf);


-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

Reply via email to