You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			47 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Python
		
	
			
		
		
	
	
			47 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Python
		
	
"""
 | 
						|
Derived from
 | 
						|
 | 
						|
> https://github.com/rudolfwalter/pygdbmi/blob/0.7.4.2/pygdbmi/gdbcontroller.py
 | 
						|
> MIT License  https://github.com/rudolfwalter/pygdbmi/blob/master/LICENSE
 | 
						|
> Copyright (c) 2016 Chad Smith <grassfedcode <at> gmail.com>
 | 
						|
"""
 | 
						|
 | 
						|
import os
 | 
						|
 | 
						|
if os.name == "nt":  # pragma: no cover
 | 
						|
    import msvcrt
 | 
						|
    from ctypes import POINTER, WinError, byref, windll, wintypes  # type: ignore
 | 
						|
    from ctypes.wintypes import BOOL, DWORD, HANDLE  # type: ignore
 | 
						|
else:  # pragma: no cover
 | 
						|
    import fcntl
 | 
						|
 | 
						|
 | 
						|
def make_non_blocking(file_obj):  # pragma: no cover
 | 
						|
    """
 | 
						|
    make file object non-blocking
 | 
						|
 | 
						|
    Windows doesn't have the fcntl module, but someone on
 | 
						|
    stack overflow supplied this code as an answer, and it works
 | 
						|
    http://stackoverflow.com/a/34504971/2893090
 | 
						|
    """
 | 
						|
 | 
						|
    if os.name == "nt":
 | 
						|
        LPDWORD = POINTER(DWORD)
 | 
						|
        PIPE_NOWAIT = wintypes.DWORD(0x00000001)
 | 
						|
 | 
						|
        SetNamedPipeHandleState = windll.kernel32.SetNamedPipeHandleState
 | 
						|
        SetNamedPipeHandleState.argtypes = [HANDLE, LPDWORD, LPDWORD, LPDWORD]
 | 
						|
        SetNamedPipeHandleState.restype = BOOL
 | 
						|
 | 
						|
        h = msvcrt.get_osfhandle(file_obj.fileno())
 | 
						|
 | 
						|
        res = windll.kernel32.SetNamedPipeHandleState(h, byref(PIPE_NOWAIT), None, None)
 | 
						|
        if res == 0:
 | 
						|
            raise ValueError(WinError())
 | 
						|
 | 
						|
    else:
 | 
						|
        # Set the file status flag (F_SETFL) on the pipes to be non-blocking
 | 
						|
        # so we can attempt to read from a pipe with no new data without locking
 | 
						|
        # the program up
 | 
						|
        fcntl.fcntl(file_obj, fcntl.F_SETFL, os.O_NONBLOCK)
 |