[syslinux] [PATCH 1/2] com32/lib/: Avoid unneeded allocation.

Raphael S.Carvalho raphael.scarv at gmail.com
Thu Sep 5 21:00:55 PDT 2013


eparam will only be used if EBIOS is available on the underlying disk.
If not so, then there is no reason to allocate eparam.
---
 com32/lib/syslinux/disk.c |   13 +++++++------
 1 files changed, 7 insertions(+), 6 deletions(-)

diff --git a/com32/lib/syslinux/disk.c b/com32/lib/syslinux/disk.c
index 093751a..554bed3 100644
--- a/com32/lib/syslinux/disk.c
+++ b/com32/lib/syslinux/disk.c
@@ -73,7 +73,7 @@ int disk_int13_retry(const com32sys_t * inreg, com32sys_t * outreg)
 int disk_get_params(int disk, struct disk_info *const diskinfo)
 {
     static com32sys_t inreg, outreg;
-    struct disk_ebios_eparam *eparam;
+    struct disk_ebios_eparam *eparam = NULL;
     int rv = 0;
 
     memset(diskinfo, 0, sizeof *diskinfo);
@@ -94,12 +94,12 @@ int disk_get_params(int disk, struct disk_info *const diskinfo)
 	diskinfo->ebios = 1;
     }
 
-    eparam = lmalloc(sizeof *eparam);
-    if (!eparam)
-	return -1;
-
     /* Get extended disk parameters if ebios == 1 */
     if (diskinfo->ebios) {
+	eparam = lmalloc(sizeof *eparam);
+	if (!eparam)
+	    return -1;
+	
 	memset(&inreg, 0, sizeof inreg);
 	inreg.eax.b[1] = 0x48;
 	inreg.edx.b[0] = disk;
@@ -153,7 +153,8 @@ int disk_get_params(int disk, struct disk_info *const diskinfo)
 	diskinfo->lbacnt = diskinfo->cyl * diskinfo->head * diskinfo->spt;
 
 out:
-    lfree(eparam);
+    if (eparam)
+	lfree(eparam);
     return rv;
 }
 
-- 
1.7.2.5



More information about the Syslinux mailing list