Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/usr.sbin/sysinst Implement add_outer_partition (to allow acc...
details: https://anonhg.NetBSD.org/src/rev/618d4aa394c7
branches: trunk
changeset: 452535:618d4aa394c7
user: martin <martin%NetBSD.org@localhost>
date: Fri Jul 12 18:22:36 2019 +0000
description:
Implement add_outer_partition (to allow access to partitions outside
the NetBSD disklabel part)
diffstat:
usr.sbin/sysinst/disklabel.c | 62 +++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 61 insertions(+), 1 deletions(-)
diffs (83 lines):
diff -r 706c3c268a3e -r 618d4aa394c7 usr.sbin/sysinst/disklabel.c
--- a/usr.sbin/sysinst/disklabel.c Fri Jul 12 17:18:30 2019 +0000
+++ b/usr.sbin/sysinst/disklabel.c Fri Jul 12 18:22:36 2019 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: disklabel.c,v 1.6 2019/07/10 16:35:11 martin Exp $ */
+/* $NetBSD: disklabel.c,v 1.7 2019/07/12 18:22:36 martin Exp $ */
/*
* Copyright 2018 The NetBSD Foundation, Inc.
@@ -914,6 +914,65 @@
return new_id;
}
+static part_id
+disklabel_add_outer_partition(struct disk_partitions *arg,
+ const struct disk_part_info *info, const char **err_msg)
+{
+ struct disklabel_disk_partitions *parts =
+ (struct disklabel_disk_partitions*)arg;
+ int i, part = -1;
+ part_id new_id;
+
+ if (dl_maxpart == 0)
+ dl_maxpart = getmaxpartitions();
+
+ for (new_id = 0, i = 0; i < parts->l.d_npartitions; i++) {
+ if (parts->l.d_partitions[i].p_size > 0)
+ new_id++;
+ if (info->nat_type->generic_ptype != PT_root &&
+ info->nat_type->generic_ptype != PT_swap && i < RAW_PART)
+ continue;
+ if (i == 0 && info->nat_type->generic_ptype != PT_root)
+ continue;
+ if (i == 1 && info->nat_type->generic_ptype != PT_swap)
+ continue;
+ if (i == RAW_PART)
+ continue;
+#if RAW_PART > 2
+ if (i == RAW_PART-1)
+ continue;
+#endif
+ if (parts->l.d_partitions[i].p_size > 0)
+ continue;
+ part = i;
+ break;
+ }
+
+ if (part < 0) {
+ if (parts->l.d_npartitions >= dl_maxpart) {
+ if (err_msg)
+ *err_msg =
+ msg_string(MSG_err_too_many_partitions);
+ return NO_PART;
+ }
+
+ part = parts->l.d_npartitions++;
+ }
+ parts->l.d_partitions[part].p_offset = info->start;
+ parts->l.d_partitions[part].p_size = info->size;
+ parts->l.d_partitions[part].p_fstype =
+ dl_part_type_from_generic(info->nat_type);
+ if (info->last_mounted && info->last_mounted[0])
+ strlcpy(parts->last_mounted[part], info->last_mounted,
+ sizeof(parts->last_mounted[part]));
+ else
+ parts->last_mounted[part][0] = 0;
+ parts->fs_sub_type[part] = info->fs_sub_type;
+ parts->dp.num_part++;
+
+ return new_id;
+}
+
static size_t
disklabel_get_free_spaces(const struct disk_partitions *arg,
struct disk_part_free_space *result, size_t max_num_result,
@@ -982,6 +1041,7 @@
.can_add_partition = disklabel_can_add_partition,
.set_part_info = disklabel_set_part_info,
.add_partition = disklabel_add_partition,
+ .add_outer_partition = disklabel_add_outer_partition,
.max_free_space_at = disklabel_max_free_space_at,
.get_free_spaces = disklabel_get_free_spaces,
.get_part_device = disklabel_get_part_device,
Home |
Main Index |
Thread Index |
Old Index