Mon Mar 9 17:10:31 2020 UTC ()
The (unused) md_pre_disklabel() function needs to return success, otherwise
all installations will be aborted.


(martin)
diff -r1.7 -r1.8 src/usr.sbin/sysinst/arch/alpha/md.c

cvs diff -r1.7 -r1.8 src/usr.sbin/sysinst/arch/alpha/md.c (switch to unified diff)

--- src/usr.sbin/sysinst/arch/alpha/md.c 2019/12/15 13:39:24 1.7
+++ src/usr.sbin/sysinst/arch/alpha/md.c 2020/03/09 17:10:31 1.8
@@ -1,230 +1,230 @@ @@ -1,230 +1,230 @@
1/* $NetBSD: md.c,v 1.7 2019/12/15 13:39:24 martin Exp $ */ 1/* $NetBSD: md.c,v 1.8 2020/03/09 17:10:31 martin Exp $ */
2 2
3/* 3/*
4 * Copyright 1997 Piermont Information Systems Inc. 4 * Copyright 1997 Piermont Information Systems Inc.
5 * All rights reserved. 5 * All rights reserved.
6 * 6 *
7 * Based on code written by Philip A. Nelson for Piermont Information 7 * Based on code written by Philip A. Nelson for Piermont Information
8 * Systems Inc. 8 * Systems Inc.
9 * 9 *
10 * Redistribution and use in source and binary forms, with or without 10 * Redistribution and use in source and binary forms, with or without
11 * modification, are permitted provided that the following conditions 11 * modification, are permitted provided that the following conditions
12 * are met: 12 * are met:
13 * 1. Redistributions of source code must retain the above copyright 13 * 1. Redistributions of source code must retain the above copyright
14 * notice, this list of conditions and the following disclaimer. 14 * notice, this list of conditions and the following disclaimer.
15 * 2. Redistributions in binary form must reproduce the above copyright 15 * 2. Redistributions in binary form must reproduce the above copyright
16 * notice, this list of conditions and the following disclaimer in the 16 * notice, this list of conditions and the following disclaimer in the
17 * documentation and/or other materials provided with the distribution. 17 * documentation and/or other materials provided with the distribution.
18 * 3. The name of Piermont Information Systems Inc. may not be used to endorse 18 * 3. The name of Piermont Information Systems Inc. may not be used to endorse
19 * or promote products derived from this software without specific prior 19 * or promote products derived from this software without specific prior
20 * written permission. 20 * written permission.
21 * 21 *
22 * THIS SOFTWARE IS PROVIDED BY PIERMONT INFORMATION SYSTEMS INC. ``AS IS'' 22 * THIS SOFTWARE IS PROVIDED BY PIERMONT INFORMATION SYSTEMS INC. ``AS IS''
23 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 23 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 24 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25 * ARE DISCLAIMED. IN NO EVENT SHALL PIERMONT INFORMATION SYSTEMS INC. BE 25 * ARE DISCLAIMED. IN NO EVENT SHALL PIERMONT INFORMATION SYSTEMS INC. BE
26 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 26 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
27 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 27 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
28 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 28 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
29 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 29 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
30 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 30 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
31 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 31 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
32 * THE POSSIBILITY OF SUCH DAMAGE. 32 * THE POSSIBILITY OF SUCH DAMAGE.
33 */ 33 */
34 34
35/* md.c -- alpha machine specific routines */ 35/* md.c -- alpha machine specific routines */
36 36
37#include <sys/types.h> 37#include <sys/types.h>
38#include <sys/ioctl.h> 38#include <sys/ioctl.h>
39#include <sys/param.h> 39#include <sys/param.h>
40#include <stdio.h> 40#include <stdio.h>
41#include <curses.h> 41#include <curses.h>
42#include <unistd.h> 42#include <unistd.h>
43#include <fcntl.h> 43#include <fcntl.h>
44#include <util.h> 44#include <util.h>
45 45
46#include "defs.h" 46#include "defs.h"
47#include "md.h" 47#include "md.h"
48#include "msg_defs.h" 48#include "msg_defs.h"
49#include "menu_defs.h" 49#include "menu_defs.h"
50 50
51void 51void
52md_init(void) 52md_init(void)
53{ 53{
54} 54}
55 55
56void 56void
57md_init_set_status(int flags) 57md_init_set_status(int flags)
58{ 58{
59 (void)flags; 59 (void)flags;
60} 60}
61 61
62bool 62bool
63md_get_info(struct install_partition_desc *install) 63md_get_info(struct install_partition_desc *install)
64{ 64{
65 struct disklabel disklabel; 65 struct disklabel disklabel;
66 int fd; 66 int fd;
67 char dev_name[100]; 67 char dev_name[100];
68 68
69 snprintf (dev_name, 100, "/dev/r%s%c", pm->diskdev, 'a' + getrawpartition()); 69 snprintf (dev_name, 100, "/dev/r%s%c", pm->diskdev, 'a' + getrawpartition());
70 70
71 fd = open (dev_name, O_RDONLY, 0); 71 fd = open (dev_name, O_RDONLY, 0);
72 if (fd < 0) { 72 if (fd < 0) {
73 endwin(); 73 endwin();
74 fprintf (stderr, "Can't open %s\n", dev_name); 74 fprintf (stderr, "Can't open %s\n", dev_name);
75 exit(1); 75 exit(1);
76 } 76 }
77 if (ioctl(fd, DIOCGDINFO, &disklabel) == -1) { 77 if (ioctl(fd, DIOCGDINFO, &disklabel) == -1) {
78 endwin(); 78 endwin();
79 fprintf (stderr, "Can't read disklabel on %s.\n", dev_name); 79 fprintf (stderr, "Can't read disklabel on %s.\n", dev_name);
80 close(fd); 80 close(fd);
81 exit(1); 81 exit(1);
82 } 82 }
83 close(fd); 83 close(fd);
84 84
85 pm->dlcyl = disklabel.d_ncylinders; 85 pm->dlcyl = disklabel.d_ncylinders;
86 pm->dlhead = disklabel.d_ntracks; 86 pm->dlhead = disklabel.d_ntracks;
87 pm->sectorsize = disklabel.d_secsize; 87 pm->sectorsize = disklabel.d_secsize;
88 pm->dlsize = disklabel.d_secperunit; 88 pm->dlsize = disklabel.d_secperunit;
89 89
90 /* 90 /*
91 * Tru64 UNIX's disklabel is the same format as BSD disklabel, 91 * Tru64 UNIX's disklabel is the same format as BSD disklabel,
92 * and it seems Tru64 stores incorrect geometry values in 92 * and it seems Tru64 stores incorrect geometry values in
93 * d_nsectors (sectors/track) and d_secpercyl (sectors/cylinder). 93 * d_nsectors (sectors/track) and d_secpercyl (sectors/cylinder).
94 * d_secperunit seems always reliable so use it to get 94 * d_secperunit seems always reliable so use it to get
95 * dlsec (sectors/track) and dlcylsize (sectors/cylinder) values. 95 * dlsec (sectors/track) and dlcylsize (sectors/cylinder) values.
96 * See PR/48697 for details. 96 * See PR/48697 for details.
97 */ 97 */
98 pm->dlsec = pm->dlsize / (pm->dlhead * pm->dlcyl); 98 pm->dlsec = pm->dlsize / (pm->dlhead * pm->dlcyl);
99 pm->dlcylsize = pm->dlsec * pm->dlhead; 99 pm->dlcylsize = pm->dlsec * pm->dlhead;
100 100
101 return true; 101 return true;
102} 102}
103 103
104/* 104/*
105 * md back-end code for menu-driven BSD disklabel editor. 105 * md back-end code for menu-driven BSD disklabel editor.
106 */ 106 */
107bool 107bool
108md_make_bsd_partitions(struct install_partition_desc *install) 108md_make_bsd_partitions(struct install_partition_desc *install)
109{ 109{
110 return make_bsd_partitions(install); 110 return make_bsd_partitions(install);
111} 111}
112 112
113/* 113/*
114 * any additional partition validation 114 * any additional partition validation
115 */ 115 */
116bool 116bool
117md_check_partitions(struct install_partition_desc *install) 117md_check_partitions(struct install_partition_desc *install)
118{ 118{
119 return 1; 119 return 1;
120} 120}
121 121
122/* 122/*
123 * hook called before writing new disklabel. 123 * hook called before writing new disklabel.
124 */ 124 */
125bool 125bool
126md_pre_disklabel(struct install_partition_desc *install, 126md_pre_disklabel(struct install_partition_desc *install,
127 struct disk_partitions *part) 127 struct disk_partitions *part)
128{ 128{
129 return 0; 129 return true;
130} 130}
131 131
132/* 132/*
133 * hook called after writing disklabel to new target disk. 133 * hook called after writing disklabel to new target disk.
134 */ 134 */
135bool 135bool
136md_post_disklabel(struct install_partition_desc *install, 136md_post_disklabel(struct install_partition_desc *install,
137 struct disk_partitions *part) 137 struct disk_partitions *part)
138{ 138{
139 return true; 139 return true;
140} 140}
141 141
142/* 142/*
143 * hook called after upgrade() or install() has finished setting 143 * hook called after upgrade() or install() has finished setting
144 * up the target disk but immediately before the user is given the 144 * up the target disk but immediately before the user is given the
145 * ``disks are now set up'' message. 145 * ``disks are now set up'' message.
146 * 146 *
147 * On the Alpha, we use this opportunity to install the boot blocks. 147 * On the Alpha, we use this opportunity to install the boot blocks.
148 */ 148 */
149int 149int
150md_post_newfs(struct install_partition_desc *install) 150md_post_newfs(struct install_partition_desc *install)
151{ 151{
152 char *bootxx; 152 char *bootxx;
153 int error; 153 int error;
154 154
155 msg_fmt_display(MSG_dobootblks, "%s", pm->diskdev); 155 msg_fmt_display(MSG_dobootblks, "%s", pm->diskdev);
156 cp_to_target("/usr/mdec/boot", "/boot"); 156 cp_to_target("/usr/mdec/boot", "/boot");
157 bootxx = bootxx_name(install); 157 bootxx = bootxx_name(install);
158 if (bootxx != NULL) { 158 if (bootxx != NULL) {
159 error = run_program(RUN_DISPLAY | RUN_NO_CLEAR, 159 error = run_program(RUN_DISPLAY | RUN_NO_CLEAR,
160 "/usr/sbin/installboot /dev/r%sc %s", pm->diskdev, bootxx); 160 "/usr/sbin/installboot /dev/r%sc %s", pm->diskdev, bootxx);
161 free(bootxx); 161 free(bootxx);
162 } else 162 } else
163 error = -1; 163 error = -1;
164 164
165 if (error != 0) 165 if (error != 0)
166 process_menu(MENU_ok, 166 process_menu(MENU_ok,
167 __UNCONST("Warning: disk is probably not bootable")); 167 __UNCONST("Warning: disk is probably not bootable"));
168 168
169 wclear(stdscr); 169 wclear(stdscr);
170 touchwin(stdscr); 170 touchwin(stdscr);
171 clearok(stdscr, 1); 171 clearok(stdscr, 1);
172 refresh(); 172 refresh();
173 173
174 return 0; 174 return 0;
175} 175}
176 176
177int 177int
178md_post_extract(struct install_partition_desc *install) 178md_post_extract(struct install_partition_desc *install)
179{ 179{
180 return 0; 180 return 0;
181} 181}
182 182
183void 183void
184md_cleanup_install(struct install_partition_desc *install) 184md_cleanup_install(struct install_partition_desc *install)
185{ 185{
186#ifndef DEBUG 186#ifndef DEBUG
187 enable_rc_conf(); 187 enable_rc_conf();
188#endif 188#endif
189} 189}
190 190
191int 191int
192md_pre_update(struct install_partition_desc *install) 192md_pre_update(struct install_partition_desc *install)
193{ 193{
194 return 1; 194 return 1;
195} 195}
196 196
197/* Upgrade support */ 197/* Upgrade support */
198int 198int
199md_update(struct install_partition_desc *install) 199md_update(struct install_partition_desc *install)
200{ 200{
201 md_post_newfs(install); 201 md_post_newfs(install);
202 return 1; 202 return 1;
203} 203}
204 204
205int 205int
206md_pre_mount(struct install_partition_desc *install, size_t ndx) 206md_pre_mount(struct install_partition_desc *install, size_t ndx)
207{ 207{
208 return 0; 208 return 0;
209} 209}
210 210
211#ifdef HAVE_GPT 211#ifdef HAVE_GPT
212/* 212/*
213 * New GPT partitions have been written, update bootloader or remember 213 * New GPT partitions have been written, update bootloader or remember
214 * data untill needed in md_post_newfs 214 * data untill needed in md_post_newfs
215 */ 215 */
216bool 216bool
217md_gpt_post_write(struct disk_partitions *parts, part_id root_id, 217md_gpt_post_write(struct disk_partitions *parts, part_id root_id,
218 bool root_is_new, part_id efi_id, bool efi_is_new) 218 bool root_is_new, part_id efi_id, bool efi_is_new)
219{ 219{
220 220
221 return true; 221 return true;
222} 222}
223#endif 223#endif
224 224
225bool 225bool
226md_parts_use_wholedisk(struct disk_partitions *parts) 226md_parts_use_wholedisk(struct disk_partitions *parts)
227{ 227{
228 return parts_use_wholedisk(parts, 0, NULL); 228 return parts_use_wholedisk(parts, 0, NULL);
229} 229}
230 230