Patch.

On Tue, Jan 20, 2009 at 02:02:28PM +0100, Joerg Sonnenberger wrote:
> On Mon, Jan 19, 2009 at 11:30:55PM -0500, Joe Talbott wrote:
> > +   while ((ch = getopt(argc, argv, "-")) != -1) {
> 
> The use of getopt here is wrong. Besides, using getopt is taking a
> sledgehammer to crack a nut. Attached is the corresponding fix for
> NetBSD, the explicit check for having at least one argument is better
> anyway.
> 
> Joerg
Index: expr.y
===================================================================
RCS file: /home/joerg/repo/netbsd/src/bin/expr/expr.y,v
retrieving revision 1.34
diff -u -p -r1.34 expr.y
--- expr.y      30 Apr 2008 13:39:13 -0000      1.34
+++ expr.y      20 Jan 2009 12:56:52 -0000
@@ -440,19 +440,25 @@ yyerror(const char *fmt, ...)
        va_end(arg);
 }
 
+static void
+usage(void)
+{
+       (void)fprintf(stderr, "usage: %s expression\n", getprogname());
+       exit(2);
+}
+
 int
 main(int argc, const char * const *argv)
 {
        setprogname(argv[0]);
        (void)setlocale(LC_ALL, "");
 
-       if (argc == 1) {
-               (void)fprintf(stderr, "usage: %s expression\n",
-                   getprogname());
-               exit(2);
-       }
-
-       av = argv + 1;
+       if (argc > 1 && strcmp(argv[1], "--"))
+               av = argv + 1;
+       else if (argc > 2)
+               av = argv + 2;
+       else
+               usage();
 
        exit(yyparse());
        /* NOTREACHED */

Reply via email to