diff options
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | posix/tst-fork.c | 15 | ||||
-rw-r--r-- | sysdeps/arm/atomicity.h | 1 |
3 files changed, 20 insertions, 0 deletions
@@ -1,3 +1,7 @@ +2000-05-28 Ulrich Drepper <drepper@redhat.com> + + * sysdeps/arm/atomicity.h (compare_and_swap): Return result. + 2000-05-04 Andreas Jaeger <aj@suse.de> * string/string.h: Remove __strdup prototype, it's not needed in diff --git a/posix/tst-fork.c b/posix/tst-fork.c index 287fa5f..0bee14f 100644 --- a/posix/tst-fork.c +++ b/posix/tst-fork.c @@ -38,6 +38,7 @@ main (void) char *name; int fd; pid_t pid; + pid_t ppid; off_t off; int status; @@ -69,10 +70,24 @@ main (void) if (off == (off_t) -1 || off != strlen (testdata)) error (EXIT_FAILURE, errno, "wrong file position"); + /* Get the parent PID. */ + ppid = getpid (); + /* Now fork of the process. */ pid = fork (); if (pid == 0) { + /* One little test first: the PID must have changed. */ + if (getpid () == ppid) + error (EXIT_FAILURE, 0, "child and parent have same PID"); + + /* Test the `getppid' function. */ + pid = getppid (); + if (pid == (pid_t) -1 ? errno != ENOSYS : pid != ppid) + error (EXIT_FAILURE, 0, + "getppid returned wrong PID (%ld, should be %ld)", + (long int) pid, (long int) ppid); + /* This is the child. First get the position of the descriptor. */ off = lseek (fd, 0, SEEK_CUR); if (off == (off_t) -1 || off != strlen (testdata)) diff --git a/sysdeps/arm/atomicity.h b/sysdeps/arm/atomicity.h index 01bd64e..c1f3b03 100644 --- a/sysdeps/arm/atomicity.h +++ b/sysdeps/arm/atomicity.h @@ -81,6 +81,7 @@ compare_and_swap (volatile long int *p, long int oldval, long int newval) : "=&r" (result), "=&r" (tmp) : "r" (p), "r" (newval), "r" (oldval) : "cc", "memory"); + return result; } #endif /* atomicity.h */ |