From 96ab7da385302856ba4be4d8ce71e755ad4278c7 Mon Sep 17 00:00:00 2001 From: Garrett Wollman Date: Mon, 22 Apr 2002 21:23:09 +0000 Subject: [PATCH] Provide an environment variabloe, EXPR_COMPAT, which disables option parsing for compatibility with old implementations. --- bin/expr/expr.1 | 18 ++++++++++++++++-- bin/expr/expr.y | 19 +++++++++++-------- 2 files changed, 27 insertions(+), 10 deletions(-) diff --git a/bin/expr/expr.1 b/bin/expr/expr.1 index df4c70b9118d..4669000397a4 100644 --- a/bin/expr/expr.1 +++ b/bin/expr/expr.1 @@ -111,7 +111,9 @@ otherwise 0. .Pp Parentheses are used for grouping in the usual manner. .Pp -This version of +Unless the +.Ev EXPR_COMPAT +variable is defined in the process environment, this version of .Nm adheres to the .Tn POSIX @@ -141,6 +143,15 @@ The syntax of the command in general is historic and inconvenient. New applications are advised to use shell arithmetic rather than .Nm . +.Sh ENVIRONMENT +.Bl -tag -compact -width EXPR_COMPAT +.It Ev EXPR_COMPAT +If set, +.Nm +will emulate historic +.Nm +implementations which did not obey the Utility Syntax Guidelines. +.El .Sh EXAMPLES .Bl -bullet .It @@ -216,7 +227,10 @@ the expression is invalid. The .Nm utility conforms to -.St -p1003.1-2001 . +.St -p1003.1-2001 , +provided that the +.Ev EXPR_COMPAT +environment variable is not defined. .Tn POSIX does not specify whether arithmetic overflow is detected, nor does it specify the possible range of integer arguments to diff --git a/bin/expr/expr.y b/bin/expr/expr.y index bc40bf3e61e0..3026f52bb6d8 100644 --- a/bin/expr/expr.y +++ b/bin/expr/expr.y @@ -270,14 +270,17 @@ main(int argc, char *argv[]) int c; setlocale (LC_ALL, ""); - while ((c = getopt(argc, argv, "")) != -1) - switch (c) { - default: - fprintf(stderr, "usage: expr [--] expression\n"); - exit(ERR_EXIT); - } - - av = argv + optind; + if (getenv("EXPR_COMPAT") != NULL) { + av = argv + 1; + } else { + while ((c = getopt(argc, argv, "")) != -1) + switch (c) { + default: + fprintf(stderr,"usage: expr [--] expression\n"); + exit(ERR_EXIT); + } + av = argv + optind; + } yyparse();