a XC?h� � @ s� d Z ddlZejdkred��ddlZddlZddlZddlZddlZddl Z ddl Z dZdZej Z ejZe�� Zdded �d d�ZG dd � d �ZG dd� dej�ZdS )z)Various Windows specific bits and pieces.� NZwin32z win32 only)�pipe�Popen�PIPE� PipeHandlei F)TT)�duplex� overlapped�bufsizec C s$ t jd�t�� tt��d�}| r>tj}tj tj B }|| }}ntj}tj }d| }}|tjO }|d rp|tj O }|d r�tj }nd}d } } z\t�||tjd||tjtj�} t�||dtjtj|tj�} tj| dd�}|�d� | | fW S | du�rt�| � | du�rt�| � � Y n0 dS )zELike os.pipe() but with overlapped support and using handles not fds.z\\.\pipe\python-pipe-{:d}-{:d}-)�prefixr � NT�r )�tempfileZmktemp�format�os�getpid�next� _mmap_counter�_winapiZPIPE_ACCESS_DUPLEXZGENERIC_READZ GENERIC_WRITEZPIPE_ACCESS_INBOUNDZFILE_FLAG_FIRST_PIPE_INSTANCEZFILE_FLAG_OVERLAPPEDZCreateNamedPipeZ PIPE_WAITZNMPWAIT_WAIT_FOREVERZNULLZ CreateFileZ OPEN_EXISTINGZConnectNamedPipeZGetOverlappedResult�CloseHandle)r r r ZaddressZopenmode�accessZobsizeZibsizeZflags_and_attribsZh1Zh2Zov� r �:/opt/alt/python39/lib64/python3.9/asyncio/windows_utils.pyr sJ �� �� r c @ sb e Zd ZdZdd� Zdd� Zedd� �Zdd � Ze j d �dd�Zej fd d�Zdd� Zdd� ZdS )r z�Wrapper for an overlapped pipe handle which is vaguely file-object like. The IOCP event loop can use these instead of socket objects. c C s || _ d S �N��_handle��self�handler r r �__init__V s zPipeHandle.__init__c C s2 | j d urd| j ��}nd}d| jj� d|� d�S )Nzhandle=�closed�<� �>)r � __class__�__name__r r r r �__repr__Y s zPipeHandle.__repr__c C s | j S r r �r r r r r ` s zPipeHandle.handlec C s | j d u rtd��| j S )NzI/O operation on closed pipe)r � ValueErrorr% r r r �filenod s zPipeHandle.fileno)r c C s | j d ur|| j � d | _ d S r r )r r r r r �closei s zPipeHandle.closec C s* | j d ur&|d| ��t| d� | �� d S )Nz unclosed )�source)r �ResourceWarningr( )r Z_warnr r r �__del__n s zPipeHandle.__del__c C s | S r r r% r r r � __enter__s s zPipeHandle.__enter__c C s | � � d S r )r( )r �t�v�tbr r r �__exit__v s zPipeHandle.__exit__N)r# � __module__�__qualname__�__doc__r r$ �propertyr r' r r r( �warnings�warnr+ r, r0 r r r r r Q s r c s" e Zd ZdZd� fdd� Z� ZS )r z�Replacement for subprocess.Popen using overlapped pipe handles. The stdin, stdout, stderr are None or instances of PipeHandle. Nc s� d } }}d } } }|t kr@tddd�\}} t�|tj�}n|}|t krhtdd�\} } t�| d�}n|}|t kr�tdd�\}}t�|d�}n|tkr�|}n|}z�z t� j|f|||d�|�� W n0 | | |fD ]}|d ur�t � |� qւ Y n>0 | d u�r t| �| _| d u�rt| �| _ |d u�r2t|�| _W |t k�rHt�|� |t k�r\t�|� |t k�r�t�|� n>|t k�r�t�|� |t k�r�t�|� |t k�r�t�|� 0 d S )N)FTT)r r )TFr r )�stdin�stdout�stderr)r r �msvcrtZopen_osfhandler �O_RDONLY�STDOUT�superr r r r r7 r8 r9 r( )r �argsr7 r8 r9 �kwdsZ stdin_rfdZ stdout_wfdZ stderr_wfdZstdin_whZ stdout_rhZ stderr_rhZstdin_rhZ stdout_whZ stderr_wh�h�r" r r r � sZ �� � zPopen.__init__)NNN)r# r1 r2 r3 r � __classcell__r r rA r r } s r )r3 �sys�platform�ImportErrorr � itertoolsr: r � subprocessr r5 �__all__ZBUFSIZEr r<