56 |
grub_partition_probe (struct grub_disk *disk, const char *str) |
grub_partition_probe (struct grub_disk *disk, const char *str) |
57 |
{ |
{ |
58 |
grub_partition_t part; |
grub_partition_t part; |
59 |
|
|
60 |
auto int part_map_probe (const grub_partition_map_t partmap); |
auto int part_map_probe (const grub_partition_map_t partmap); |
61 |
|
|
62 |
int part_map_probe (const grub_partition_map_t partmap) |
int part_map_probe (const grub_partition_map_t partmap) |
63 |
{ |
{ |
64 |
part = partmap->probe (disk, str); |
part = partmap->probe (disk, str); |
65 |
if (part) |
if (part) |
66 |
return 1; |
return 1; |
67 |
return 0; |
|
68 |
|
if (grub_errno == GRUB_ERR_BAD_PART_TABLE) |
69 |
|
{ |
70 |
|
/* Continue to next partition map type. */ |
71 |
|
grub_errno = GRUB_ERR_NONE; |
72 |
|
return 0; |
73 |
|
} |
74 |
|
|
75 |
|
return 1; |
76 |
} |
} |
77 |
|
|
78 |
/* Use the first partition map type found. */ |
/* Use the first partition map type found. */ |
79 |
grub_partition_map_iterate (part_map_probe); |
grub_partition_map_iterate (part_map_probe); |
80 |
|
|
81 |
return part; |
return part; |
82 |
} |
} |
83 |
|
|
86 |
int (*hook) (const grub_partition_t partition)) |
int (*hook) (const grub_partition_t partition)) |
87 |
{ |
{ |
88 |
auto int part_map_iterate (const grub_partition_map_t partmap); |
auto int part_map_iterate (const grub_partition_map_t partmap); |
89 |
|
|
90 |
int part_map_iterate (const grub_partition_map_t partmap) |
int part_map_iterate (const grub_partition_map_t partmap) |
91 |
{ |
{ |
92 |
return partmap->iterate (disk, hook); |
grub_err_t err = partmap->iterate (disk, hook); |
93 |
|
|
94 |
|
if (err == GRUB_ERR_BAD_PART_TABLE) |
95 |
|
{ |
96 |
|
/* Continue to next partition map type. */ |
97 |
|
grub_errno = GRUB_ERR_NONE; |
98 |
|
return 0; |
99 |
|
} |
100 |
|
|
101 |
|
return 1; |
102 |
} |
} |
103 |
|
|
104 |
grub_partition_map_iterate (part_map_iterate); |
grub_partition_map_iterate (part_map_iterate); |
105 |
return grub_errno; |
return grub_errno; |
106 |
} |
} |