mirror of
https://gitlab.com/qemu-project/openbios.git
synced 2024-02-13 08:34:06 +08:00
Fix pop_fstr_copy memory leaks
- console one prevented Debian 3.1r1 from installing in console=prom mode - fixing this also needed the real malloc/free git-svn-id: svn://coreboot.org/openbios/openbios-devel@155 f158a5a8-5612-0410-a976-696ce0be7e32
This commit is contained in:
@@ -45,18 +45,18 @@ void boot(void)
|
||||
} else {
|
||||
switch (boot_device) {
|
||||
case 'a':
|
||||
path = "/obio/SUNW,fdtwo";
|
||||
path = strdup("/obio/SUNW,fdtwo");
|
||||
oldpath = "fd()";
|
||||
unit = 0;
|
||||
break;
|
||||
case 'c':
|
||||
path = "disk";
|
||||
path = strdup("disk");
|
||||
oldpath = "sd(0,0,0):d";
|
||||
unit = 0;
|
||||
break;
|
||||
default:
|
||||
case 'd':
|
||||
path = "cdrom";
|
||||
path = strdup("cdrom");
|
||||
// FIXME: hardcoding this looks almost definitely wrong.
|
||||
// With sd(0,2,0):b we get to see the solaris kernel though
|
||||
//oldpath = "sd(0,2,0):d";
|
||||
@@ -64,7 +64,7 @@ void boot(void)
|
||||
unit = 2;
|
||||
break;
|
||||
case 'n':
|
||||
path = "net";
|
||||
path = strdup("net");
|
||||
oldpath = "le()";
|
||||
unit = 0;
|
||||
break;
|
||||
|
||||
@@ -279,8 +279,14 @@ ob_sd_open(__attribute__((unused))sd_private_t **sd)
|
||||
*sd = &global_esp->sd[id];
|
||||
|
||||
#ifdef CONFIG_DEBUG_ESP
|
||||
fword("my-args");
|
||||
DPRINTF("opening drive %d args %s\n", id, pop_fstr_copy());
|
||||
{
|
||||
char *args;
|
||||
|
||||
fword("my-args");
|
||||
args = pop_fstr_copy();
|
||||
DPRINTF("opening drive %d args %s\n", id, args);
|
||||
free(args);
|
||||
}
|
||||
#endif
|
||||
|
||||
selfword("open-deblocker");
|
||||
|
||||
@@ -223,10 +223,13 @@ zs_open(unsigned long *address)
|
||||
*address = *prop;
|
||||
fword("my-args");
|
||||
args = pop_fstr_copy();
|
||||
if (args && args[0] == 'a')
|
||||
*address += 4;
|
||||
if (args) {
|
||||
if (args[0] == 'a')
|
||||
*address += 4;
|
||||
//printk("zs_open: address %lx, args %s\n", *address, args);
|
||||
free(args);
|
||||
}
|
||||
|
||||
//printk("zs_open: address %lx, args %s\n", *address, args);
|
||||
RET ( -1 );
|
||||
}
|
||||
|
||||
|
||||
@@ -253,6 +253,8 @@ pop_fstr_copy( void )
|
||||
if( !len )
|
||||
return NULL;
|
||||
str = malloc( len + 1 );
|
||||
if( !str )
|
||||
return NULL;
|
||||
memcpy( str, p, len );
|
||||
str[len] = 0;
|
||||
return str;
|
||||
|
||||
@@ -253,6 +253,7 @@ video_write(void)
|
||||
addr = pop_fstr_copy();
|
||||
|
||||
console_draw_str(addr);
|
||||
free(addr);
|
||||
PUSH(len);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user