X-Git-Url: https://rtime.felk.cvut.cz/gitweb/l4.git/blobdiff_plain/846ee6a4a27b3178b23b551e333750133da39d27..7d8b3f45f98773ba02057b81b90c31a12320c09e:/l4/pkg/uclibc/lib/contrib/uclibc/libc/termios/tcdrain.c diff --git a/l4/pkg/uclibc/lib/contrib/uclibc/libc/termios/tcdrain.c b/l4/pkg/uclibc/lib/contrib/uclibc/libc/termios/tcdrain.c index ad94803ff..e0f423138 100644 --- a/l4/pkg/uclibc/lib/contrib/uclibc/libc/termios/tcdrain.c +++ b/l4/pkg/uclibc/lib/contrib/uclibc/libc/termios/tcdrain.c @@ -19,14 +19,31 @@ #include #include #include - -#ifdef __LINUXTHREADS_OLD__ -extern __typeof(tcdrain) weak_function tcdrain; -strong_alias(tcdrain,__libc_tcdrain) +#ifdef __UCLIBC_HAS_THREADS_NATIVE__ +#include #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)