+2009-08-23 Bruno Haible <bruno@clisp.org>
+
+ Tolerate declared but missing pipe2 syscall.
+ * lib/pipe2.c (pipe2): Invoke original pipe2 function first, if
+ available.
+ * lib/unistd.in.h (pipe2): If the function is already present,
+ override it.
+ * m4/pipe2.m4 (gl_FUNC_PIPE2): Remove AC_LIBOBJ invocation.
+ * modules/pipe2 (Makefile.am): Compile pipe2.c always.
+ Reported by Paolo Bonzini.
+
2009-08-23 Bruno Haible <bruno@clisp.org>
* lib/pipe2.c (pipe2): Move #ifs inside function.
int
pipe2 (int fd[2], int flags)
{
+#if HAVE_PIPE2
+# undef pipe2
+ /* Try the system call first, if it exists. (We may be running with a glibc
+ that has the function but with an older kernel that lacks it.) */
+ {
+ int result = pipe2 (fd, flags);
+ if (!(result < 0 && errno == ENOSYS))
+ return result;
+ }
+#endif
+
#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
/* Native Woe32 API. */
Return 0 upon success, or -1 with errno set upon failure.
See also the Linux man page at
<http://www.kernel.org/doc/man-pages/online/pages/man2/pipe2.2.html>. */
-# if !@HAVE_PIPE2@
-extern int pipe2 (int fd[2], int flags);
+# if @HAVE_PIPE2@
+# define pipe2 rpl_pipe2
# endif
+extern int pipe2 (int fd[2], int flags);
#elif defined GNULIB_POSIXCHECK
# undef pipe2
# define pipe2(f,o) \
-# pipe2.m4 serial 1
+# pipe2.m4 serial 2
dnl Copyright (C) 2009 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
AC_CHECK_FUNCS_ONCE([pipe2])
if test $ac_cv_func_pipe2 != yes; then
HAVE_PIPE2=0
- AC_LIBOBJ([pipe2])
fi
])
gl_UNISTD_MODULE_INDICATOR([pipe2])
Makefile.am:
+lib_SOURCES += pipe2.c
Include:
<unistd.h>