Merge mainline into usb
This commit is contained in:
commit
b92c6ff67f
5 changed files with 48 additions and 5 deletions
15
ChangeLog
15
ChangeLog
|
@ -1,3 +1,18 @@
|
||||||
|
2010-07-17 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* include/grub/bsdlabel.h (GRUB_PC_PARTITION_BSD_LABEL_WHOLE_DISK_PARTITION): New definition.
|
||||||
|
* partmap/bsdlabel.c (bsdlabel_partition_map_iterate): Use FreeBSD
|
||||||
|
delta determination style. Works with most NetBSD partitions too.
|
||||||
|
|
||||||
|
2010-07-17 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* kern/partition.c [GRUB_UTIL]: Add missing util/misc.h inclusion.
|
||||||
|
* partmap/bsdlabel.c [GRUB_UTIL]: Likewise.
|
||||||
|
|
||||||
|
2010-07-17 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* disk/scsi.c (grub_scsi_open): Fix incorrect pointer dereference.
|
||||||
|
|
||||||
2010-07-14 Anton Blanchard <anton@samba.org>
|
2010-07-14 Anton Blanchard <anton@samba.org>
|
||||||
|
|
||||||
* loader/powerpc/ieee1275/linux.c (grub_cmd_linux): Do not reject
|
* loader/powerpc/ieee1275/linux.c (grub_cmd_linux): Do not reject
|
||||||
|
|
|
@ -402,7 +402,7 @@ grub_scsi_open (const char *name, grub_disk_t disk)
|
||||||
if (p->open (bus, scsi))
|
if (p->open (bus, scsi))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
disk->id = grub_make_scsi_id (scsi->dev->id, bus, lun);
|
disk->id = grub_make_scsi_id (p->id, bus, lun);
|
||||||
disk->data = scsi;
|
disk->data = scsi;
|
||||||
scsi->dev = p;
|
scsi->dev = p;
|
||||||
scsi->lun = lun;
|
scsi->lun = lun;
|
||||||
|
|
|
@ -63,6 +63,8 @@
|
||||||
#define GRUB_PC_PARTITION_OPENBSD_TYPE_NTFS 18
|
#define GRUB_PC_PARTITION_OPENBSD_TYPE_NTFS 18
|
||||||
#define GRUB_PC_PARTITION_OPENBSD_TYPE_RAID 19
|
#define GRUB_PC_PARTITION_OPENBSD_TYPE_RAID 19
|
||||||
|
|
||||||
|
#define GRUB_PC_PARTITION_BSD_LABEL_WHOLE_DISK_PARTITION 2
|
||||||
|
|
||||||
/* The BSD partition entry. */
|
/* The BSD partition entry. */
|
||||||
struct grub_partition_bsd_entry
|
struct grub_partition_bsd_entry
|
||||||
{
|
{
|
||||||
|
|
|
@ -21,6 +21,10 @@
|
||||||
#include <grub/partition.h>
|
#include <grub/partition.h>
|
||||||
#include <grub/disk.h>
|
#include <grub/disk.h>
|
||||||
|
|
||||||
|
#ifdef GRUB_UTIL
|
||||||
|
#include <grub/util/misc.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
grub_partition_map_t grub_partition_map_list;
|
grub_partition_map_t grub_partition_map_list;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -24,6 +24,10 @@
|
||||||
#include <grub/misc.h>
|
#include <grub/misc.h>
|
||||||
#include <grub/dl.h>
|
#include <grub/dl.h>
|
||||||
|
|
||||||
|
#ifdef GRUB_UTIL
|
||||||
|
#include <grub/util/misc.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
static struct grub_partition_map grub_bsdlabel_partition_map;
|
static struct grub_partition_map grub_bsdlabel_partition_map;
|
||||||
|
|
||||||
|
|
||||||
|
@ -37,9 +41,6 @@ bsdlabel_partition_map_iterate (grub_disk_t disk,
|
||||||
grub_disk_addr_t delta = 0;
|
grub_disk_addr_t delta = 0;
|
||||||
unsigned pos;
|
unsigned pos;
|
||||||
|
|
||||||
/* BSDLabel offsets are absolute even when it's embed inside partition. */
|
|
||||||
delta = grub_partition_get_start (disk->partition);
|
|
||||||
|
|
||||||
/* Read the BSD label. */
|
/* Read the BSD label. */
|
||||||
if (grub_disk_read (disk, GRUB_PC_PARTITION_BSD_LABEL_SECTOR,
|
if (grub_disk_read (disk, GRUB_PC_PARTITION_BSD_LABEL_SECTOR,
|
||||||
0, sizeof (label), &label))
|
0, sizeof (label), &label))
|
||||||
|
@ -49,6 +50,24 @@ bsdlabel_partition_map_iterate (grub_disk_t disk,
|
||||||
if (label.magic != grub_cpu_to_le32 (GRUB_PC_PARTITION_BSD_LABEL_MAGIC))
|
if (label.magic != grub_cpu_to_le32 (GRUB_PC_PARTITION_BSD_LABEL_MAGIC))
|
||||||
return grub_error (GRUB_ERR_BAD_PART_TABLE, "no signature");
|
return grub_error (GRUB_ERR_BAD_PART_TABLE, "no signature");
|
||||||
|
|
||||||
|
/* A kludge to determine a base of be.offset. */
|
||||||
|
if (GRUB_PC_PARTITION_BSD_LABEL_WHOLE_DISK_PARTITION
|
||||||
|
< grub_cpu_to_le16 (label.num_partitions))
|
||||||
|
{
|
||||||
|
struct grub_partition_bsd_entry whole_disk_be;
|
||||||
|
|
||||||
|
pos = sizeof (label) + GRUB_PC_PARTITION_BSD_LABEL_SECTOR
|
||||||
|
* GRUB_DISK_SECTOR_SIZE + sizeof (struct grub_partition_bsd_entry)
|
||||||
|
* GRUB_PC_PARTITION_BSD_LABEL_WHOLE_DISK_PARTITION;
|
||||||
|
|
||||||
|
if (grub_disk_read (disk, pos / GRUB_DISK_SECTOR_SIZE,
|
||||||
|
pos % GRUB_DISK_SECTOR_SIZE, sizeof (whole_disk_be),
|
||||||
|
&whole_disk_be))
|
||||||
|
return grub_errno;
|
||||||
|
|
||||||
|
delta = grub_le_to_cpu32 (whole_disk_be.offset);
|
||||||
|
}
|
||||||
|
|
||||||
pos = sizeof (label) + GRUB_PC_PARTITION_BSD_LABEL_SECTOR
|
pos = sizeof (label) + GRUB_PC_PARTITION_BSD_LABEL_SECTOR
|
||||||
* GRUB_DISK_SECTOR_SIZE;
|
* GRUB_DISK_SECTOR_SIZE;
|
||||||
|
|
||||||
|
@ -58,6 +77,9 @@ bsdlabel_partition_map_iterate (grub_disk_t disk,
|
||||||
{
|
{
|
||||||
struct grub_partition_bsd_entry be;
|
struct grub_partition_bsd_entry be;
|
||||||
|
|
||||||
|
if (p.number == GRUB_PC_PARTITION_BSD_LABEL_WHOLE_DISK_PARTITION)
|
||||||
|
continue;
|
||||||
|
|
||||||
p.offset = pos / GRUB_DISK_SECTOR_SIZE;
|
p.offset = pos / GRUB_DISK_SECTOR_SIZE;
|
||||||
p.index = pos % GRUB_DISK_SECTOR_SIZE;
|
p.index = pos % GRUB_DISK_SECTOR_SIZE;
|
||||||
|
|
||||||
|
@ -74,7 +96,7 @@ bsdlabel_partition_map_iterate (grub_disk_t disk,
|
||||||
(unsigned long long) p.start,
|
(unsigned long long) p.start,
|
||||||
(unsigned long long) p.len);
|
(unsigned long long) p.len);
|
||||||
|
|
||||||
if (be.fs_type == GRUB_PC_PARTITION_BSD_TYPE_UNUSED)
|
if (p.len == 0)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (p.start < delta)
|
if (p.start < delta)
|
||||||
|
|
Loading…
Reference in a new issue