Module Name: src Committed By: kre Date: Fri Mar 1 05:23:35 UTC 2019
Modified Files: src/bin/sh: redir.c Log Message: Inspired by (really the need for) Maya's patch to pkgsrc/shells/bash to allow bash to build fdflags on Solaris 10, here are some mods that fix that, and some other similar issues in the NetBSD version of fdflags. The bash implementation of fdflags is based upon the one Christos did for the NetBSD sh, so the issues are similar ... the NetBSD sh cannot yet (easily anyway) build on anything except NetBSD, so this change makes no current difference at all (just adds some compile time tests (#ifdef) which always work out the way things did before, when built on NetBSD). However, there is no system on which any modern shell can hope to work which does not support close on exec, or fcntl(F_SETFD,...) to set it. The O_CLOEXEC and FD_CLOEXEC definitions might not exist, but close on exec can still be manipulated. Since the primary rationale for the fdflags builtin was to be able to manipulate that state bit from scripts, it would be annoying to lose that one, and keep all the (less important) others, just because O_CLOEXEC is not defined, so do the fix (workaround) a different way than was done in the bash patch. Further, more than fdflags() will fail if O_CLOEXEC is not defined, so handle that as well. Also fix another oddity ... (noticed by reading the code) - if fcntl(F_GETFL,...) returned any bits set that we don't understand, the code was supposed to simply print their values as a hex constant, when fdflags is run with -v. However, the getflags() function was clearing all bits that the code did not know about ... so there is no way any unknown bit could ever make it out to be printed. Handle that a different way - instead of clearing unknown bits, clear any bits that get returned which we understand, but do not want to deal with (stuff like O_WRONLY, which should not be returned from the fcntl(), but who knows...) Leave any unknown bits that happen to be set, set, so that printone() can display them if appropriate. (This is most likely to happen when running an older shell on a new kernel where the kernel supports some new flag that the shell has not been taught to understand). NFCI that anyone should notice anytime soon. To generate a diff of this commit: cvs rdiff -u -r1.64 -r1.65 src/bin/sh/redir.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.