[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

[PATCH 1/2] Find stage2 install.img on local hd installs



If the user does not provide an hd directory that ends with ".img",
append "/images/install.img".

Use glib string functions consistently throughout the mountHardDrive()
function and glib memory functions.

Related: rhbz#522064
---
 loader/hdinstall.c |   47 +++++++++++++++++++++++++++--------------------
 1 files changed, 27 insertions(+), 20 deletions(-)

diff --git a/loader/hdinstall.c b/loader/hdinstall.c
index 4397dc2..3d5e4f5 100644
--- a/loader/hdinstall.c
+++ b/loader/hdinstall.c
@@ -132,31 +132,37 @@ char * mountHardDrive(struct installMethod * method,
     newtGrid entryGrid, grid, buttons;
 
     int done = 0;
-    char * dir = strdup("");
+    char * dir = g_strdup("");
     char * tmpDir;
     char * url = NULL;
-    char * buf, *substr;
+    char * buf;
     int numPartitions;
 
     char **partition_list;
     char *selpart;
     char *kspartition = NULL, *ksdirectory = NULL;
+    char *imgpath = "/images/install.img";
 
     /* handle kickstart/stage2= data first if available */
     if (loaderData->method == METHOD_HD && loaderData->stage2Data) {
         kspartition = ((struct hdInstallData *)loaderData->stage2Data)->partition;
-        ksdirectory = ((struct hdInstallData *)loaderData->stage2Data)->directory;
-        logMessage(INFO, "partition is %s, dir is %s", kspartition, ksdirectory);
+        if (kspartition) {
+            kspartition = g_strdup(kspartition);
+        }
 
-        /* if exist, duplicate */
-        if (kspartition)
-            kspartition = strdup(kspartition);
+        ksdirectory = ((struct hdInstallData *)loaderData->stage2Data)->directory;
         if (ksdirectory) {
-            ksdirectory = strdup(ksdirectory);
+            if (g_strrstr(ksdirectory, ".img")) {
+                ksdirectory = g_strdup(ksdirectory);
+            } else {
+                ksdirectory = g_strconcat(ksdirectory, imgpath, NULL);
+            }
         } else {
-            ksdirectory = strdup("/images/install.img");
+            ksdirectory = g_strdup(imgpath);
         }
 
+        logMessage(INFO, "partition is %s, dir is %s", kspartition, ksdirectory);
+
         if (!kspartition || !ksdirectory) {
             logMessage(ERROR, "missing partition or directory specification");
             loaderData->method = -1;
@@ -178,8 +184,8 @@ char * mountHardDrive(struct installMethod * method,
                 if (loaderData->inferredStage2)
                     loaderData->invalidRepoParam = 1;
             } else {
-                free(kspartition);
-                free(ksdirectory);
+                g_free(kspartition);
+                g_free(ksdirectory);
                 return url;
             }
         }
@@ -237,7 +243,7 @@ char * mountHardDrive(struct installMethod * method,
         /* if we had ks data around use it to prime entry, then get rid of it*/
         if (kspartition) {
             newtListboxSetCurrentByKey(listbox, kspartition);
-            free(kspartition);
+            g_free(kspartition);
             kspartition = NULL;
         }
 
@@ -249,7 +255,7 @@ char * mountHardDrive(struct installMethod * method,
         /* if we had ks data around use it to prime entry, then get rid of it*/
         if (ksdirectory) {
             newtEntrySet(dirEntry, ksdirectory, 1);
-            free(ksdirectory);
+            g_free(ksdirectory);
             ksdirectory = NULL;
         }
 
@@ -282,12 +288,12 @@ char * mountHardDrive(struct installMethod * method,
 
         selpart = newtListboxGetCurrent(listbox);
 
-        free(dir);
+        g_free(dir);
         if (tmpDir && *tmpDir) {
             /* Protect from form free. */
-            dir = strdup(tmpDir);
+            dir = g_strdup(tmpDir);
         } else  {
-            dir = strdup("");
+            dir = g_strdup("");
         }
 
         newtFormDestroy(form);
@@ -306,9 +312,10 @@ char * mountHardDrive(struct installMethod * method,
         /* If the user-provided URL points at a repo instead of a stage2
          * image, fix that up now.
          */
-        substr = strstr(dir, ".img");
-        if (!substr || (substr && *(substr+4) != '\0')) {
-            checked_asprintf(&dir, "%s/images/install.img", dir);
+        if (g_strrstr(dir, ".img") == NULL) {
+            char *tmp = g_strconcat(dir, imgpath, NULL);
+            g_free(dir);
+            dir = tmp;
         }
 
         loaderData->invalidRepoParam = 1;
@@ -324,7 +331,7 @@ char * mountHardDrive(struct installMethod * method,
         done = 1; 
     }
 
-    free(dir);
+    g_free(dir);
 
     return url;
 }
-- 
1.6.6.1


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]