On 06/27/2018 02:11 AM, Pádraig Brady wrote:
On OpenBSD 6.2/amd64, few test failures:
FAIL: tests/misc/env
seems like "env -" does not work. I will investigate further
(perhaps I've broken something with the changes to the command-line
processing?).
$ ./src/env -
env: invalid option -- '-'
Looks like the hack of searching for '-' option
only works on some getopt implementations.
No big surprise there - I was actually impressed that it worked for
glibc when I first proposed the hack. So it looks like BSD has an
(undocumented?) extension that if '-' appears in shortopts, then it
changes how a lone '-' is parsed?
We _could_ replace getopt() on BSDs to the gnulib version to ensure we
get glibc behavior, no matter what; but that feels heavy-handed when we
are already abusing an undocumented non-standard corner of the API
merely for better diagnosis of poor usage.
-static char const shortopts[] = "+C:iS:u:v0 \t-";
+static char const shortopts[] = "+C:iS:u:v0 \t";
static struct option const longopts[] =
{
@@ -566,14 +566,12 @@ main (int argc, char **argv)
break;
case ' ':
case '\t':
- case '-':
/* Space,tab,dash are undocumented options. Attempt to detect
incorrect shebang usage with extraneous space, e.g.:
#!/usr/bin/env -i command
The comment is now stale.
On the bright side, removing '-' still preserves the best usage of the
hack; after all, we added it to cover:
#!/bin/env -v -S
where the program is parsing "-v -S' as a single option, and space/tab
is indeed encountered as the next short option before the second '-'
character.
--
Eric Blake, Principal Software Engineer
Red Hat, Inc. +1-919-301-3266
Virtualization: qemu.org | libvirt.org