serial 02/04: fix set_XOff an set_XOn

Wolfgang Walter wine at stwm.de
Fri Dec 12 11:56:11 CST 2008


set_XOff: must not change IXOFF but simulate that xoff has been received
set_XOn: must not change IXON but simulate that xon has been received

(see MSDN)
---
 dlls/ntdll/serial.c |   30 ++++++++----------------------
 1 files changed, 8 insertions(+), 22 deletions(-)

diff --git a/dlls/ntdll/serial.c b/dlls/ntdll/serial.c
index edad40e..7cc8d00 100644
--- a/dlls/ntdll/serial.c
+++ b/dlls/ntdll/serial.c
@@ -800,39 +800,25 @@ static NTSTATUS set_wait_mask(HANDLE hDevice, DWORD mask)
     return status;
 }
 
+/*
+ * does not change IXOFF but simulates that xoff has been received:
+ */
 static NTSTATUS set_XOff(int fd)
 {
-    struct termios      port;
-
-    if (tcgetattr(fd,&port) == -1)
-    {
-        FIXME("tcgetattr on fd %d failed (%s)!\n", fd, strerror(errno));
-        return FILE_GetNtStatus();
-
-
-    }
-    port.c_iflag |= IXOFF;
-    if (tcsetattr(fd, TCSADRAIN, &port) == -1)
+    if (tcflow(fd, TCOOFF))
     {
-        FIXME("tcsetattr on fd %d failed (%s)!\n", fd, strerror(errno));
         return FILE_GetNtStatus();
     }
     return STATUS_SUCCESS;
 }
 
+/*
+ * does not change IXON but simulates that xon has been received:
+ */
 static NTSTATUS set_XOn(int fd)
 {
-    struct termios      port;
-
-    if (tcgetattr(fd,&port) == -1)
-    {
-        FIXME("tcgetattr on fd %d failed (%s)!\n", fd, strerror(errno));
-        return FILE_GetNtStatus();
-    }
-    port.c_iflag |= IXON;
-    if (tcsetattr(fd, TCSADRAIN, &port) == -1)
+    if (tcflow(fd, TCOON))
     {
-        FIXME("tcsetattr on fd %d failed (%s)!\n", fd, strerror(errno));
         return FILE_GetNtStatus();
     }
     return STATUS_SUCCESS;
-- 
1.5.6.5


-- 
Wolfgang Walter
Studentenwerk München
Anstalt des öffentlichen Rechts
Leiter EDV
Leopoldstraße 15
80802 München



More information about the wine-patches mailing list