summaryrefslogtreecommitdiff
path: root/sbin/pdisk
diff options
context:
space:
mode:
authorKenneth R Westerback <krw@cvs.openbsd.org>2016-01-28 22:01:01 +0000
committerKenneth R Westerback <krw@cvs.openbsd.org>2016-01-28 22:01:01 +0000
commit26115ece552926426f687db031c7dd2e33f63a18 (patch)
tree43cebde8b2b8f6d6421073243d5d5a32c125422f /sbin/pdisk
parentf9a3d09fcd3ee8ca12bc1231954f9375f7906c74 (diff)
Delete a bunch of Morris dancing in delete_partition_from_map().
No need to create a new dpme. Just rename/retype the existing and let combine_entry() suck in any surrounding empty space partitions.
Diffstat (limited to 'sbin/pdisk')
-rw-r--r--sbin/pdisk/partition_map.c43
1 files changed, 16 insertions, 27 deletions
diff --git a/sbin/pdisk/partition_map.c b/sbin/pdisk/partition_map.c
index 7f0bfc19e5c..4005c3983a4 100644
--- a/sbin/pdisk/partition_map.c
+++ b/sbin/pdisk/partition_map.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: partition_map.c,v 1.78 2016/01/28 19:07:45 krw Exp $ */
+/* $OpenBSD: partition_map.c,v 1.79 2016/01/28 22:01:00 krw Exp $ */
/*
* partition_map.c - partition map routines
@@ -518,46 +518,35 @@ renumber_disk_addresses(struct partition_map_header *map)
void
delete_partition_from_map(struct partition_map *entry)
{
- struct partition_map_header *map;
struct dpme *dpme;
if (strncasecmp(entry->dpme->dpme_type, kMapType, DPISTRLEN) == 0) {
printf("Can't delete entry for the map itself\n");
return;
}
+ if (strncasecmp(entry->dpme->dpme_type, kFreeType, DPISTRLEN) == 0) {
+ printf("Can't delete entry for free space\n");
+ return;
+ }
if (entry->contains_driver) {
printf("This program can't install drivers\n");
if (get_okay("are you sure you want to delete this driver? "
"[n/y]: ", 0) != 1) {
return;
}
- }
- /* if past end of disk, delete it completely */
- if (entry->next_by_base == NULL &&
- entry->dpme->dpme_pblock_start >= entry->the_map->media_size) {
- if (entry->contains_driver) {
- remove_driver(entry); /* update block0 if necessary */
- }
- delete_entry(entry);
- return;
- }
- /* If at end of disk, incorporate extra disk space to partition */
- if (entry->next_by_base == NULL) {
- entry->dpme->dpme_pblocks = entry->the_map->media_size -
- entry->dpme->dpme_pblock_start;
- }
- dpme = create_dpme(kFreeName, kFreeType,
- entry->dpme->dpme_pblock_start, entry->dpme->dpme_pblocks);
- if (dpme == NULL)
- return;
- if (entry->contains_driver)
remove_driver(entry); /* update block0 if necessary */
- free(entry->dpme);
- entry->dpme = dpme;
+ }
+
+ dpme = entry->dpme;
+ memset(dpme->dpme_name, 0, sizeof(dpme->dpme_name));
+ strlcpy(dpme->dpme_name, kFreeName, sizeof(dpme->dpme_name));
+ memset(dpme->dpme_type, 0, sizeof(dpme->dpme_type));
+ strlcpy(dpme->dpme_type, kFreeType, sizeof(dpme->dpme_type));
+ dpme_init_flags(dpme);
+
combine_entry(entry);
- map = entry->the_map;
- renumber_disk_addresses(map);
- map->changed = 1;
+ renumber_disk_addresses(entry->the_map);
+ entry->the_map->changed = 1;
}