* inet/bug-if1.c: Include <string.h>.
authorRoland McGrath <roland@gnu.org>
Tue, 29 Jun 2004 00:33:10 +0000 (00:33 +0000)
committerRoland McGrath <roland@gnu.org>
Tue, 29 Jun 2004 00:33:10 +0000 (00:33 +0000)
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>

ChangeLog
inet/bug-if1.c
sysdeps/posix/waitid.c

index c9040fe4d271482b08365eb5fd0bc01fe6d51a2f..2ac50193680c3a9cd9a060bf208a5b85d5c61fcc 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,19 @@
+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.
index ddf49aff5bb86529d2989a2560acb52cdde78206..aa9925d6a7553daef1350efb186c949108f1640e 100644 (file)
@@ -20,6 +20,7 @@
 #include <errno.h>
 #include <limits.h>
 #include <stdio.h>
+#include <string.h>
 #include <net/if.h>
 
 
index e388d173f4e8a94aae53d8ae27175a60a330e5f4..76a3b1d660013a2515cecbf86617130b1911a6bb 100644 (file)
@@ -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.
 
 #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