From e04910c0a714c5beeb181349bcc3abe2fc8fa18e Mon Sep 17 00:00:00 2001 From: Jakob Kaivo Date: Tue, 6 Aug 2019 08:00:44 -0400 Subject: handle obsolete option syntax with diagnostic messages --- strings.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/strings.c b/strings.c index ee1ba45..4293f06 100644 --- a/strings.c +++ b/strings.c @@ -76,6 +76,35 @@ static int strings(const char *path, size_t number, char format) return 0; } +static void fixobsolete(int argc, char *argv[]) +{ + for (int i = 1; i < argc; i++) { + if (argv[i][0] != '-') { + return; + } + + if (!strcmp(argv[i], "--")) { + return; + } + + if (!strcmp(argv[i], "-")) { + fprintf(stderr, "strings: '-' is obsolete; use '-a'\n"); + argv[i] = "-a"; + } + + if (isdigit(argv[i][1])) { + fprintf(stderr, "strings: '-#' is obsolete; use '-n #'\n"); + char *opt = malloc(strlen(argv[i]) + 2); + if (opt == NULL) { + perror("strings"); + exit(1); + } + sprintf(opt, "-n %s", argv[i] + 1); + argv[i] = opt; + } + } +} + int main(int argc, char *argv[]) { setlocale(LC_ALL, ""); @@ -85,6 +114,7 @@ int main(int argc, char *argv[]) char format = 0; char *end; + fixobsolete(argc, argv); while ((c = getopt(argc, argv, "an:t:")) != -1) { switch (c) { case 'a': -- cgit v1.2.1