]> rtime.felk.cvut.cz Git - l4.git/blobdiff - l4/pkg/uclibc/lib/contrib/uclibc/libc/termios/tcdrain.c
update
[l4.git] / l4 / pkg / uclibc / lib / contrib / uclibc / libc / termios / tcdrain.c
index ad94803ff6013d192615a883c8959cdc5ed50629..e0f42313866bd3ff283fc500327772ad416b4f10 100644 (file)
 #include <errno.h>
 #include <termios.h>
 #include <sys/ioctl.h>
-
-#ifdef __LINUXTHREADS_OLD__
-extern __typeof(tcdrain) weak_function tcdrain;
-strong_alias(tcdrain,__libc_tcdrain)
+#ifdef __UCLIBC_HAS_THREADS_NATIVE__
+#include <sysdep-cancel.h>
 #endif
 
+libc_hidden_proto(ioctl)
+
+extern __typeof(tcdrain) __libc_tcdrain;
 /* Wait for pending output to be written on FD.  */
-int tcdrain(int fd)
+int __libc_tcdrain (int fd)
 {
+#ifdef __UCLIBC_HAS_THREADS_NATIVE__
+       if (SINGLE_THREAD_P)
+               /* With an argument of 1, TCSBRK for output to be drain.  */
+               return INLINE_SYSCALL (ioctl, 3, fd, TCSBRK, 1);
+
+       int oldtype = LIBC_CANCEL_ASYNC ();
+
+       /* With an argument of 1, TCSBRK for output to be drain.  */
+       int result = INLINE_SYSCALL (ioctl, 3, fd, TCSBRK, 1);
+
+       LIBC_CANCEL_RESET (oldtype);
+
+       return result;
+#else
        return ioctl(fd, TCSBRK, 1);
+#endif
 }
+weak_alias(__libc_tcdrain,tcdrain)