commit c3465169d316c7a08fe3d1d2dffc5a0bb72d189b from: Omar Polo date: Mon Feb 19 17:53:14 2024 UTC identity: don't use getopt() in main we can't portably reset it. commit - b45ef13d08286e9dfb77fdad14c845885535f0b7 commit + c3465169d316c7a08fe3d1d2dffc5a0bb72d189b blob - c4d1e1fad4add26b371a08609689fe243cdd6866 blob + 234fc31e30c9c0ee56f9ef045acdb1fbe2370a72 --- identity.c +++ identity.c @@ -112,23 +112,28 @@ int main(int argc, char **argv) { const struct cmd *cmd; - int ch; size_t i; - while ((ch = getopt(argc, argv, "")) != -1) { - switch (ch) { - default: - usage(); - } - } - argc -= optind; - argv += optind; - optind = 0; - optreset = 1; + /* + * Can't use portably getopt() since there's no cross-platform + * way of resetting it. + */ if (argc == 0) usage(); + argc--, argv++; + if (argc == 0) + usage(); + + if (!strcmp(*argv, "--")) + argc--, argv++; + else if (**argv == '-') + usage(); + + if (argc == 0) + usage(); + for (i = 0; i < nitems(cmds); ++i) { cmd = &cmds[i];