Module Name: src Committed By: martin Date: Wed Nov 13 18:57:26 UTC 2019
Modified Files: src/usr.sbin/sysinst: Makefile.inc bsddisklabel.c defs.h disks.c install.c label.c part_edit.c util.c Log Message: Make cloning support optional, so we can save some space on very small install media. To generate a diff of this commit: cvs rdiff -u -r1.28 -r1.29 src/usr.sbin/sysinst/Makefile.inc cvs rdiff -u -r1.30 -r1.31 src/usr.sbin/sysinst/bsddisklabel.c cvs rdiff -u -r1.46 -r1.47 src/usr.sbin/sysinst/defs.h cvs rdiff -u -r1.55 -r1.56 src/usr.sbin/sysinst/disks.c cvs rdiff -u -r1.12 -r1.13 src/usr.sbin/sysinst/install.c cvs rdiff -u -r1.13 -r1.14 src/usr.sbin/sysinst/label.c cvs rdiff -u -r1.11 -r1.12 src/usr.sbin/sysinst/part_edit.c cvs rdiff -u -r1.36 -r1.37 src/usr.sbin/sysinst/util.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/usr.sbin/sysinst/Makefile.inc diff -u src/usr.sbin/sysinst/Makefile.inc:1.28 src/usr.sbin/sysinst/Makefile.inc:1.29 --- src/usr.sbin/sysinst/Makefile.inc:1.28 Thu Oct 31 09:44:13 2019 +++ src/usr.sbin/sysinst/Makefile.inc Wed Nov 13 18:57:26 2019 @@ -1,4 +1,4 @@ -# $NetBSD: Makefile.inc,v 1.28 2019/10/31 09:44:13 martin Exp $ +# $NetBSD: Makefile.inc,v 1.29 2019/11/13 18:57:26 martin Exp $ # # Makefile for sysinst @@ -43,6 +43,9 @@ CPPFLAGS.gpt.c+= -I${GPT_DIR} CPPFLAGS+= -DHAVE_MBR SRCS+= mbr.c .endif +.if ${NO_CLONES:Uno} == "yes" +CPPFLAGS+= -DNO_CLONES +.endif MSG_MD?= msg.md.${SYSINSTLANG} MENUS_MD?= menus.md.${SYSINSTLANG} Index: src/usr.sbin/sysinst/bsddisklabel.c diff -u src/usr.sbin/sysinst/bsddisklabel.c:1.30 src/usr.sbin/sysinst/bsddisklabel.c:1.31 --- src/usr.sbin/sysinst/bsddisklabel.c:1.30 Tue Nov 12 16:33:14 2019 +++ src/usr.sbin/sysinst/bsddisklabel.c Wed Nov 13 18:57:26 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: bsddisklabel.c,v 1.30 2019/11/12 16:33:14 martin Exp $ */ +/* $NetBSD: bsddisklabel.c,v 1.31 2019/11/13 18:57:26 martin Exp $ */ /* * Copyright 1997 Piermont Information Systems Inc. @@ -251,11 +251,13 @@ draw_size_menu_line(menudesc *m, int opt mount = swap; } else if (pset->infos[opt].mount[0]) { mount = pset->infos[opt].mount; +#ifndef NO_CLONES } else if (pset->infos[opt].flags & PUIFLG_CLONE_PARTS) { snprintf(swap, sizeof swap, "%zu %s", pset->infos[opt].clone_src->num_sel, msg_string(MSG_clone_target_disp)); mount = swap; +#endif } else { mount = NULL; if (pset->infos[opt].parts->pscheme->other_partition_identifier @@ -353,6 +355,7 @@ add_other_ptn_size(menudesc *menu, void return -1; } +#ifndef NO_CLONES static int inst_ext_clone(menudesc *menu, void *arg) { @@ -430,6 +433,7 @@ err: free_selected_partitions(&selected); return 0; } +#endif static size_t fill_ptn_menu(struct partition_usage_set *pset) @@ -440,7 +444,14 @@ fill_ptn_menu(struct partition_usage_set size_t i; daddr_t free_space; - memset(pset->menu_opts, 0, (pset->num+4)*sizeof(*pset->menu_opts)); +#ifdef NO_CLONES +#define ADD_ITEMS 3 +#else +#define ADD_ITEMS 4 +#endif + + memset(pset->menu_opts, 0, (pset->num+ADD_ITEMS) + *sizeof(*pset->menu_opts)); for (m = pset->menu_opts, p = pset->infos, i = 0; i < pset->num; m++, p++, i++) { if (p->flags & PUIFLG_CLONE_PARTS) @@ -457,9 +468,11 @@ fill_ptn_menu(struct partition_usage_set m->opt_action = add_other_ptn_size; m++; +#ifndef NO_CLONES m->opt_name = MSG_clone_from_elsewhere; m->opt_action = inst_ext_clone; m++; +#endif m->opt_name = MSG_askunits; m->opt_menu = MENU_sizechoice; @@ -1136,6 +1149,7 @@ sort_and_sync_parts(struct partition_usa pset->infos = infos; } +#ifndef NO_CLONES /* * Convert clone entries with more than one source into * several entries with a single source each. @@ -1188,6 +1202,7 @@ normalize_clones(struct part_usage_info free(*infos); *infos = ui; } +#endif static void apply_settings_to_partitions(struct pm_devs *p, struct disk_partitions *parts, @@ -1195,13 +1210,18 @@ apply_settings_to_partitions(struct pm_d { size_t i, exp_ndx = ~0U; daddr_t planned_space = 0, nsp, from, align; - struct disk_part_info *infos, cinfo, srcinfo; + struct disk_part_info *infos; +#ifndef NO_CLONES + struct disk_part_info cinfo, srcinfo; + struct selected_partition *sp; +#endif struct disk_part_free_space space; struct disk_partitions *ps = NULL; - struct selected_partition *sp; part_id pno, new_part_id; +#ifndef NO_CLONES normalize_clones(&wanted->infos, &wanted->num); +#endif infos = calloc(wanted->num, sizeof(*infos)); if (infos == NULL) { @@ -1329,6 +1349,7 @@ apply_settings_to_partitions(struct pm_d continue; if (want->flags & (PUIFLG_JUST_MOUNTPOINT|PUIFLG_IS_OUTER)) continue; +#ifndef NO_CLONES if ((want->flags & PUIFLG_CLONE_PARTS) && want->clone_src != NULL && want->clone_ndx < want->clone_src->num_sel) { @@ -1358,6 +1379,9 @@ apply_settings_to_partitions(struct pm_d new_part_id = wanted->parts->pscheme->add_partition( wanted->parts, &infos[i], NULL); } else { +#else + { +#endif if (want->size <= 0) continue; size_t cnt = wanted->parts->pscheme->get_free_spaces( Index: src/usr.sbin/sysinst/defs.h diff -u src/usr.sbin/sysinst/defs.h:1.46 src/usr.sbin/sysinst/defs.h:1.47 --- src/usr.sbin/sysinst/defs.h:1.46 Tue Nov 12 16:33:14 2019 +++ src/usr.sbin/sysinst/defs.h Wed Nov 13 18:57:26 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: defs.h,v 1.46 2019/11/12 16:33:14 martin Exp $ */ +/* $NetBSD: defs.h,v 1.47 2019/11/13 18:57:26 martin Exp $ */ /* * Copyright 1997 Piermont Information Systems Inc. @@ -283,6 +283,7 @@ struct part_usage_info { unsigned int instflags; /* installer handling flags */ uint fs_type, fs_version; /* e.g. FS_LFS, or FS_BSDFS, * version = 2 for FFSv2 */ +#ifndef NO_CLONES /* * Only != NULL when PUIFLG_CLONE_PARTS is set, describes the * source partitions to clone here. @@ -294,6 +295,7 @@ struct part_usage_info { * (>= 0 && <= clone_src->num_sel, or all of them if clone_ndx = ~0U. */ size_t clone_ndx; +#endif }; /* @@ -619,6 +621,8 @@ bool is_cdrom_device(const char *dev, bo bool is_bootable_device(const char *dev); bool is_partitionable_device(const char *dev); bool convert_scheme(struct pm_devs *p, bool is_boot_drive, const char **err_msg); + +#ifndef NO_CLONES /* a single partition selected for cloning (etc) */ struct selected_partition { struct disk_partitions *parts; @@ -643,6 +647,7 @@ struct clone_target_menu_data { int clone_target_select(menudesc *m, void *arg); bool clone_partition_data(struct disk_partitions *dest_parts, part_id did, struct disk_partitions *src_parts, part_id sid); +#endif struct menudesc; void disp_cur_fspart(int, int); Index: src/usr.sbin/sysinst/disks.c diff -u src/usr.sbin/sysinst/disks.c:1.55 src/usr.sbin/sysinst/disks.c:1.56 --- src/usr.sbin/sysinst/disks.c:1.55 Tue Nov 12 16:33:14 2019 +++ src/usr.sbin/sysinst/disks.c Wed Nov 13 18:57:26 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: disks.c,v 1.55 2019/11/12 16:33:14 martin Exp $ */ +/* $NetBSD: disks.c,v 1.56 2019/11/13 18:57:26 martin Exp $ */ /* * Copyright 1997 Piermont Information Systems Inc. @@ -2046,6 +2046,7 @@ get_dkwedges(struct dkwedge_info **dkw, return dkwl.dkwl_nwedges; } +#ifndef NO_CLONES /* * Helper structures used in the partition select menu */ @@ -2514,3 +2515,5 @@ clone_partition_data(struct disk_partiti "progress -f %s -b 1m dd bs=1m of=%s", src_dev, target_dev) == 0; } +#endif + Index: src/usr.sbin/sysinst/install.c diff -u src/usr.sbin/sysinst/install.c:1.12 src/usr.sbin/sysinst/install.c:1.13 --- src/usr.sbin/sysinst/install.c:1.12 Tue Nov 12 16:33:14 2019 +++ src/usr.sbin/sysinst/install.c Wed Nov 13 18:57:26 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: install.c,v 1.12 2019/11/12 16:33:14 martin Exp $ */ +/* $NetBSD: install.c,v 1.13 2019/11/13 18:57:26 martin Exp $ */ /* * Copyright 1997 Piermont Information Systems Inc. @@ -50,7 +50,9 @@ static bool write_all_parts(struct install_partition_desc *install) { struct disk_partitions **allparts, *parts; +#ifndef NO_CLONES struct selected_partition *src; +#endif size_t num_parts, i, j; bool found, res; @@ -100,6 +102,7 @@ write_all_parts(struct install_partition /* phase 3: now we may have a first chance to enable swap space */ set_swap_if_low_ram(install); +#ifndef NO_CLONES /* phase 4: copy any cloned partitions data (if requested) */ for (i = 0; i < install->num; i++) { if ((install->infos[i].flags & PUIFLG_CLONE_PARTS) == 0 @@ -112,6 +115,7 @@ write_all_parts(struct install_partition install->infos[i].cur_part_id, src->parts, src->id); } +#endif /* phase 5: post disklabel (used for updating boot loaders) */ for (i = 0; i < num_parts; i++) { Index: src/usr.sbin/sysinst/label.c diff -u src/usr.sbin/sysinst/label.c:1.13 src/usr.sbin/sysinst/label.c:1.14 --- src/usr.sbin/sysinst/label.c:1.13 Tue Nov 12 16:33:14 2019 +++ src/usr.sbin/sysinst/label.c Wed Nov 13 18:57:26 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: label.c,v 1.13 2019/11/12 16:33:14 martin Exp $ */ +/* $NetBSD: label.c,v 1.14 2019/11/13 18:57:26 martin Exp $ */ /* * Copyright 1997 Jonathan Stone @@ -36,7 +36,7 @@ #include <sys/cdefs.h> #if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: label.c,v 1.13 2019/11/12 16:33:14 martin Exp $"); +__RCSID("$NetBSD: label.c,v 1.14 2019/11/13 18:57:26 martin Exp $"); #endif #include <sys/types.h> @@ -1187,12 +1187,15 @@ fmt_fspart_row(menudesc *m, int ptn, voi static const char *Yes; char flag_str[MENUSTRSIZE], *fp; unsigned inst_flags; +#ifndef NO_CLONES size_t clone_cnt; +#endif bool with_inst_flag = pset->parts->parent == NULL; if (Yes == NULL) Yes = msg_string(MSG_Yes); +#ifndef NO_CLONES if ((pset->infos[ptn].flags & PUIFLG_CLONE_PARTS) && pset->infos[ptn].cur_part_id == NO_PART) { psize = pset->infos[ptn].size / sizemult; @@ -1220,6 +1223,7 @@ fmt_fspart_row(menudesc *m, int ptn, voi m->opts[ptn].opt_flags &= ~OPT_IGNORE; return; } +#endif if (!real_partition(pset, ptn)) return; @@ -1296,6 +1300,7 @@ fmt_fspart_row(menudesc *m, int ptn, voi info.last_mounted[0] ? info.last_mounted : ""); } +#ifndef NO_CLONES static int part_ext_clone(menudesc *m, void *arg) { @@ -1442,6 +1447,7 @@ err: free_selected_partitions(&selected); return 0; } +#endif static int edit_fspart_pack(menudesc *m, void *arg) @@ -1594,8 +1600,13 @@ edit_and_check_label(struct pm_devs *p, pset->parts->pscheme->get_disk_pack_name != NULL && pset->parts->pscheme->set_disk_pack_name != NULL; +#ifdef NO_CLONES +#define C_M_ITEMS 0 +#else +#define C_M_ITEMS 1 +#endif pset->menu_opts = calloc(pset->parts->num_part - +4+may_add+may_edit_pack, + +3+C_M_ITEMS+may_add+may_edit_pack, sizeof *pset->menu_opts); if (pset->menu_opts == NULL) return 0; @@ -1632,10 +1643,12 @@ edit_and_check_label(struct pm_devs *p, op++; } +#ifndef NO_CLONES /* add a clone-from-elsewhere option */ op->opt_name = MSG_clone_from_elsewhere; op->opt_action = part_ext_clone; op++; +#endif /* and abort option */ op->opt_name = MSG_cancel; @@ -1643,7 +1656,7 @@ edit_and_check_label(struct pm_devs *p, op->opt_action = edit_fspart_abort; op++; cnt = op - pset->menu_opts; - assert(cnt == pset->parts->num_part+4+may_add+may_edit_pack); + assert(cnt == pset->parts->num_part+3+C_M_ITEMS+may_add+may_edit_pack); pset->menu = new_menu(fspart_title, pset->menu_opts, cnt, 0, -1, 0, 74, Index: src/usr.sbin/sysinst/part_edit.c diff -u src/usr.sbin/sysinst/part_edit.c:1.11 src/usr.sbin/sysinst/part_edit.c:1.12 --- src/usr.sbin/sysinst/part_edit.c:1.11 Tue Nov 12 16:33:14 2019 +++ src/usr.sbin/sysinst/part_edit.c Wed Nov 13 18:57:26 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: part_edit.c,v 1.11 2019/11/12 16:33:14 martin Exp $ */ +/* $NetBSD: part_edit.c,v 1.12 2019/11/13 18:57:26 martin Exp $ */ /* * Copyright (c) 2019 The NetBSD Foundation, Inc. @@ -57,14 +57,18 @@ struct part_edit_info { bool num_changed; /* number of partitions has changed */ }; +#ifndef NO_CLONES struct single_clone_data { struct selected_partitions clone_src; part_id *clone_ids; /* partition IDs in target */ }; +#endif struct outer_parts_data { struct arg_rv av; +#ifndef NO_CLONES struct single_clone_data *clones; size_t num_clone_entries; +#endif }; static menu_ent *part_menu_opts; /* the currently edited partitions */ @@ -445,6 +449,7 @@ edit_part_entry(menudesc *m, void *arg) return 0; } +#ifndef NO_CLONES static int add_part_clone(menudesc *menu, void *arg) { @@ -553,7 +558,7 @@ err: free_selected_partitions(&selected); return -1; } - +#endif static int add_part_entry(menudesc *m, void *arg) @@ -814,7 +819,10 @@ outer_fill_part_menu_opts(const struct d bool may_add; may_add = parts->pscheme->can_add_partition(parts); - num_opts = 4 + parts->num_part; + num_opts = 3 + parts->num_part; +#ifndef NO_CLONES + num_opts++; +#endif if (parts->num_part == 0) num_opts++; if (may_add) @@ -852,10 +860,12 @@ outer_fill_part_menu_opts(const struct d op++; } +#ifndef NO_CLONES /* and a partition cloner */ op->opt_name = MSG_clone_from_elsewhere; op->opt_action = add_part_clone; op++; +#endif /* and unit changer */ op->opt_name = MSG_askunits; @@ -1158,7 +1168,10 @@ ask_outer_partsizes(struct disk_partitio { int j; int part_menu; - size_t num_opts, i, ci; + size_t num_opts; +#ifndef NO_CLONES + size_t i, ci; +#endif struct outer_parts_data data; part_menu_opts = outer_fill_part_menu_opts(parts, &num_opts); @@ -1197,6 +1210,7 @@ ask_outer_partsizes(struct disk_partitio break; } +#ifndef NO_CLONES /* handle cloned partitions content copies now */ for (i = 0; i < data.num_clone_entries; i++) { for (ci = 0; ci < data.clones[i].clone_src.num_sel; ci++) { @@ -1215,6 +1229,7 @@ ask_outer_partsizes(struct disk_partitio free_selected_partitions(&data.clones[i].clone_src); free(data.clones); } +#endif free_menu(part_menu); free(part_menu_opts); Index: src/usr.sbin/sysinst/util.c diff -u src/usr.sbin/sysinst/util.c:1.36 src/usr.sbin/sysinst/util.c:1.37 --- src/usr.sbin/sysinst/util.c:1.36 Tue Nov 12 18:04:37 2019 +++ src/usr.sbin/sysinst/util.c Wed Nov 13 18:57:26 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: util.c,v 1.36 2019/11/12 18:04:37 martin Exp $ */ +/* $NetBSD: util.c,v 1.37 2019/11/13 18:57:26 martin Exp $ */ /* * Copyright 1997 Piermont Information Systems Inc. @@ -2100,6 +2100,7 @@ free_usage_set(struct partition_usage_se void free_install_desc(struct install_partition_desc *install) { +#ifndef NO_CLONES size_t i, j; for (i = 0; i < install->num; i++) { @@ -2112,6 +2113,7 @@ free_install_desc(struct install_partiti if (install->infos[j].clone_src == src) install->infos[j].clone_src = NULL; } +#endif free(install->infos); }