Date: Sat, 5 Jan 2002 00:32:25 -0800 From: Jos Backus <josb@cncdsl.com> To: freebsd-hackers@freebsd.org Subject: Bug in /bin/sh's handling of case ... esac? Message-ID: <20020105083247.GE90171@lizzy.bugworks.com>
next in thread | raw e-mail | index | archive | help
While working with the apache-2.0 source I encountered the following construct
in a config.status file, generated using autoconf 2.52:
lizzy:/usr/src/bin/sh# cat /tmp/esac
case "$foo" in
esac
lizzy:/usr/src/bin/sh# /bin/sh /tmp/esac
/tmp/esac: 3: Syntax error: end of file unexpected (expecting ")")
lizzy:/usr/src/bin/sh#
However, POSIX 1003.1 says this construct is valid:
The format for the case construct is as follows:
case word in
[(] pattern1) compound-list;;
[[(] pattern[ | pattern] ... ) compound-list;;] ...
[[(] pattern[ | pattern] ... ) compound-list]
esac
The ";;" is optional for the last compound-list.
so I am concluding that we erroneously flag this as an error. Fwiw, zsh and
bash accept this construct without complaining.
The following patch seems to fix the problem, but I have _no_ idea whether
this is the correct fix and what this breaks. Ideas, anyone?
--- parser.c Sat Jan 5 00:23:27 2002
+++ parser.c.new Sat Jan 5 00:23:05 2002
@@ -429,6 +429,8 @@
noaliases = 1; /* turn off alias expansion */
checkkwd = 2, readtoken();
do {
+ if (lasttoken == TESAC)
+ break;
*cpp = cp = (union node *)stalloc(sizeof (struct nclist));
cp->type = NCLIST;
app = &cp->nclist.pattern;
--
Jos Backus _/ _/_/_/ Santa Clara, CA
_/ _/ _/
_/ _/_/_/
_/ _/ _/ _/
josb@cncdsl.com _/_/ _/_/_/ use Std::Disclaimer;
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20020105083247.GE90171>
