Jacek Caban : kernelbase: Use IOCTL_CONDRV_READ_OUTPUT in ReadConsoleOutputCharacterW.

Alexandre Julliard julliard at winehq.org
Tue Jul 28 15:53:31 CDT 2020


Module: wine
Branch: master
Commit: 300a01f467e84bb69bf6387e52545ddbc9c456dc
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=300a01f467e84bb69bf6387e52545ddbc9c456dc

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Tue Jul 28 17:10:32 2020 +0200

kernelbase: Use IOCTL_CONDRV_READ_OUTPUT in ReadConsoleOutputCharacterW.

Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/kernelbase/console.c | 21 +++++++++------------
 1 file changed, 9 insertions(+), 12 deletions(-)

diff --git a/dlls/kernelbase/console.c b/dlls/kernelbase/console.c
index 23f0696124..63e9b20292 100644
--- a/dlls/kernelbase/console.c
+++ b/dlls/kernelbase/console.c
@@ -99,6 +99,7 @@ static BOOL console_ioctl( HANDLE handle, DWORD code, void *in_buff, DWORD in_co
         status = STATUS_INVALID_HANDLE;
         break;
     }
+    if (read) *read = 0;
     return set_ntstatus( status );
 }
 
@@ -849,6 +850,7 @@ BOOL WINAPI DECLSPEC_HOTPATCH ReadConsoleOutputCharacterA( HANDLE handle, LPSTR
 BOOL WINAPI DECLSPEC_HOTPATCH ReadConsoleOutputCharacterW( HANDLE handle, LPWSTR buffer, DWORD length,
                                                            COORD coord, DWORD *count )
 {
+    struct condrv_output_params params;
     BOOL ret;
 
     TRACE( "(%p,%p,%d,%dx%d,%p)\n", handle, buffer, length, coord.X, coord.Y, count );
@@ -859,18 +861,13 @@ BOOL WINAPI DECLSPEC_HOTPATCH ReadConsoleOutputCharacterW( HANDLE handle, LPWSTR
         return FALSE;
     }
 
-    *count = 0;
-    SERVER_START_REQ( read_console_output )
-    {
-        req->handle = console_handle_unmap( handle );
-        req->x      = coord.X;
-        req->y      = coord.Y;
-        req->mode   = CHAR_INFO_MODE_TEXT;
-        req->wrap   = TRUE;
-        wine_server_set_reply( req, buffer, length * sizeof(WCHAR) );
-        if ((ret = !wine_server_call_err( req ))) *count = wine_server_reply_size(reply) / sizeof(WCHAR);
-    }
-    SERVER_END_REQ;
+    params.mode  = CHAR_INFO_MODE_TEXT;
+    params.x     = coord.X;
+    params.y     = coord.Y;
+    params.width = 0;
+    ret = console_ioctl( handle, IOCTL_CONDRV_READ_OUTPUT, &params, sizeof(params), buffer,
+                         length * sizeof(*buffer), count );
+    *count /= sizeof(*buffer);
     return ret;
 }
 




More information about the wine-cvs mailing list