o
    $¼"bA  ã                
   @   s(  d dl Z d dlZd dlZd dlZd dl mZmZmZmZmZm	Z	m
Z
mZmZ d dlmZmZmZmZmZmZmZmZ d dlZdZeZe
ZeZe  e¡ZG dd„ deƒZe  e¡ZG dd„ deƒZe  e¡Z G d	d
„ d
e jƒZ!ej"j#Z#eeeeeeeeee g
e#_$ee#_%dd„ Z&G dd„ dej'ƒZ'e&e_&dS )é    N)	Ú	StructureÚWinErrorÚbyrefÚc_char_pÚc_void_pÚc_wcharÚ	c_wchar_pÚsizeofÚwindll)ÚBOOLÚBYTEÚDWORDÚHANDLEÚLPCWSTRÚLPVOIDÚLPWSTRÚWORDi   c                   @   s|   e Zd Zdefdefdefdefdefdefdefdefd	efd
efdefdefdefdefdefdefdefdefgZdS )ÚSTARTUPINFOWÚcbÚ
lpReservedÚ	lpDesktopÚlpTitleÚdwXÚdwYÚdwXSizeÚdwYSizeÚdwXCountCharsÚdwYCountCharsÚdwFillAtrributeÚdwFlagsÚwShowWindowÚcbReserved2ÚlpReserved2Ú	hStdInputÚ
hStdOutputÚ	hStdErrorN)	Ú__name__Ú
__module__Ú__qualname__r   r   r   ÚLPBYTEr   Ú_fields_© r+   r+   úL/usr/lib/python3/dist-packages/virtualenv/util/subprocess/_win_subprocess.pyr      s    ÷r   c                   @   s(   e Zd ZdefdefdefdefgZdS )ÚPROCESS_INFORMATIONÚhProcessÚhThreadÚdwProcessIdÚ
dwThreadIdN)r&   r'   r(   r   r   r*   r+   r+   r+   r,   r-   (   s    þr-   c                       s,   e Zd Z‡ fdd„Zdd„ Zdd„ Z‡  ZS )ÚDUMMY_HANDLEc                    s    t t| ƒj|i |¤Ž d| _d S )NF)Úsuperr2   Ú__init__Úclosed)ÚselfÚaÚkw©Ú	__class__r+   r,   r4   3   s   
zDUMMY_HANDLE.__init__c                 C   s    | j stj | ¡ d| _ d S d S )NT)r5   r
   Úkernel32ÚCloseHandle©r6   r+   r+   r,   ÚClose7   s   
þzDUMMY_HANDLE.Closec                 C   s   | j S )N)Úvaluer=   r+   r+   r,   Ú__int__<   s   zDUMMY_HANDLE.__int__)r&   r'   r(   r4   r>   r@   Ú__classcell__r+   r+   r9   r,   r2   1   s    r2   c	                 C   s  t |j|jtt ƒ|jdu r|jnt|jƒ|jdu r|jnt|jƒ|jdu r(|jnt|jƒd�}	d}
|durQtdƒ 	dd„ | 
¡ D ƒ¡tdƒ }tt|ƒ ƒ }
||
_d}|dur[t|ƒ}tƒ }|tO }t| |dd|||
|t|	ƒt|ƒƒ
r�t|jƒt|jƒ|j|jfS tƒ ‚)z’Create a process supporting unicode executable and args for win32

    Python implementation of CreateProcess using CreateProcessW for Win32

    N)r   r    r   r#   r$   r%   Ú c                 S   s    g | ]\}}t d ƒ||f ‘qS )z%s=%s )Úunicode)Ú.0ÚkÚvr+   r+   r,   Ú
<listcomp>f   s    ÿÿz!CreateProcess.<locals>.<listcomp>ú )r   r   r    r	   r#   Úintr$   r%   rC   ÚjoinÚitemsr   Úlenr?   r-   ÚCREATE_UNICODE_ENVIRONMENTÚCreateProcessWr   r2   r.   r/   r0   r1   r   )Ú
executableÚargsÚ_p_attrÚ_t_attrÚinherit_handlesÚcreation_flagsÚenvÚcwdÚstartup_infoÚsiÚwenvÚwcwdÚpir+   r+   r,   ÚCreateProcessM   s>   ù
þûýþr\   c                       s    e Zd ZdZ‡ fdd„Z‡  ZS )ÚPopenz>This superseeds Popen and corrects a bug in cPython 2.7 implemc                    sü   |du rt  ¡ }t|t jjƒs&dd„ |D ƒ}t  |¡}t ¡ dkr&| d¡}| j	t
jO  _	t
j|_|du r9tjn|}| dtdƒ¡}t
 ¡ dksStj |¡ ¡ d	krd|  ¡ }td
ƒ||f }|	t
jO }	tt| ƒ |||||||||	d|||||||¡ dS )a˜  Code from part of _execute_child from Python 2.7 (9fbb65e)

        There are only 2 little changes concerning the construction of
        the the final string in shell mode: we preempt the creation of
        the command string when shell is True, because original function
        will try to encode unicode args which we want to avoid to be able to
        sending it as-is to ``CreateProcess``.

        Nc                 S   s$   g | ]}t |tƒr|n| d ¡‘qS )úutf-8)Ú
isinstanceÚbytesÚencode)rD   Úir+   r+   r,   rG   ˜   s   $ z(Popen._execute_child.<locals>.<listcomp>ÚCPythonr^   ÚCOMSPECzcmd.exel        zcommand.comz"%s" %sF)Ú
subprocessÚSTARTUPINFOr_   ÚtypesÚStringTypesÚlist2cmdlineÚplatformÚpython_implementationÚdecoder   Ú_subprocessÚSTARTF_USESHOWWINDOWÚSW_HIDEr    ÚosÚenvironÚgetrC   Ú
GetVersionÚpathÚbasenameÚlowerÚ_find_w9xpopenÚCREATE_NEW_CONSOLEr3   r]   Ú_execute_child)r6   rP   rO   Ú
preexec_fnÚ	close_fdsrV   rU   Úuniversal_newlinesÚstartupinfoÚcreationflagsÚshellÚto_closeÚp2creadÚp2cwriteÚc2preadÚc2pwriteÚerrreadÚerrwriteÚcomspecÚw9xpopenr9   r+   r,   ry   „   s,   






üzPopen._execute_child)r&   r'   r(   Ú__doc__ry   rA   r+   r+   r9   r,   r]   �   s    r]   )(Úctypesrp   rj   re   r   r   r   r   r   r   r   r	   r
   Úctypes.wintypesr   r   r   r   r   r   r   r   rm   rM   ÚLPCTSTRÚLPTSTRÚLPSECURITY_ATTRIBUTESÚPOINTERr)   r   ÚLPSTARTUPINFOWr-   ÚLPPROCESS_INFORMATIONr2   r;   rN   ÚargtypesÚrestyper\   r]   r+   r+   r+   r,   Ú<module>   s4   ,(



ý4
.