21
21
#include <grub/partition.h>
22
22
#include <grub/disk.h>
25
#include <grub/util/misc.h>
24
28
grub_partition_map_t grub_partition_map_list;
31
* Checks that disk->partition contains part. This function assumes that the
32
* start of part is relative to the start of disk->partition. Returns 1 if
33
* disk->partition is null.
36
grub_partition_check_containment (const grub_disk_t disk,
37
const grub_partition_t part)
39
if (disk->partition == NULL)
42
if (part->start + part->len > disk->partition->len)
46
partname = grub_partition_get_name (disk->partition);
47
grub_dprintf ("partition", "sub-partition %s%d of (%s,%s) ends after parent.\n",
48
part->partmap->name, part->number + 1, disk->name, partname);
50
grub_util_warn ("Discarding improperly nested partition (%s,%s,%s%d)",
51
disk->name, partname, part->partmap->name, part->number + 1);
26
61
static grub_partition_t
27
62
grub_partition_map_probe (const grub_partition_map_t partmap,
28
63
grub_disk_t disk, int partnum)
32
67
auto int find_func (grub_disk_t d, const grub_partition_t partition);
34
int find_func (grub_disk_t d __attribute__ ((unused)),
69
int find_func (grub_disk_t dsk,
35
70
const grub_partition_t partition)
37
if (partnum == partition->number)
39
p = (grub_partition_t) grub_malloc (sizeof (*p));
43
grub_memcpy (p, partition, sizeof (*p));
72
if (partnum != partition->number)
75
if (!(grub_partition_check_containment (dsk, partition)))
78
p = (grub_partition_t) grub_malloc (sizeof (*p));
82
grub_memcpy (p, partition, sizeof (*p));
50
86
partmap->iterate (disk, find_func);
138
174
const grub_partition_t partition)
140
176
struct grub_partition p = *partition;
178
if (!(grub_partition_check_containment (dsk, partition)))
141
181
p.parent = dsk->partition;
142
182
dsk->partition = 0;
143
183
if (hook (dsk, &p))