@@ -204,9 +204,13 @@ module Yamatanooroti::WindowsDefinition
204204 # BOOL WINAPI GenerateConsoleCtrlEvent(DWORD dwCtrlEvent, DWORD dwProcessGroupId);
205205 extern 'BOOL GenerateConsoleCtrlEvent(DWORD, DWORD);' , :stdcall
206206
207- private def error_message ( r , method_name , exception : true )
208- return if not r . zero?
207+ private def successful_or_if_not_messageout ( r , method_name , exception : true )
208+ return true if not r . zero?
209209 err = Fiddle . win32_last_error
210+ if err == 0
211+ $stderr. puts "Info: #{ method_name } returns zero but win32_last_error has successful zero."
212+ return true
213+ end
210214 string = Fiddle ::Pointer . malloc ( Fiddle ::SIZEOF_VOIDP , FREE )
211215 n = FormatMessageW (
212216 FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM ,
@@ -229,30 +233,30 @@ module Yamatanooroti::WindowsDefinition
229233 raise msg
230234 else
231235 $stderr. puts msg
236+ return false
232237 end
233238 end
234239
235240 def get_console_screen_buffer_info ( handle )
236241 csbi = CONSOLE_SCREEN_BUFFER_INFO . malloc ( FREE )
237242 r = GetConsoleScreenBufferInfo ( handle , csbi )
238- error_message ( r , 'GetConsoleScreenBufferInfo' )
243+ successful_or_if_not_messageout ( r , 'GetConsoleScreenBufferInfo' )
239244 return csbi
240245 end
241246
242247 def set_console_screen_buffer_info_ex ( handle , h , w , buffer_height )
243248 csbi = CONSOLE_SCREEN_BUFFER_INFOEX . malloc ( FREE )
244249 csbi . cbSize = CONSOLE_SCREEN_BUFFER_INFOEX . size
245250 r = GetConsoleScreenBufferInfoEx ( handle , csbi )
246- error_message ( r , 'GetConsoleScreenBufferSize' )
251+ successful_or_if_not_messageout ( r , 'GetConsoleScreenBufferSize' )
247252 csbi . dwSize_X = w
248253 csbi . dwSize_Y = buffer_height
249254 csbi . Left = 0
250255 csbi . Right = w - 1
251256 csbi . Top = [ csbi . Top , buffer_height - h ] . min
252257 csbi . Bottom = csbi . Top + h - 1
253258 r = SetConsoleScreenBufferInfoEx ( handle , csbi )
254- error_message ( r , 'SetConsoleScreenBufferInfoEx' )
255- return r != 0
259+ return successful_or_if_not_messageout ( r , 'SetConsoleScreenBufferInfoEx' )
256260 end
257261
258262 def set_console_window_info ( handle , h , w )
@@ -262,8 +266,7 @@ def set_console_window_info(handle, h, w)
262266 rect . Right = w - 1
263267 rect . Bottom = h - 1
264268 r = SetConsoleWindowInfo ( handle , 1 , rect )
265- error_message ( r , 'SetConsoleWindowInfo' )
266- return r != 0
269+ return successful_or_if_not_messageout ( r , 'SetConsoleWindowInfo' )
267270 end
268271
269272 def set_console_window_size ( handle , h , w )
@@ -290,26 +293,24 @@ def create_console_file_handle(name)
290293 0
291294 )
292295 fh = [ fh ] . pack ( "J" ) . unpack1 ( "J" )
293- error_message ( 0 , name ) if fh == INVALID_HANDLE_VALUE
296+ successful_or_if_not_messageout ( 0 , name ) if fh == INVALID_HANDLE_VALUE
294297 fh
295298 end
296299
297300 def close_handle ( handle )
298301 r = CloseHandle ( handle )
299- error_message ( r , "CloseHandle" )
300- return r != 0
302+ return successful_or_if_not_messageout ( r , "CloseHandle" )
301303 end
302304
303305 def free_console
304306 r = FreeConsole ( )
305- error_message ( r , "FreeConsole" )
306- return r != 0
307+ return successful_or_if_not_messageout ( r , "FreeConsole" )
307308 end
308309
309310 def attach_console ( pid = ATTACH_PARENT_PROCESS , maybe_fail : false )
310311 r = AttachConsole ( pid )
311- error_message ( r , 'AttachConsole' ) unless maybe_fail
312- return r != 0
312+ return successful_or_if_not_messageout ( r , 'AttachConsole' ) unless maybe_fail
313+ nil
313314 end
314315
315316 SHOWWINDOW_MAP = {
@@ -346,7 +347,7 @@ def create_console(command, show = SW_SHOWNORMAL)
346347 Fiddle ::NULL , Fiddle ::NULL ,
347348 startup_info , console_process_info
348349 )
349- error_message ( r , 'CreateProcessW' )
350+ successful_or_if_not_messageout ( r , 'CreateProcessW' )
350351 end
351352 close_handle ( console_process_info . hProcess )
352353 close_handle ( console_process_info . hThread )
@@ -355,7 +356,7 @@ def create_console(command, show = SW_SHOWNORMAL)
355356
356357 def get_std_handle ( stdhandle )
357358 fh = GetStdHandle ( stdhandle )
358- error_message ( 0 , name ) if fh == INVALID_HANDLE_VALUE
359+ successful_or_if_not_messageout ( 0 , name ) if fh == INVALID_HANDLE_VALUE
359360 fh
360361 end
361362
@@ -377,7 +378,7 @@ def read_console_output(handle, row, width)
377378 buffer = Fiddle ::Pointer . malloc ( Fiddle ::SIZEOF_SHORT * width , FREE )
378379 n = Fiddle ::Pointer . malloc ( Fiddle ::SIZEOF_DWORD , FREE )
379380 r = ReadConsoleOutputCharacterW ( handle , buffer , width , row << 16 , n )
380- error_message ( r , "ReadConsoleOutputCharacterW" )
381+ successful_or_if_not_messageout ( r , "ReadConsoleOutputCharacterW" )
381382 return wc2mb ( buffer [ 0 , n . to_str . unpack1 ( "L" ) * 2 ] ) . gsub ( / *$/ , "" )
382383 end
383384
@@ -417,23 +418,22 @@ def build_key_input_record(str)
417418 def write_console_input ( handle , records , n )
418419 written = Fiddle ::Pointer . malloc ( Fiddle ::SIZEOF_DWORD , FREE )
419420 r = WriteConsoleInputW ( handle , records , n , written )
420- error_message ( r , 'WriteConsoleInput' )
421+ successful_or_if_not_messageout ( r , 'WriteConsoleInput' )
421422 return written . to_str . unpack1 ( 'L' )
422423 end
423424
424425 def get_number_of_console_input_events ( handle )
425426 n = Fiddle ::Pointer . malloc ( Fiddle ::SIZEOF_DWORD , FREE )
426427 r = GetNumberOfConsoleInputEvents ( handle , n )
427- error_message ( r , 'GetNumberOfConsoleInputEvents' )
428+ successful_or_if_not_messageout ( r , 'GetNumberOfConsoleInputEvents' )
428429 return n . to_str . unpack1 ( 'L' )
429430 end
430431
431432 def get_console_mode ( handle )
432433 mode = Fiddle ::Pointer . malloc ( Fiddle ::SIZEOF_DWORD , FREE )
433434 mode [ 0 , Fiddle ::SIZEOF_DWORD ] = "\0 " . b * Fiddle ::SIZEOF_DWORD
434435 r = GetConsoleMode ( handle , mode )
435- error_message ( r , 'GetConsoleMode' , exception : false )
436- mode . to_str . unpack1 ( 'L' )
436+ successful_or_if_not_messageout ( r , 'GetConsoleMode' , exception : false ) ? mode . to_str . unpack1 ( 'L' ) : nil
437437 end
438438
439439 def set_console_mode ( handle , mode )
@@ -442,12 +442,12 @@ def set_console_mode(handle, mode)
442442
443443 def set_console_codepage ( cp )
444444 r = SetConsoleCP ( cp )
445- error_message ( r , 'SetConsoleCP' , exception : false )
445+ return successful_or_if_not_messageout ( r , 'SetConsoleCP' , exception : false )
446446 end
447447
448448 def set_console_output_codepage ( cp )
449449 r = SetConsoleOutputCP ( cp )
450- error_message ( r , 'SetConsoleOutputCP' , exception : false )
450+ return successful_or_if_not_messageout ( r , 'SetConsoleOutputCP' , exception : false )
451451 end
452452
453453 def get_console_codepage ( )
@@ -460,8 +460,7 @@ def get_console_output_codepage()
460460
461461 def generate_console_ctrl_event ( event , pgrp )
462462 r = GenerateConsoleCtrlEvent ( event , pgrp )
463- error_message ( r , 'GenerateConsoleCtrlEvent' )
464- return r != 0
463+ return successful_or_if_not_messageout ( r , 'GenerateConsoleCtrlEvent' )
465464 end
466465
467466 # Ctrl+C trap support
0 commit comments