merge mainline into newreloc
This commit is contained in:
commit
c5c8cf354c
10 changed files with 104 additions and 41 deletions
45
ChangeLog
45
ChangeLog
|
@ -1,3 +1,48 @@
|
||||||
|
2010-08-28 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/normal/term.c (print_more): Fix a memory leak.
|
||||||
|
(grub_puts_terminal): Revert to dumb puts if memory allocation fails.
|
||||||
|
(grub_xputs_normal): Likewise.
|
||||||
|
|
||||||
|
2010-08-28 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/script/lexer.c (grub_script_lexer_init): Don't look before
|
||||||
|
the begining of the string
|
||||||
|
|
||||||
|
2010-08-28 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/script/script.c (grub_script_parse): Free parsed on
|
||||||
|
failure.
|
||||||
|
|
||||||
|
2010-08-28 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/normal/completion.c (grub_normal_do_completion): Free argv
|
||||||
|
on failure.
|
||||||
|
|
||||||
|
2010-08-28 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/normal/cmdline.c (grub_cmdline_get): Free cl_terms on
|
||||||
|
return.
|
||||||
|
|
||||||
|
2010-08-28 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/term/gfxterm.c (grub_gfxterm_term_fini): Free the text buffer.
|
||||||
|
(scroll_up): Fix a memory leak.
|
||||||
|
|
||||||
|
2010-08-28 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/fs/nilfs2.c (grub_nilfs2_load_sb): Handle grub_disk_read
|
||||||
|
errors.
|
||||||
|
|
||||||
|
2010-08-27 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
Handle USB pendrives exposed as floppies.
|
||||||
|
|
||||||
|
* grub-core/boot/i386/pc/boot.S: Check LBA even on what appears to be
|
||||||
|
floppy.
|
||||||
|
* grub-core/disk/i386/pc/biosdisk.c (grub_biosdisk_open): Likewise.
|
||||||
|
Check for partitions on all devices.
|
||||||
|
|
||||||
2010-08-25 Vladimir Serbinenko <phcoder@gmail.com>
|
2010-08-25 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
* grub-core/term/ieee1275/ofconsole.c (put): Correct prototype.
|
* grub-core/term/ieee1275/ofconsole.c (put): Correct prototype.
|
||||||
|
|
|
@ -153,10 +153,6 @@ real_start:
|
||||||
/* set %si to the disk address packet */
|
/* set %si to the disk address packet */
|
||||||
movw $disk_address_packet, %si
|
movw $disk_address_packet, %si
|
||||||
|
|
||||||
/* do not probe LBA if the drive is a floppy */
|
|
||||||
testb $GRUB_BOOT_MACHINE_BIOS_HD_FLAG, %dl
|
|
||||||
jz LOCAL(chs_mode)
|
|
||||||
|
|
||||||
/* check if LBA is supported */
|
/* check if LBA is supported */
|
||||||
movb $0x41, %ah
|
movb $0x41, %ah
|
||||||
movw $0x55aa, %bx
|
movw $0x55aa, %bx
|
||||||
|
|
|
@ -107,7 +107,7 @@ grub_biosdisk_open (const char *name, grub_disk_t disk)
|
||||||
if (drive < 0)
|
if (drive < 0)
|
||||||
return grub_errno;
|
return grub_errno;
|
||||||
|
|
||||||
disk->has_partitions = ((drive & 0x80) && (drive != cd_drive));
|
disk->has_partitions = 1;
|
||||||
disk->id = drive;
|
disk->id = drive;
|
||||||
|
|
||||||
data = (struct grub_biosdisk_data *) grub_zalloc (sizeof (*data));
|
data = (struct grub_biosdisk_data *) grub_zalloc (sizeof (*data));
|
||||||
|
@ -123,7 +123,7 @@ grub_biosdisk_open (const char *name, grub_disk_t disk)
|
||||||
/* TODO: get the correct size. */
|
/* TODO: get the correct size. */
|
||||||
total_sectors = GRUB_DISK_SIZE_UNKNOWN;
|
total_sectors = GRUB_DISK_SIZE_UNKNOWN;
|
||||||
}
|
}
|
||||||
else if (drive & 0x80)
|
else
|
||||||
{
|
{
|
||||||
/* HDD */
|
/* HDD */
|
||||||
int version;
|
int version;
|
||||||
|
|
|
@ -718,10 +718,13 @@ grub_nilfs2_load_sb (struct grub_nilfs2_data *data)
|
||||||
grub_uint64_t partition_size;
|
grub_uint64_t partition_size;
|
||||||
int valid[2];
|
int valid[2];
|
||||||
int swp = 0;
|
int swp = 0;
|
||||||
|
grub_err_t err;
|
||||||
|
|
||||||
/* Read first super block. */
|
/* Read first super block. */
|
||||||
grub_disk_read (disk, NILFS_1ST_SUPER_BLOCK, 0,
|
err = grub_disk_read (disk, NILFS_1ST_SUPER_BLOCK, 0,
|
||||||
sizeof (struct grub_nilfs2_super_block), &data->sblock);
|
sizeof (struct grub_nilfs2_super_block), &data->sblock);
|
||||||
|
if (err)
|
||||||
|
return err;
|
||||||
/* Make sure if 1st super block is valid. */
|
/* Make sure if 1st super block is valid. */
|
||||||
valid[0] = grub_nilfs2_valid_sb (&data->sblock);
|
valid[0] = grub_nilfs2_valid_sb (&data->sblock);
|
||||||
|
|
||||||
|
@ -729,17 +732,21 @@ grub_nilfs2_load_sb (struct grub_nilfs2_data *data)
|
||||||
if (partition_size != GRUB_DISK_SIZE_UNKNOWN)
|
if (partition_size != GRUB_DISK_SIZE_UNKNOWN)
|
||||||
{
|
{
|
||||||
/* Read second super block. */
|
/* Read second super block. */
|
||||||
grub_disk_read (disk, NILFS_2ND_SUPER_BLOCK (partition_size), 0,
|
err = grub_disk_read (disk, NILFS_2ND_SUPER_BLOCK (partition_size), 0,
|
||||||
sizeof (struct grub_nilfs2_super_block), &sb2);
|
sizeof (struct grub_nilfs2_super_block), &sb2);
|
||||||
/* Make sure if 2nd super block is valid. */
|
if (err)
|
||||||
valid[1] = grub_nilfs2_valid_sb (&sb2);
|
{
|
||||||
|
valid[1] = 0;
|
||||||
|
grub_errno = GRUB_ERR_NONE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
/* Make sure if 2nd super block is valid. */
|
||||||
|
valid[1] = grub_nilfs2_valid_sb (&sb2);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
/* 2nd super block may not exist, so it's invalid. */
|
/* 2nd super block may not exist, so it's invalid. */
|
||||||
valid[1] = 0;
|
valid[1] = 0;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (!valid[0] && !valid[1])
|
if (!valid[0] && !valid[1])
|
||||||
return grub_error (GRUB_ERR_BAD_FS, "not a nilfs2 filesystem");
|
return grub_error (GRUB_ERR_BAD_FS, "not a nilfs2 filesystem");
|
||||||
|
|
||||||
|
@ -752,8 +759,7 @@ grub_nilfs2_load_sb (struct grub_nilfs2_data *data)
|
||||||
grub_memcpy (&data->sblock, &sb2,
|
grub_memcpy (&data->sblock, &sb2,
|
||||||
sizeof (struct grub_nilfs2_super_block));
|
sizeof (struct grub_nilfs2_super_block));
|
||||||
|
|
||||||
grub_errno = GRUB_ERR_NONE;
|
return GRUB_ERR_NONE;
|
||||||
return grub_errno;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct grub_nilfs2_data *
|
static struct grub_nilfs2_data *
|
||||||
|
|
|
@ -585,6 +585,7 @@ grub_cmdline_get (const char *prompt)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case '\e':
|
case '\e':
|
||||||
|
grub_free (cl_terms);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
case '\b':
|
case '\b':
|
||||||
|
@ -635,5 +636,6 @@ grub_cmdline_get (const char *prompt)
|
||||||
|
|
||||||
ret = grub_ucs4_to_utf8_alloc (buf + lpos, llen - lpos + 1);
|
ret = grub_ucs4_to_utf8_alloc (buf + lpos, llen - lpos + 1);
|
||||||
grub_free (buf);
|
grub_free (buf);
|
||||||
|
grub_free (cl_terms);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
|
@ -499,7 +499,10 @@ grub_normal_do_completion (char *buf, int *restore,
|
||||||
|
|
||||||
fail:
|
fail:
|
||||||
if (argc != 0)
|
if (argc != 0)
|
||||||
grub_free (argv[0]);
|
{
|
||||||
|
grub_free (argv);
|
||||||
|
grub_free (argv[0]);
|
||||||
|
}
|
||||||
grub_free (match);
|
grub_free (match);
|
||||||
grub_errno = GRUB_ERR_NONE;
|
grub_errno = GRUB_ERR_NONE;
|
||||||
|
|
||||||
|
|
|
@ -44,6 +44,9 @@ static int grub_more;
|
||||||
|
|
||||||
static int grub_normal_char_counter = 0;
|
static int grub_normal_char_counter = 0;
|
||||||
|
|
||||||
|
static void
|
||||||
|
putcode_real (grub_uint32_t code, struct grub_term_output *term);
|
||||||
|
|
||||||
int
|
int
|
||||||
grub_normal_get_char_counter (void)
|
grub_normal_get_char_counter (void)
|
||||||
{
|
{
|
||||||
|
@ -94,6 +97,7 @@ print_more (void)
|
||||||
FOR_ACTIVE_TERM_OUTPUTS(term)
|
FOR_ACTIVE_TERM_OUTPUTS(term)
|
||||||
grub_print_spaces (term, 8);
|
grub_print_spaces (term, 8);
|
||||||
grub_term_restore_pos (pos);
|
grub_term_restore_pos (pos);
|
||||||
|
grub_free (pos);
|
||||||
|
|
||||||
/* Scroll one lines or an entire page, depending on the key. */
|
/* Scroll one lines or an entire page, depending on the key. */
|
||||||
|
|
||||||
|
@ -204,6 +208,20 @@ grub_puts_terminal (const char *str, struct grub_term_output *term)
|
||||||
grub_uint32_t *unicode_str, *unicode_last_position;
|
grub_uint32_t *unicode_str, *unicode_last_position;
|
||||||
grub_utf8_to_ucs4_alloc (str, &unicode_str,
|
grub_utf8_to_ucs4_alloc (str, &unicode_str,
|
||||||
&unicode_last_position);
|
&unicode_last_position);
|
||||||
|
if (!unicode_str)
|
||||||
|
{
|
||||||
|
for (; str; str++)
|
||||||
|
{
|
||||||
|
grub_uint32_t code = *str;
|
||||||
|
if (code > 0x7f)
|
||||||
|
code = '?';
|
||||||
|
|
||||||
|
putcode_real (term, code);
|
||||||
|
if (code == '\n')
|
||||||
|
putcode_real (term, '\r');
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
grub_print_ucs4 (unicode_str, unicode_last_position, 0, 0, term);
|
grub_print_ucs4 (unicode_str, unicode_last_position, 0, 0, term);
|
||||||
grub_free (unicode_str);
|
grub_free (unicode_str);
|
||||||
|
@ -760,22 +778,9 @@ grub_xputs_normal (const char *str)
|
||||||
|
|
||||||
FOR_ACTIVE_TERM_OUTPUTS(term)
|
FOR_ACTIVE_TERM_OUTPUTS(term)
|
||||||
{
|
{
|
||||||
struct grub_unicode_glyph c =
|
putcode_real (term, code);
|
||||||
{
|
|
||||||
.base = code,
|
|
||||||
.variant = 0,
|
|
||||||
.attributes = 0,
|
|
||||||
.ncomb = 0,
|
|
||||||
.combining = 0,
|
|
||||||
.estimated_width = 1
|
|
||||||
};
|
|
||||||
|
|
||||||
(term->putchar) (term, &c);
|
|
||||||
if (code == '\n')
|
if (code == '\n')
|
||||||
{
|
putcode_real (term, '\r');
|
||||||
c.base = '\r';
|
|
||||||
(term->putchar) (term, &c);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -236,7 +236,7 @@ grub_script_lexer_init (struct grub_parser_param *parser, char *script,
|
||||||
script = script ? : "\n";
|
script = script ? : "\n";
|
||||||
len = grub_strlen (script);
|
len = grub_strlen (script);
|
||||||
|
|
||||||
if (script[len - 1] == '\n')
|
if (len != 0 && script[len - 1] == '\n')
|
||||||
{
|
{
|
||||||
buffer = yy_scan_string (script, lexerstate->yyscanner);
|
buffer = yy_scan_string (script, lexerstate->yyscanner);
|
||||||
}
|
}
|
||||||
|
|
|
@ -365,7 +365,10 @@ grub_script_parse (char *script, grub_reader_getline_t getline)
|
||||||
|
|
||||||
parsestate = grub_zalloc (sizeof (*parsestate));
|
parsestate = grub_zalloc (sizeof (*parsestate));
|
||||||
if (!parsestate)
|
if (!parsestate)
|
||||||
return 0;
|
{
|
||||||
|
grub_free (parsed);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/* Initialize the lexer. */
|
/* Initialize the lexer. */
|
||||||
lexstate = grub_script_lexer_init (parsestate, script, getline);
|
lexstate = grub_script_lexer_init (parsestate, script, getline);
|
||||||
|
@ -388,6 +391,7 @@ grub_script_parse (char *script, grub_reader_getline_t getline)
|
||||||
grub_script_mem_free (memfree);
|
grub_script_mem_free (memfree);
|
||||||
grub_script_lexer_fini (lexstate);
|
grub_script_lexer_fini (lexstate);
|
||||||
grub_free (parsestate);
|
grub_free (parsestate);
|
||||||
|
grub_free (parsed);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -405,9 +405,16 @@ destroy_window (void)
|
||||||
static grub_err_t
|
static grub_err_t
|
||||||
grub_gfxterm_term_fini (struct grub_term_output *term __attribute__ ((unused)))
|
grub_gfxterm_term_fini (struct grub_term_output *term __attribute__ ((unused)))
|
||||||
{
|
{
|
||||||
|
unsigned i;
|
||||||
destroy_window ();
|
destroy_window ();
|
||||||
grub_video_restore ();
|
grub_video_restore ();
|
||||||
|
|
||||||
|
for (i = 0; i < virtual_screen.columns * virtual_screen.rows; i++)
|
||||||
|
{
|
||||||
|
grub_free (virtual_screen.text_buffer[i].code);
|
||||||
|
virtual_screen.text_buffer[i].code = 0;
|
||||||
|
}
|
||||||
|
|
||||||
/* Clear error state. */
|
/* Clear error state. */
|
||||||
grub_errno = GRUB_ERR_NONE;
|
grub_errno = GRUB_ERR_NONE;
|
||||||
return GRUB_ERR_NONE;
|
return GRUB_ERR_NONE;
|
||||||
|
@ -793,13 +800,8 @@ scroll_up (void)
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
||||||
/* Clear first line in text buffer. */
|
/* Clear first line in text buffer. */
|
||||||
for (i = 0;
|
for (i = 0; i < virtual_screen.columns; i++)
|
||||||
i < virtual_screen.columns;
|
grub_free (virtual_screen.text_buffer[i].code);
|
||||||
i++)
|
|
||||||
{
|
|
||||||
virtual_screen.text_buffer[i].code = 0;
|
|
||||||
clear_char (&(virtual_screen.text_buffer[i]));
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Scroll text buffer with one line to up. */
|
/* Scroll text buffer with one line to up. */
|
||||||
grub_memmove (virtual_screen.text_buffer,
|
grub_memmove (virtual_screen.text_buffer,
|
||||||
|
|
Loading…
Reference in a new issue