[OpenBIOS] [commit] r866 - trunk/openbios-devel/packages
repository service
svn at openbios.org
Tue Sep 28 20:59:46 CEST 2010
Author: blueswirl
Date: Tue Sep 28 20:59:45 2010
New Revision: 866
URL: http://tracker.coreboot.org/trac/openbios/changeset/866
Log:
sun-parts: fix memory leakages
Free the string returned by my_args_copy() also in error cases.
Adjust string parsing to avoid strdup() calls.
Signed-off-by: Blue Swirl <blauwirbel at gmail.com>
Modified:
trunk/openbios-devel/packages/sun-parts.c
Modified: trunk/openbios-devel/packages/sun-parts.c
==============================================================================
--- trunk/openbios-devel/packages/sun-parts.c Tue Sep 28 20:59:43 2010 (r865)
+++ trunk/openbios-devel/packages/sun-parts.c Tue Sep 28 20:59:45 2010 (r866)
@@ -92,8 +92,8 @@
sunparts_open( sunparts_info_t *di )
{
char *str = my_args_copy();
- char *argstr = strdup("");
- char *parstr = strdup("");
+ char *argstr = NULL;
+ char *parstr = NULL;
int parnum = -1;
unsigned char buf[512];
struct sun_disklabel *p;
@@ -140,7 +140,7 @@
}
/* Convert the id to a partition number */
- if (strlen(parstr)) {
+ if (parstr && strlen(parstr)) {
if (parstr[0] >= 'a' && parstr[0] < ('a' + 8))
parnum = parstr[0] - 'a';
else
@@ -156,12 +156,15 @@
di->seek_xt = find_parent_method("seek");
SEEK( 0 );
- if( READ(buf, 512) != 512 )
+ if (READ(buf, 512) != 512) {
+ free(str);
RET(0);
+ }
/* Check Magic */
if (!has_sun_part_magic(buf)) {
DPRINTF("Sun partition magic not found.\n");
+ free(str);
RET(0);
}
@@ -190,6 +193,7 @@
size = (long long)__be32_to_cpu(p->partitions[parnum].num_sectors) * bs;
if (size == 0) {
DPRINTF("Partition size is 0, exiting\n");
+ free(str);
RET(0);
}
di->size_hi = size >> BITS;
@@ -213,7 +217,7 @@
/* If we have been asked to open a particular file, interpose the filesystem package with
the passed filename as an argument */
- if (strlen(argstr)) {
+ if (argstr && strlen(argstr)) {
push_str( argstr );
PUSH_ph( ph );
fword("interpose");
@@ -228,7 +232,7 @@
feval("find-package");
ph = POP_ph();
- if (ph) {
+ if (argstr && ph) {
ph = POP_ph();
push_str(argstr);
PUSH_ph(ph);
More information about the OpenBIOS
mailing list