merge with mainline

This commit is contained in:
BVK Chaitanya 2010-07-11 17:55:26 +05:30
commit e57a453ad1
217 changed files with 35601 additions and 4892 deletions

View file

@ -43,9 +43,7 @@ static int grub_console_attr = A_NORMAL;
grub_uint8_t grub_console_cur_color = 7;
static grub_uint8_t grub_console_standard_color = 0x7;
static grub_uint8_t grub_console_normal_color = 0x7;
static grub_uint8_t grub_console_highlight_color = 0x70;
static const grub_uint8_t grub_console_standard_color = 0x7;
#define NUM_COLORS 8
@ -64,60 +62,15 @@ static grub_uint8_t color_map[NUM_COLORS] =
static int use_color;
static void
grub_ncurses_putchar (grub_uint32_t c)
grub_ncurses_putchar (struct grub_term_output *term __attribute__ ((unused)),
const struct grub_unicode_glyph *c)
{
/* Better than nothing. */
switch (c)
{
case GRUB_TERM_DISP_LEFT:
c = '<';
break;
case GRUB_TERM_DISP_UP:
c = '^';
break;
case GRUB_TERM_DISP_RIGHT:
c = '>';
break;
case GRUB_TERM_DISP_DOWN:
c = 'v';
break;
case GRUB_TERM_DISP_HLINE:
c = '-';
break;
case GRUB_TERM_DISP_VLINE:
c = '|';
break;
case GRUB_TERM_DISP_UL:
case GRUB_TERM_DISP_UR:
case GRUB_TERM_DISP_LL:
case GRUB_TERM_DISP_LR:
c = '+';
break;
default:
/* ncurses does not support Unicode. */
if (c > 0x7f)
c = '?';
break;
}
addch (c | grub_console_attr);
}
static grub_ssize_t
grub_ncurses_getcharwidth (grub_uint32_t code __attribute__ ((unused)))
{
return 1;
addch (c->base | grub_console_attr);
}
static void
grub_ncurses_setcolorstate (grub_term_color_state state)
grub_ncurses_setcolorstate (struct grub_term_output *term,
grub_term_color_state state)
{
switch (state)
{
@ -126,11 +79,11 @@ grub_ncurses_setcolorstate (grub_term_color_state state)
grub_console_attr = A_NORMAL;
break;
case GRUB_TERM_COLOR_NORMAL:
grub_console_cur_color = grub_console_normal_color;
grub_console_cur_color = term->normal_color;
grub_console_attr = A_NORMAL;
break;
case GRUB_TERM_COLOR_HIGHLIGHT:
grub_console_cur_color = grub_console_highlight_color;
grub_console_cur_color = term->highlight_color;
grub_console_attr = A_STANDOUT;
break;
default:
@ -149,25 +102,10 @@ grub_ncurses_setcolorstate (grub_term_color_state state)
}
}
/* XXX: This function is never called. */
static void
grub_ncurses_setcolor (grub_uint8_t normal_color, grub_uint8_t highlight_color)
{
grub_console_normal_color = normal_color;
grub_console_highlight_color = highlight_color;
}
static void
grub_ncurses_getcolor (grub_uint8_t *normal_color, grub_uint8_t *highlight_color)
{
*normal_color = grub_console_normal_color;
*highlight_color = grub_console_highlight_color;
}
static int saved_char = ERR;
static int
grub_ncurses_checkkey (void)
grub_ncurses_checkkey (struct grub_term_input *term __attribute__ ((unused)))
{
int c;
@ -189,7 +127,7 @@ grub_ncurses_checkkey (void)
}
static int
grub_ncurses_getkey (void)
grub_ncurses_getkey (struct grub_term_input *term __attribute__ ((unused)))
{
int c;
@ -208,19 +146,19 @@ grub_ncurses_getkey (void)
switch (c)
{
case KEY_LEFT:
c = 2;
c = GRUB_TERM_LEFT;
break;
case KEY_RIGHT:
c = 6;
c = GRUB_TERM_RIGHT;
break;
case KEY_UP:
c = 16;
c = GRUB_TERM_UP;
break;
case KEY_DOWN:
c = 14;
c = GRUB_TERM_DOWN;
break;
case KEY_IC:
@ -228,30 +166,30 @@ grub_ncurses_getkey (void)
break;
case KEY_DC:
c = 4;
c = GRUB_TERM_DC;
break;
case KEY_BACKSPACE:
/* XXX: For some reason ncurses on xterm does not return
KEY_BACKSPACE. */
case 127:
c = 8;
c = GRUB_TERM_BACKSPACE;
break;
case KEY_HOME:
c = 1;
c = GRUB_TERM_HOME;
break;
case KEY_END:
c = 5;
c = GRUB_TERM_END;
break;
case KEY_NPAGE:
c = 3;
c = GRUB_TERM_NPAGE;
break;
case KEY_PPAGE:
c = 7;
c = GRUB_TERM_PPAGE;
break;
}
@ -259,7 +197,7 @@ grub_ncurses_getkey (void)
}
static grub_uint16_t
grub_ncurses_getxy (void)
grub_ncurses_getxy (struct grub_term_output *term __attribute__ ((unused)))
{
int x;
int y;
@ -270,7 +208,7 @@ grub_ncurses_getxy (void)
}
static grub_uint16_t
grub_ncurses_getwh (void)
grub_ncurses_getwh (struct grub_term_output *term __attribute__ ((unused)))
{
int x;
int y;
@ -281,32 +219,34 @@ grub_ncurses_getwh (void)
}
static void
grub_ncurses_gotoxy (grub_uint8_t x, grub_uint8_t y)
grub_ncurses_gotoxy (struct grub_term_output *term __attribute__ ((unused)),
grub_uint8_t x, grub_uint8_t y)
{
move (y, x);
}
static void
grub_ncurses_cls (void)
grub_ncurses_cls (struct grub_term_output *term __attribute__ ((unused)))
{
clear ();
refresh ();
}
static void
grub_ncurses_setcursor (int on)
grub_ncurses_setcursor (struct grub_term_output *term __attribute__ ((unused)),
int on)
{
curs_set (on ? 1 : 0);
}
static void
grub_ncurses_refresh (void)
grub_ncurses_refresh (struct grub_term_output *term __attribute__ ((unused)))
{
refresh ();
}
static grub_err_t
grub_ncurses_init (void)
grub_ncurses_init (struct grub_term_output *term __attribute__ ((unused)))
{
initscr ();
raw ();
@ -338,7 +278,7 @@ grub_ncurses_init (void)
}
static grub_err_t
grub_ncurses_fini (void)
grub_ncurses_fini (struct grub_term_output *term __attribute__ ((unused)))
{
endwin ();
return 0;
@ -358,16 +298,14 @@ static struct grub_term_output grub_ncurses_term_output =
.init = grub_ncurses_init,
.fini = grub_ncurses_fini,
.putchar = grub_ncurses_putchar,
.getcharwidth = grub_ncurses_getcharwidth,
.getxy = grub_ncurses_getxy,
.getwh = grub_ncurses_getwh,
.gotoxy = grub_ncurses_gotoxy,
.cls = grub_ncurses_cls,
.setcolorstate = grub_ncurses_setcolorstate,
.setcolor = grub_ncurses_setcolor,
.getcolor = grub_ncurses_getcolor,
.setcursor = grub_ncurses_setcursor,
.refresh = grub_ncurses_refresh
.refresh = grub_ncurses_refresh,
.flags = GRUB_TERM_CODE_TYPE_ASCII
};
void
@ -380,5 +318,5 @@ grub_console_init (void)
void
grub_console_fini (void)
{
grub_ncurses_fini ();
grub_ncurses_fini (&grub_ncurses_term_output);
}

View file

@ -33,6 +33,7 @@
#include <hurd.h>
#include <hurd/lookup.h>
#include <hurd/fs.h>
#include <sys/mman.h>
#endif
#include <grub/mm.h>

View file

@ -342,7 +342,7 @@ find_partition_start (const char *dev)
# endif /* !defined(__NetBSD__) */
# ifdef HAVE_DEVICE_MAPPER
if (device_is_mapped (dev)) {
if (grub_device_mapper_supported () && device_is_mapped (dev)) {
struct dm_task *task = NULL;
grub_uint64_t start, length;
char *target_type, *params, *space;
@ -992,6 +992,11 @@ grub_util_biosdisk_fini (void)
grub_disk_dev_unregister (&grub_util_biosdisk_dev);
}
/*
* Note: we do not use the new partition naming scheme as dos_part does not
* necessarily correspond to an msdos partition. See e.g. the FreeBSD code
* in function grub_util_biosdisk_get_grub_dev.
*/
static char *
make_device_name (int drive, int dos_part, int bsd_part)
{
@ -1255,7 +1260,7 @@ devmapper_out:
for (p = path + 5; *p; ++p)
if (grub_isdigit(*p))
{
p = strchr (p, 's');
p = strpbrk (p, "sp");
if (p)
*p = '\0';
break;
@ -1400,11 +1405,9 @@ grub_util_biosdisk_get_grub_dev (const char *os_dev)
For NetBSD, proceed as for Linux, except that the start sector is
obtained from the disk label. */
{
char *name;
char *name, *partname;
grub_disk_t disk;
grub_disk_addr_t start;
int dos_part = -1;
int bsd_part = -1;
auto int find_partition (grub_disk_t dsk,
const grub_partition_t partition);
@ -1419,17 +1422,7 @@ grub_util_biosdisk_get_grub_dev (const char *os_dev)
if (start == part_start)
{
if (partition->parent)
{
dos_part = partition->parent->number;
bsd_part = partition->number;
}
else
{
dos_part = partition->number;
bsd_part = -1;
}
partname = grub_partition_get_name (partition);
return 1;
}
@ -1465,6 +1458,7 @@ grub_util_biosdisk_get_grub_dev (const char *os_dev)
if (! disk)
return 0;
partname = NULL;
grub_partition_iterate (disk, find_partition);
if (grub_errno != GRUB_ERR_NONE)
{
@ -1472,7 +1466,7 @@ grub_util_biosdisk_get_grub_dev (const char *os_dev)
return 0;
}
if (dos_part < 0)
if (partname == NULL)
{
grub_disk_close (disk);
grub_error (GRUB_ERR_BAD_DEVICE,
@ -1480,7 +1474,9 @@ grub_util_biosdisk_get_grub_dev (const char *os_dev)
return 0;
}
return make_device_name (drive, dos_part, bsd_part);
name = grub_xasprintf ("%s,%s", disk->name, partname);
free (partname);
return name;
}
#elif defined(__GNU__)
@ -1511,7 +1507,7 @@ grub_util_biosdisk_get_grub_dev (const char *os_dev)
}
#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__APPLE__)
/* FreeBSD uses "/dev/[a-z]+[0-9]+(s[0-9]+[a-z]?)?". */
/* FreeBSD uses "/dev/[a-z]+[0-9]+([sp][0-9]+[a-z]?)?". */
{
int dos_part = -1;
int bsd_part = -1;
@ -1525,7 +1521,7 @@ grub_util_biosdisk_get_grub_dev (const char *os_dev)
for (p = os_dev + 5; *p; ++p)
if (grub_isdigit(*p))
{
p = strchr (p, 's');
p = strpbrk (p, "sp"); /* msdos or apple (or ... ?) partition map */
if (p)
{
p++;

View file

@ -22,6 +22,10 @@
#include <grub/time.h>
#include <grub/emu/misc.h>
#ifdef HAVE_DEVICE_MAPPER
# include <libdevmapper.h>
#endif
int verbosity;
void
@ -311,3 +315,38 @@ grub_make_system_path_relative_to_its_root (const char *path)
return buf3;
}
#ifdef HAVE_DEVICE_MAPPER
static void device_mapper_null_log (int level __attribute__ ((unused)),
const char *file __attribute__ ((unused)),
int line __attribute__ ((unused)),
int dm_errno __attribute__ ((unused)),
const char *f __attribute__ ((unused)),
...)
{
}
int
grub_device_mapper_supported (void)
{
static int supported = -1;
if (supported == -1)
{
struct dm_task *dmt;
/* Suppress annoying log messages. */
dm_log_with_errno_init (&device_mapper_null_log);
dmt = dm_task_create (DM_DEVICE_VERSION);
supported = (dmt != NULL);
if (dmt)
dm_task_destroy (dmt);
/* Restore the original logger. */
dm_log_with_errno_init (NULL);
}
return supported;
}
#endif /* HAVE_DEVICE_MAPPER */