summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/echo.c17
-rw-r--r--src/printf.c18
-rw-r--r--src/test.c27
3 files changed, 47 insertions, 15 deletions
diff --git a/src/echo.c b/src/echo.c
index c4b7ca939..91cce86d6 100644
--- a/src/echo.c
+++ b/src/echo.c
@@ -124,9 +124,20 @@ main (int argc, char **argv)
atexit (close_stdout);
- if (allow_options)
- parse_long_options (argc, argv, PROGRAM_NAME, PACKAGE_NAME, Version,
- usage, AUTHORS, (char const *) NULL);
+ /* We directly parse options, rather than use parse_long_options, in
+ order to avoid accepting abbreviations. */
+ if (allow_options && argc == 2)
+ {
+ if (STREQ (argv[1], "--help"))
+ usage (EXIT_SUCCESS);
+
+ if (STREQ (argv[1], "--version"))
+ {
+ version_etc (stdout, PROGRAM_NAME, PACKAGE_NAME, Version, AUTHORS,
+ (char *) NULL);
+ exit (EXIT_SUCCESS);
+ }
+ }
--argc;
++argv;
diff --git a/src/printf.c b/src/printf.c
index c50995183..63351f0e3 100644
--- a/src/printf.c
+++ b/src/printf.c
@@ -1,5 +1,5 @@
/* printf - format and print data
- Copyright (C) 1990-2008 Free Software Foundation, Inc.
+ Copyright (C) 1990-2009 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -645,8 +645,20 @@ main (int argc, char **argv)
posixly_correct = (getenv ("POSIXLY_CORRECT") != NULL);
- parse_long_options (argc, argv, PROGRAM_NAME, PACKAGE_NAME, Version,
- usage, AUTHORS, (char const *) NULL);
+ /* We directly parse options, rather than use parse_long_options, in
+ order to avoid accepting abbreviations. */
+ if (argc == 2)
+ {
+ if (STREQ (argv[1], "--help"))
+ usage (EXIT_SUCCESS);
+
+ if (STREQ (argv[1], "--version"))
+ {
+ version_etc (stdout, PROGRAM_NAME, PACKAGE_NAME, Version, AUTHORS,
+ (char *) NULL);
+ exit (EXIT_SUCCESS);
+ }
+ }
/* The above handles --help and --version.
Since there is no other invocation of getopt, handle `--' here. */
diff --git a/src/test.c b/src/test.c
index 14d20fd27..c56ab9e3c 100644
--- a/src/test.c
+++ b/src/test.c
@@ -2,7 +2,7 @@
/* Modified to run with the GNU shell by bfox. */
-/* Copyright (C) 1987-2005, 2007-2008 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2005, 2007-2009 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -819,16 +819,25 @@ main (int margc, char **margv)
if (LBRACKET)
{
/* Recognize --help or --version, but only when invoked in the
- "[" form, and when the last argument is not "]". POSIX
- allows "[ --help" and "[ --version" to have the usual GNU
- behavior, but it requires "test --help" and "test --version"
- to exit silently with status 0. */
- if (margc < 2 || !STREQ (margv[margc - 1], "]"))
+ "[" form, when the last argument is not "]". Use direct
+ parsing, rather than parse_long_options, to avoid accepting
+ abbreviations. POSIX allows "[ --help" and "[ --version" to
+ have the usual GNU behavior, but it requires "test --help"
+ and "test --version" to exit silently with status 0. */
+ if (margc == 2)
{
- parse_long_options (margc, margv, PROGRAM_NAME, PACKAGE_NAME, Version,
- usage, AUTHORS, (char const *) NULL);
- test_syntax_error (_("missing `]'"), NULL);
+ if (STREQ (margv[1], "--help"))
+ usage (EXIT_SUCCESS);
+
+ if (STREQ (margv[1], "--version"))
+ {
+ version_etc (stdout, PROGRAM_NAME, PACKAGE_NAME, Version, AUTHORS,
+ (char *) NULL);
+ test_exit (EXIT_SUCCESS);
+ }
}
+ if (margc < 2 || !STREQ (margv[margc - 1], "]"))
+ test_syntax_error (_("missing `]'"), NULL);
--margc;
}