Alexandre Julliard : ntdll: Add a configure check for the tcdrain function.

Alexandre Julliard julliard at winehq.org
Thu Sep 5 13:28:18 CDT 2013


Module: wine
Branch: master
Commit: f21961cc1427faad65abf36df217a8c888cae7fa
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=f21961cc1427faad65abf36df217a8c888cae7fa

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Thu Sep  5 00:10:19 2013 +0200

ntdll: Add a configure check for the tcdrain function.

Also remove the tcgetattr check that is no longer used.

---

 configure               |    2 +-
 configure.ac            |    2 +-
 dlls/ntdll/file.c       |    9 +--------
 dlls/ntdll/ntdll_misc.h |    1 +
 dlls/ntdll/serial.c     |   26 ++++++++++++++++++++++++++
 include/config.h.in     |    4 ++--
 6 files changed, 32 insertions(+), 12 deletions(-)

diff --git a/configure b/configure
index 56c983f..6b2c2c8 100755
--- a/configure
+++ b/configure
@@ -13436,7 +13436,7 @@ for ac_func in \
 	strtoll \
 	strtoull \
 	symlink \
-	tcgetattr \
+	tcdrain \
 	thr_kill2 \
 	timegm \
 	usleep \
diff --git a/configure.ac b/configure.ac
index 3a0007c..7c1cb1c 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2063,7 +2063,7 @@ AC_CHECK_FUNCS(\
 	strtoll \
 	strtoull \
 	symlink \
-	tcgetattr \
+	tcdrain \
 	thr_kill2 \
 	timegm \
 	usleep \
diff --git a/dlls/ntdll/file.c b/dlls/ntdll/file.c
index 83e286e..9420df5 100644
--- a/dlls/ntdll/file.c
+++ b/dlls/ntdll/file.c
@@ -2777,14 +2777,7 @@ NTSTATUS WINAPI NtFlushBuffersFile( HANDLE hFile, IO_STATUS_BLOCK* IoStatusBlock
 
     if (!ret && type == FD_TYPE_SERIAL)
     {
-        while (tcdrain( fd ) == -1)
-        {
-            if (errno != EINTR)
-            {
-                ret = FILE_GetNtStatus();
-                break;
-            }
-        }
+        ret = COMM_FlushBuffersFile( fd );
     }
     else
     {
diff --git a/dlls/ntdll/ntdll_misc.h b/dlls/ntdll/ntdll_misc.h
index 3d9264d..a13c55b 100644
--- a/dlls/ntdll/ntdll_misc.h
+++ b/dlls/ntdll/ntdll_misc.h
@@ -142,6 +142,7 @@ extern NTSTATUS TAPE_DeviceIoControl(HANDLE hDevice,
                                      ULONG IoControlCode,
                                      LPVOID lpInBuffer, DWORD nInBufferSize,
                                      LPVOID lpOutBuffer, DWORD nOutBufferSize) DECLSPEC_HIDDEN;
+extern NTSTATUS COMM_FlushBuffersFile( int fd ) DECLSPEC_HIDDEN;
 
 /* file I/O */
 struct stat;
diff --git a/dlls/ntdll/serial.c b/dlls/ntdll/serial.c
index b4f9aa9..07ba633 100644
--- a/dlls/ntdll/serial.c
+++ b/dlls/ntdll/serial.c
@@ -1342,3 +1342,29 @@ NTSTATUS COMM_DeviceIoControl(HANDLE hDevice,
                              lpOutBuffer, nOutBufferSize);
     return status;
 }
+
+NTSTATUS COMM_FlushBuffersFile( int fd )
+{
+#ifdef HAVE_TCDRAIN
+    while (tcdrain( fd ) == -1)
+    {
+        if (errno != EINTR) return FILE_GetNtStatus();
+    }
+    return STATUS_SUCCESS;
+#elif defined(TIOCDRAIN)
+    while (ioctl( fd, TIOCDRAIN ) == -1)
+    {
+        if (errno != EINTR) return FILE_GetNtStatus();
+    }
+    return STATUS_SUCCESS;
+#elif defined(TCSBRK)
+    while (ioctl( fd, TCSBRK, 1 ) == -1)
+    {
+        if (errno != EINTR) return FILE_GetNtStatus();
+    }
+    return STATUS_SUCCESS;
+#else
+    ERR( "not supported\n" );
+    return STATUS_NOT_IMPLEMENTED;
+#endif
+}
diff --git a/include/config.h.in b/include/config.h.in
index aac10a5..44b34ce 100644
--- a/include/config.h.in
+++ b/include/config.h.in
@@ -1068,8 +1068,8 @@
 /* Define to 1 if you have the <sys/wait.h> header file. */
 #undef HAVE_SYS_WAIT_H
 
-/* Define to 1 if you have the `tcgetattr' function. */
-#undef HAVE_TCGETATTR
+/* Define to 1 if you have the `tcdrain' function. */
+#undef HAVE_TCDRAIN
 
 /* Define to 1 if you have the <termios.h> header file. */
 #undef HAVE_TERMIOS_H




More information about the wine-cvs mailing list