summaryrefslogtreecommitdiffstats
path: root/libc/sysdeps/linux/common/fsync.c
diff options
context:
space:
mode:
author"Steven J. Hill" <sjhill@realitydiluted.com>2006-08-24 02:58:45 +0000
committer"Steven J. Hill" <sjhill@realitydiluted.com>2006-08-24 02:58:45 +0000
commit01f422c12f5799a44832eb26967a906edfc2ba55 (patch)
tree1e8bdcaab1f4da088cc1c490bf96c361a663e0c4 /libc/sysdeps/linux/common/fsync.c
parentd2db9bdb4c79afcd4b09353346cd4eaf63b6cd2c (diff)
downloaduClibc-alpine-01f422c12f5799a44832eb26967a906edfc2ba55.tar.bz2
uClibc-alpine-01f422c12f5799a44832eb26967a906edfc2ba55.tar.xz
Well, this is everything for my NPTL implementation. The 'uClibc-nptl' branch is now the exact code that I have. I am going to re-run tests now to verify everything one more time. The next step after that is to merge from trunk with the latest stuff from Mike and Peter.
Diffstat (limited to 'libc/sysdeps/linux/common/fsync.c')
-rw-r--r--libc/sysdeps/linux/common/fsync.c21
1 files changed, 20 insertions, 1 deletions
diff --git a/libc/sysdeps/linux/common/fsync.c b/libc/sysdeps/linux/common/fsync.c
index 677f3e3d6..7ca709887 100644
--- a/libc/sysdeps/linux/common/fsync.c
+++ b/libc/sysdeps/linux/common/fsync.c
@@ -9,8 +9,27 @@
#include "syscalls.h"
#include <unistd.h>
+#ifdef __UCLIBC__HAS_THREADS__
+# include <sysdep-cancel.h>
+#endif
extern __typeof(fsync) __libc_fsync;
-#define __NR___libc_fsync __NR_fsync
+#ifdef __UCLIBC__HAS_THREADS__
+int __libc_fsync (int fd)
+{
+ if (SINGLE_THREAD_P)
+ return INLINE_SYSCALL (fsync, 1, fd);
+
+ int oldtype = LIBC_CANCEL_ASYNC ();
+
+ int result = INLINE_SYSCALL (fsync, 1, fd);
+
+ LIBC_CANCEL_RESET (oldtype);
+
+ return result;
+}
+#else
+# define __NR___libc_fsync __NR_fsync
_syscall1(int, __libc_fsync, int, fd);
+#endif
weak_alias(__libc_fsync, fsync)