]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
* grub-core/kern/emu/hostdisk.c (grub_util_biosdisk_get_grub_dev):
authorVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Sat, 12 Nov 2011 22:46:47 +0000 (23:46 +0100)
committerVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Sat, 12 Nov 2011 22:46:47 +0000 (23:46 +0100)
Fix a memory leak.
(grub_util_biosdisk_get_grub_dev): Add a useful debug info.

ChangeLog
grub-core/kern/emu/hostdisk.c

index 1ce25663dbb65f003dd60c4aed847891875fc90d..230eb0cec2c1c8c1ede9337d7c6d19c862d2202c 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2011-11-12  Vladimir Serbinenko  <phcoder@gmail.com>
+
+       * grub-core/kern/emu/hostdisk.c (grub_util_biosdisk_get_grub_dev):
+       Fix a memory leak.
+       (grub_util_biosdisk_get_grub_dev): Add a useful debug info.
+
 2011-11-12  Vladimir Serbinenko  <phcoder@gmail.com>
 
        * grub-core/kern/emu/hostdisk.c (find_system_device): Fix a memory leak.
index ede765d8340e2d2769aa13c89cdb2a1b13d5ad00..da2cc6aa28fd4870ba42be77a1afcab8859ed4b4 100644 (file)
@@ -1781,6 +1781,7 @@ grub_util_biosdisk_get_grub_dev (const char *os_dev)
 {
   struct stat st;
   int drive;
+  char *sys_disk;
 
   grub_util_info ("Looking for %s", os_dev);
 
@@ -1800,9 +1801,13 @@ grub_util_biosdisk_get_grub_dev (const char *os_dev)
       return 0;
     }
 
-  if (grub_strcmp (os_dev,
-                  convert_system_partition_to_system_disk (os_dev, &st)) == 0)
-    return make_device_name (drive, -1, -1);
+  sys_disk = convert_system_partition_to_system_disk (os_dev, &st);
+  if (grub_strcmp (os_dev, sys_disk) == 0)
+    {
+      free (sys_disk);
+      return make_device_name (drive, -1, -1);
+    }
+  free (sys_disk);
 
 #if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__APPLE__) || defined(__NetBSD__) || defined (__sun__)
   if (! S_ISCHR (st.st_mode))
@@ -1914,6 +1919,7 @@ grub_util_biosdisk_get_grub_dev (const char *os_dev)
     if (partname == NULL)
       {
        grub_disk_close (disk);
+       grub_util_info ("cannot find the partition of `%s'", os_dev);
        grub_error (GRUB_ERR_BAD_DEVICE,
                    "cannot find the partition of `%s'", os_dev);
        return 0;