Re: [PATCH] build: avoid test failure on HPUX
Eric Blake <[email protected]> Fri, 15 Mar 2013 16:31:46 -0600
| Newsgroups | gmane.comp.gnu.m4.patches |
|---|---|
| Organization | Red Hat, Inc. |
| Message-ID | <[email protected]> |
On 03/13/2013 08:47 PM, Gary V. Vaughan wrote:
> Hi Eric,
>
> Thanks for working on this.
>
>>
>> * doc/m4.texi (Command line files): Skip tests on systems where it
>> is impossible to start with stdin/out closed.
>> Reported by Gary V. Vaughan.
>>
> Not quite, the test is not skipped with your patch applied as is:
>
> hppa11.31% /bin/cat <&- 2>/dev/null
> hppa11.31% echo $?
> 2
So the reopened stdin has properties that still make it unreadable. Oh
well.
> hppa11.11% /bin/cat <&- 2>/dev/null
> hppa11.11% echo $?
> 0
Are you sure that transcript is right? At any rate, all we are looking
for is some witness of whether the system reopens standard streams; it's
probably an all-or-none situation.
>
> And yet, per my original report:
>
> hppa11.31% echo | /bin/cat >&- 2>/dev/null
> hppa11.31% echo $?
> 0
> hppa11.11% echo | /bin/cat >&- 2>/dev/null
> hppa11.11% echo
> 1
Okay, then I'll use closed stdout as the witness, and push my modified
patch. Thanks for testing. In the meantime, I realized I have an
account on some HPUX machines (probably the same machines as you, now
that I recall who referred me access to those machines), and wrote a
little probe program to find out more:
#include <unistd.h>
int main(void) {
int ret = 0;
if (close(0))
ret |= 1;
if (close(1))
ret |= 2;
if (close(2))
ret |= 4;
return ret;
}
hppa11.11% ./foo; echo $?
0
hppa11.11% ./foo <&-; echo $?
1
hppa11.11% ./foo >&- 2>&-; echo $?
6
hppa11.23% ./foo; echo $?
0
hppa11.23% ./foo <&-; echo $?
0
hppa11.23% ./foo >&- 2>&-; echo $?
0
and another probe program:
#include <unistd.h>
#include <fcntl.h>
int main(void) {
int ret = 0;
int i;
i = fcntl(0, F_GETFL);
if (i >= 0) {
switch (i & O_ACCMODE) {
case O_RDONLY: ret |= 0001; break;
case O_WRONLY: ret |= 0002; break;
case O_RDWR: ret |= 0003; break;
}
}
i = fcntl(1, F_GETFL);
if (i >= 0) {
switch (i & O_ACCMODE) {
case O_RDONLY: ret |= 0010; break;
case O_WRONLY: ret |= 0020; break;
case O_RDWR: ret |= 0030; break;
}
}
i = fcntl(2, F_GETFL);
if (i >= 0) {
switch (i & O_ACCMODE) {
case O_RDONLY: ret |= 0100; break;
case O_WRONLY: ret |= 0200; break;
case O_RDWR: ret |= 0300; break;
}
}
return ret;
}
On Linux, where terminals are opened O_RDWR:
linux% ./foo; printf %o\\n $?
333
linux% ./foo </dev/null >/dev/null; printf %o\\n $?
321
linux% ./foo <&- >&-; printf %o\\n $?
300
and on HPUX:
hppa11.11% ./foo; printf %o\\n $?
333
hppa11.11% ./foo </dev/null >/dev/null; printf %o\\n $?
321
hppa11.11% ./foo <&- >&-; printf %o\\n $?
300
hppa11.23% ./foo; printf %o\\n $?
333
hppa11.23% ./foo </dev/null >/dev/null; printf %o\\n $?
321
hppa11.23% ./foo <&- >&-; printf %o\\n $?
322
Aha! it opens stdin as an O_WRONLY file, explaining why 'cat <&-' still
fails (it can't read an O_WRONLY file), but 'cat >&-' succeeds (an fd
was forced open).
> Taking into account the bizzare difference between stdin and stdout behaviour,
Not so bizarre once you understand my probes.
> this works for me:
>
> syscmd(`echo|cat >&- 2>/dev/null')ifelse(sysval, `0',
> `errprint(` skipping: system does not allow closing stdout
> ')m4exit(`77')')dnl
Yep, that's my plan.
> Of course this reveals some more gnulib testsuite failures on ia64*-hpux*, but
> that's another story... ;)
And one for gnulib to get involved with.
--
Eric Blake eblake redhat com +1-919-301-3266
Libvirt virtualization library http://libvirt.org
_______________________________________________
M4-patches mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/m4-patches
signature.asc
(application/pgp-signature, 621 B)
-----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.13 (GNU/Linux) Comment: Public key at http://people.redhat.com/eblake/eblake.gpg Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/ iQEcBAEBCAAGBQJRQ6FSAAoJEKeha0olJ0Nq8B8H/3QKcO3H8/3KuMZMCTrZKXDK 5Jurp3LgN1h4SPuhSlpwvfj79mNF8F3aUhqtmWzPmvNkM142HNHick3PcNxmOyr4 TAGL3YQRLTDgs0OrDsfSsVKFGM6R/qr6pUDhOyUe2lBR6rjEFNqhDrJaV87HH1yu 0evqA+1rOo6p0kZjN3jx/MKDoA4D+r+MN7Yqgi/Ne/qQBfi/tOXXnI5Dc5L/PqCA 2jkYc0AMpy3Wb7LdFj24WUGhKAaojOZCXnU/KY/R5n7Ri6NNBm9vnblf9yOlrCOt jTHEBu8MDRxRneKh9n25ZgJGm+dl249/ZIC7hstOlyjLdUSsCUpN5IVCUKW2j7U= =UL9f -----END PGP SIGNATURE-----