summaryrefslogtreecommitdiffstats
path: root/sbin
diff options
context:
space:
mode:
Diffstat (limited to 'sbin')
-rw-r--r--sbin/gpt/map.c21
1 files changed, 13 insertions, 8 deletions
diff --git a/sbin/gpt/map.c b/sbin/gpt/map.c
index 93d0f61..5aba63c 100644
--- a/sbin/gpt/map.c
+++ b/sbin/gpt/map.c
@@ -69,20 +69,25 @@ map_add(off_t start, off_t size, int type, void *data)
}
if (n->map_start == start && n->map_size == size) {
- if (n->map_type != MAP_TYPE_UNUSED)
- warnx("warning: partition(%llu,%llu) mirrored",
- (long long)start, (long long)size);
+ if (n->map_type != MAP_TYPE_UNUSED) {
+ if (n->map_type != MAP_TYPE_MBR_PART ||
+ type != MAP_TYPE_GPT_PART) {
+ warnx("warning: partition(%llu,%llu) mirrored",
+ (long long)start, (long long)size);
+ }
+ }
n->map_type = type;
n->map_data = data;
return (n);
}
if (n->map_type != MAP_TYPE_UNUSED) {
- warnx(
- "error: partition(%llu,%llu) overlaps partition(%llu,%llu)",
- (long long)start, (long long)size,
- (long long)n->map_start, (long long)n->map_size);
- return (0);
+ if (n->map_type != MAP_TYPE_MBR_PART ||
+ type != MAP_TYPE_GPT_PART) {
+ warnx("error: bogus map");
+ return (0);
+ }
+ n->map_type = MAP_TYPE_UNUSED;
}
m = mkmap(start, size, type);
OpenPOWER on IntegriCloud