On Thu, 18 Aug 2022 11:51:19 -0000, Klemens Nanni wrote: > I've checked all usage combination of flags and arguments, the new code > does what the new synopsis says.
I agree with the general direction but have one concern. See inline. - todd > Index: installboot.c > =================================================================== > RCS file: /cvs/src/usr.sbin/installboot/installboot.c,v > retrieving revision 1.14 > diff -u -p -r1.14 installboot.c > --- installboot.c 20 Jul 2021 14:51:56 -0000 1.14 > +++ installboot.c 18 Aug 2022 11:42:43 -0000 > @@ -31,17 +31,16 @@ int prepare; > int stages; > int verbose; > > -char *root = "/"; > +char *root; If you don't initalize root here, a NULL pointer will be used later when the -v option is not also used. You could also kill the useless strdup of optarg when the -r option is used. > char *stage1; > char *stage2; > > static __dead void > usage(void) > { > - extern char *__progname; > - > - fprintf(stderr, "usage: %s [-npv] [-r root] disk [stage1%s]\n", > - __progname, (stages >= 2) ? " [stage2]" : ""); > + fprintf(stderr, "usage:\t%1$s [-nv] [-r root] disk [stage1%2$s]\n" > + "\t%1$s [-nv] -p disk\n", > + getprogname(), (stages >= 2) ? " [stage2]" : ""); > > exit(1); > } > @@ -80,6 +79,8 @@ main(int argc, char **argv) > > if (argc < 1 || argc > stages + 1) > usage(); > + if (prepare && (root != NULL || argc > 1)) > + usage(); > > dev = argv[0]; > if (argc > 1) > @@ -87,9 +88,21 @@ main(int argc, char **argv) > if (argc > 2) > stage2 = argv[2]; > > + if ((devfd = opendev(dev, (nowrite ? O_RDONLY : O_RDWR), OPENDEV_PART, > + &realdev)) == -1) > + err(1, "open: %s", realdev); > + > + if (prepare) { > + md_prepareboot(devfd, realdev); > + return 0; > + } > + > /* Prefix stages with root, unless they were user supplied. */ > - if (verbose) > + if (verbose) { > + if (root == NULL) > + root = "/"; > fprintf(stderr, "Using %s as root\n", root); > + } > if (argc <= 1 && stage1 != NULL) { > stage1 = fileprefix(root, stage1); With your diff root may be NULL when calling fileprefix(). > if (stage1 == NULL) > @@ -101,10 +114,6 @@ main(int argc, char **argv) > exit(1); > } > > - if ((devfd = opendev(dev, (nowrite ? O_RDONLY : O_RDWR), OPENDEV_PART, > - &realdev)) == -1) > - err(1, "open: %s", realdev); > - > if (verbose) { > fprintf(stderr, "%s bootstrap on %s\n", > (nowrite ? "would install" : "installing"), realdev); > @@ -118,11 +127,6 @@ main(int argc, char **argv) > } > > md_loadboot(); > - > - if (prepare) { > - md_prepareboot(devfd, realdev); > - return 0; > - } > > #ifdef SOFTRAID > sr_installboot(devfd, dev); >