annotate doc/posix-functions/iswgraph_l.texi @ 15326:52719068f9c2

pipe, pipe2: don't corrupt fd on error I noticed a potential subtle double-close bug in libvirt. There, a common idiom is to initialize an int fd[2]={-1,-1}, then have multiple error paths goto common cleanup code. In the cleanup code, the fds are closed if they are not already -1; this works if the error label is reached before the pipe call, or after pipe succeeds, but if it was the pipe call itself that jumped to the error label, then it is relying on failed pipe() not altering the values already in fd array prior to the failure. Our pipe2 replacement violated this assumption, and could leave a non-negative value in the array, which in turn would let libvirt close an already-closed fd, possibly nuking an unrelated fd opened by another thread that happened to get the same value. As a result, I raised a POSIX issue regarding the behavior of pipe on failure: http://austingroupbugs.net/view.php?id=467 Using that test program, I learned that most systems leave fd unchanged on error, but that mingw always assigns -1 into the array. This fixes the mingw pipe() replacement, as well as the gnulib pipe2() replacement. I don't know of any race-free way to work around a cygwin crash: http://cygwin.com/ml/cygwin/2011-06/msg00328.html - we could always open() and then close() two fds to guess whether two spare fd still remain before calling pipe(), but that is racy. * lib/pipe.c (pipe): Leave fd unchanged on error. * lib/pipe2.c (pipe2): Likewise. * doc/posix-functions/pipe.texi (pipe): Document cygwin issue. * doc/glibc-functions/pipe2.texi (pipe2): Likewise. Signed-off-by: Eric Blake <eblake@redhat.com>
author Eric Blake <eblake@redhat.com>
date Wed, 29 Jun 2011 15:46:50 -0600
parents 3bbfc7e37ec2
children 847372253549
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
10879
fb8d0f8624e2 Move documentation for glibc functions that are now in POSIX.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
1 @node iswgraph_l
fb8d0f8624e2 Move documentation for glibc functions that are now in POSIX.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
2 @section @code{iswgraph_l}
fb8d0f8624e2 Move documentation for glibc functions that are now in POSIX.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
3 @findex iswgraph_l
fb8d0f8624e2 Move documentation for glibc functions that are now in POSIX.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
4
13549
bb0ceefd22dc avoid some overlong lines from posix urls, etc.
Karl Berry <karl@freefriends.org>
parents: 12348
diff changeset
5 POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/iswgraph_l.html}
10879
fb8d0f8624e2 Move documentation for glibc functions that are now in POSIX.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
6
fb8d0f8624e2 Move documentation for glibc functions that are now in POSIX.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
7 Gnulib module: ---
fb8d0f8624e2 Move documentation for glibc functions that are now in POSIX.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
8
fb8d0f8624e2 Move documentation for glibc functions that are now in POSIX.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
9 Portability problems fixed by Gnulib:
fb8d0f8624e2 Move documentation for glibc functions that are now in POSIX.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
10 @itemize
fb8d0f8624e2 Move documentation for glibc functions that are now in POSIX.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
11 @end itemize
fb8d0f8624e2 Move documentation for glibc functions that are now in POSIX.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
12
fb8d0f8624e2 Move documentation for glibc functions that are now in POSIX.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
13 Portability problems not fixed by Gnulib:
fb8d0f8624e2 Move documentation for glibc functions that are now in POSIX.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
14 @itemize
fb8d0f8624e2 Move documentation for glibc functions that are now in POSIX.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
15 @item
12348
8877edbaae37 doc: Most *_l functions exist in MacOS X 10.5.
Bruno Haible <bruno@clisp.org>
parents: 10961
diff changeset
16 This function is missing on many platforms:
13917
3bbfc7e37ec2 Update for Solaris 11 2010-11.
Bruno Haible <bruno@clisp.org>
parents: 13892
diff changeset
17 MacOS X 10.3, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 11 2010-11, Cygwin, mingw, Interix 3.5, BeOS.
10961
5c9ddf458ac4 Mention platform-dependent limitations of wchar_t.
Bruno Haible <bruno@clisp.org>
parents: 10879
diff changeset
18 @item
5c9ddf458ac4 Mention platform-dependent limitations of wchar_t.
Bruno Haible <bruno@clisp.org>
parents: 10879
diff changeset
19 On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot
5c9ddf458ac4 Mention platform-dependent limitations of wchar_t.
Bruno Haible <bruno@clisp.org>
parents: 10879
diff changeset
20 accommodate all Unicode characters.
10879
fb8d0f8624e2 Move documentation for glibc functions that are now in POSIX.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
21 @end itemize