On Jun 02 07:16:52, dera...@openbsd.org wrote: > Your diff completely breaks a majority of the ways people use it.
Does that mean people mostly use the undocumented obsolete syntax that obsolete() keeps supported? > Jan Stary <h...@stare.cz> wrote: > > > # dump /home > > dump: option requires an argument -- h > > > > # dump /music > > dump: option requires an argument -- s > > > > # dump /media > > dump: option requires an argument -- d > > > > What? Before passing its options to getopt(), > > dump's main() processes them with obsolete(): > > > > Change set of key letters and ordered arguments > > into something getopt(3) will like. > > > > That results in the above. What obsolete options format > > is this trying to accomodate? The manpage doesn't say - > > the options it describes are perfectly getopt()-likable. > > Looking at the CVS log, this was already "obsolete" > > in the original 1995 import. Does anyone still use > > that undescribed obsolete syntax dump "supports"? > > > > The diff below simply removes the function. > > With the diff, dump does the right thing, > > i.e. just tries to dump the given fs to rst0. > > > > # dump /home > > DUMP: Date of this level 0 dump: Thu Jun 2 14:20:44 2022 > > DUMP: Date of last level 0 dump: the epoch > > DUMP: Dumping /dev/rsd0a (/home) to /dev/rst0 > > DUMP: mapping (Pass I) [regular files] > > DUMP: mapping (Pass II) [directories] > > DUMP: estimated 47580129 tape blocks on 1222.00 tape(s). > > DUMP: Cannot open output "/dev/rst0". > > > > Jan > > > > > > Index: main.c > > =================================================================== > > RCS file: /cvs/src/sbin/dump/main.c,v > > retrieving revision 1.62 > > diff -u -p -r1.62 main.c > > --- main.c 21 Jan 2021 00:16:36 -0000 1.62 > > +++ main.c 2 Jun 2022 12:23:56 -0000 > > @@ -99,7 +99,6 @@ struct disklabel lab; > > static int sblock_try[] = SBLOCKSEARCH; > > > > static long long numarg(char *, long long, long long); > > -static void obsolete(int *, char **[]); > > static void usage(void); > > > > int > > @@ -134,7 +133,6 @@ main(int argc, char *argv[]) > > if (argc < 2) > > usage(); > > > > - obsolete(&argc, &argv); > > while ((ch = getopt(argc, argv, "0123456789aB:b:cd:f:h:ns:ST:uWw")) != > > -1) > > switch (ch) { > > /* dump level */ > > @@ -700,80 +698,4 @@ getduid(char *path) > > } > > > > return (NULL); > > -} > > - > > -/* > > - * obsolete -- > > - * Change set of key letters and ordered arguments into something > > - * getopt(3) will like. > > - */ > > -static void > > -obsolete(int *argcp, char **argvp[]) > > -{ > > - int argc, flags; > > - char *ap, **argv, *flagsp, **nargv, *p; > > - size_t len; > > - > > - /* Setup. */ > > - argv = *argvp; > > - argc = *argcp; > > - > > - /* Return if no arguments or first argument has leading dash. */ > > - ap = argv[1]; > > - if (argc == 1 || *ap == '-') > > - return; > > - > > - /* Allocate space for new arguments. */ > > - if ((*argvp = nargv = calloc(argc + 1, sizeof(char *))) == NULL || > > - (p = flagsp = malloc(strlen(ap) + 2)) == NULL) > > - err(1, NULL); > > - > > - *nargv++ = *argv; > > - argv += 2; > > - > > - for (flags = 0; *ap; ++ap) { > > - switch (*ap) { > > - case 'B': > > - case 'b': > > - case 'd': > > - case 'f': > > - case 'h': > > - case 's': > > - case 'T': > > - if (*argv == NULL) { > > - warnx("option requires an argument -- %c", *ap); > > - usage(); > > - } > > - len = 2 + strlen(*argv) + 1; > > - if ((nargv[0] = malloc(len)) == NULL) > > - err(1, NULL); > > - nargv[0][0] = '-'; > > - nargv[0][1] = *ap; > > - (void)strlcpy(&nargv[0][2], *argv, len - 2); > > - ++argv; > > - ++nargv; > > - break; > > - default: > > - if (!flags) { > > - *p++ = '-'; > > - flags = 1; > > - } > > - *p++ = *ap; > > - break; > > - } > > - } > > - > > - /* Terminate flags, or toss the buffer we did not use. */ > > - if (flags) { > > - *p = '\0'; > > - *nargv++ = flagsp; > > - } else > > - free(flagsp); > > - > > - /* Copy remaining arguments. */ > > - while ((*nargv++ = *argv++)) > > - continue; > > - > > - /* Update argument count. */ > > - *argcp = nargv - *argvp - 1; > > } > > > >