summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog16
-rw-r--r--inet/bug-if1.c1
-rw-r--r--sysdeps/posix/waitid.c28
3 files changed, 43 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index c9040fe4d2..2ac5019368 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,21 @@
2004-06-28 Jakub Jelinek <jakub@redhat.com>
+ * inet/bug-if1.c: Include <string.h>.
+
+2004-06-19 Roland McGrath <roland@redhat.com>
+
+ * sysdeps/posix/waitid.c (do_waitid) [DO_WAITID]: Define function
+ under this macro name instead.
+ [NO_DO_WAITID]: Don't define it at all.
+ (do_waitid) [WNOWAIT, WEXITED]: If these POSIX.1 waitid flag bits are
+ defined, then return ENOTSUP for combinations of selection bits other
+ than WEXITED and WEXITED|WSTOPPED, which this version cannot support.
+
+ * posix/tst-waitid.c: New file.
+ * posix/Makefile (tests): Add it.
+
+2004-06-28 Jakub Jelinek <jakub@redhat.com>
+
* sysdeps/unix/alpha/sysdep.h (inline_syscall6): Fix a typo.
[BZ #231]
diff --git a/inet/bug-if1.c b/inet/bug-if1.c
index ddf49aff5b..aa9925d6a7 100644
--- a/inet/bug-if1.c
+++ b/inet/bug-if1.c
@@ -20,6 +20,7 @@
#include <errno.h>
#include <limits.h>
#include <stdio.h>
+#include <string.h>
#include <net/if.h>
diff --git a/sysdeps/posix/waitid.c b/sysdeps/posix/waitid.c
index e388d173f4..76a3b1d660 100644
--- a/sysdeps/posix/waitid.c
+++ b/sysdeps/posix/waitid.c
@@ -1,5 +1,5 @@
/* Pseudo implementation of waitid.
- Copyright (C) 1997, 1998, 2002, 2003 Free Software Foundation, Inc.
+ Copyright (C) 1997, 1998, 2002, 2003, 2004 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Zack Weinberg <zack@rabi.phys.columbia.edu>, 1997.
@@ -28,8 +28,15 @@
#include <sysdep-cancel.h>
+#ifdef DO_WAITID
+# define OUR_WAITID DO_WAITID
+#elif !defined NO_DO_WAITID
+# define OUR_WAITID do_waitid
+#endif
+
+#ifdef OUR_WAITID
static int
-do_waitid (idtype_t idtype, id_t id, siginfo_t *infop, int options)
+OUR_WAITID (idtype_t idtype, id_t id, siginfo_t *infop, int options)
{
pid_t pid, child;
int status;
@@ -66,6 +73,22 @@ do_waitid (idtype_t idtype, id_t id, siginfo_t *infop, int options)
return -1;
}
+ /* This emulation using waitpid cannot support the waitid modes in which
+ we do not reap the child, or match only stopped and not dead children. */
+ if (0
+#ifdef WNOWAIT
+ || (options & WNOWAIT)
+#endif
+#ifdef WEXITED
+ || ((options & (WEXITED|WSTOPPED|WCONTINUED))
+ != (WEXITED | (options & WUNTRACED)))
+#endif
+ )
+ {
+ __set_errno (ENOTSUP);
+ return -1;
+ }
+
/* Note the waitid() is a cancellation point. But since we call
waitpid() which itself is a cancellation point we do not have
to do anything here. */
@@ -118,6 +141,7 @@ do_waitid (idtype_t idtype, id_t id, siginfo_t *infop, int options)
return 0;
}
+#endif
int