From f10d3487709cba8fc9c90800b09966a8c86600d4 Mon Sep 17 00:00:00 2001
From: Jeff Johnston <jjohnstn@redhat.com>
Date: Thu, 17 Dec 2009 19:22:23 +0000
Subject: [PATCH] 2009-12-17  Ralf Corsepius <ralf.corsepius@rtems.org>

        * libc/include/pthread.h: Add pthread_atfork, pthread_rwlock_unlock
        * libc/include/sys/stat.h: Use struct timespec st_*tim,
        blksize_t st_blksize, blkcnt_t st_blocks.
        Add st_*time compatibility macros.
---
 newlib/ChangeLog               |  7 +++++++
 newlib/libc/include/pthread.h  | 20 +++++---------------
 newlib/libc/include/sys/stat.h | 15 +++++++++++++++
 3 files changed, 27 insertions(+), 15 deletions(-)

diff --git a/newlib/ChangeLog b/newlib/ChangeLog
index a2561aea2..eddbb065a 100644
--- a/newlib/ChangeLog
+++ b/newlib/ChangeLog
@@ -1,3 +1,10 @@
+2009-12-17  Ralf Corsepius <ralf.corsepius@rtems.org>
+
+	* libc/include/pthread.h: Add pthread_atfork, pthread_rwlock_unlock 
+	* libc/include/sys/stat.h: Use struct timespec st_*tim,
+	blksize_t st_blksize, blkcnt_t st_blocks.
+	Add st_*time compatibility macros.
+
 2009-12-16  Joel Sherrill <joel.sherrill@oarcorp.com>
 
 	* libc/sys/rtems/machine/param.h: Only use sizeof(double) -1
diff --git a/newlib/libc/include/pthread.h b/newlib/libc/include/pthread.h
index 8dc787244..f5af16408 100644
--- a/newlib/libc/include/pthread.h
+++ b/newlib/libc/include/pthread.h
@@ -33,21 +33,10 @@ extern "C" {
 #include <time.h>
 #include <sys/sched.h>
 
-/* Register Fork Handlers, P1003.1c/Draft 10, P1003.1c/Draft 10, p. 27
-  
-    If an OS does not support processes, then it falls under this provision
-    and may not provide pthread_atfork():
-  
-    "Either the implementation shall support the pthread_atfork() function
-     as described above or the pthread_atfork() funciton shall not be 
-     provided."
-  
-    NOTE: RTEMS does not provide pthread_atfork().  */
-
-#if !defined(__rtems__) && !defined(__XMK__)
-#warning "Add pthread_atfork() prototype"
-#endif
-
+/* Register Fork Handlers */
+int	_EXFUN(pthread_atfork,(void (*prepare)(void), void (*parent)(void),
+                   void (*child)(void)));
+          
 /* Mutex Initialization Attributes, P1003.1c/Draft 10, p. 81 */
 
 int	_EXFUN(pthread_mutexattr_init, (pthread_mutexattr_t *__attr));
@@ -345,6 +334,7 @@ int	_EXFUN(pthread_rwlock_rdlock,(pthread_rwlock_t *__rwlock));
 int	_EXFUN(pthread_rwlock_tryrdlock,(pthread_rwlock_t *__rwlock));
 int	_EXFUN(pthread_rwlock_timedrdlock,
         (pthread_rwlock_t *__rwlock, _CONST struct timespec *__abstime));
+int	_EXFUN(pthread_rwlock_unlock,(pthread_rwlock_t *__rwlock));
 int	_EXFUN(pthread_rwlock_wrlock,(pthread_rwlock_t *__rwlock));
 int	_EXFUN(pthread_rwlock_trywrlock,(pthread_rwlock_t *__rwlock));
 int	_EXFUN(pthread_rwlock_timedwrlock,
diff --git a/newlib/libc/include/sys/stat.h b/newlib/libc/include/sys/stat.h
index 06a71a978..9d8bdfb65 100644
--- a/newlib/libc/include/sys/stat.h
+++ b/newlib/libc/include/sys/stat.h
@@ -32,6 +32,13 @@ struct	stat
   gid_t		st_gid;
   dev_t		st_rdev;
   off_t		st_size;
+#if defined(__rtems__)
+  struct timespec st_atim;
+  struct timespec st_mtim;
+  struct timespec st_ctim;
+  blksize_t     st_blksize;
+  blkcnt_t	st_blocks;
+#else
   /* SysV/sco doesn't have the rest... But Solaris, eabi does.  */
 #if defined(__svr4__) && !defined(__PPC__) && !defined(__sun__)
   time_t	st_atime;
@@ -48,7 +55,15 @@ struct	stat
   long		st_blocks;
   long	st_spare4[2];
 #endif
+#endif
 };
+
+#if defined(__rtems__)
+#define st_atime st_atim.tv_sec
+#define st_ctime st_ctim.tv_sec
+#define st_mtime st_mtim.tv_sec
+#endif
+
 #endif
 
 #define	_IFMT		0170000	/* type of file */