o
    ˜»áf„  ã                   @   sl   d Z ddlZddlZddlZg d¢ZG dd„ deƒZdddœdd	„Zdd
d„Zdd„ Z	e
dkr4e	ƒ  dS dS )zImplementation of the UUencode and UUdecode functions.

encode(in_file, out_file [,name, mode], *, backtick=False)
decode(in_file [, out_file, mode, quiet])
é    N)ÚErrorÚencodeÚdecodec                   @   s   e Zd ZdS )r   N)Ú__name__Ú
__module__Ú__qualname__© r   r   ú/usr/lib/python3.10/uu.pyr   '   s    r   F©Úbacktickc             	   C   sx  g }z¯| dkrt jj} n/t| tƒr;|du rtj | ¡}|du r1zt | ¡j	}W n	 t
y0   Y nw t| dƒ} | | ¡ |dkrDt jj}nt|tƒrSt|dƒ}| |¡ |du rYd}|du r_d}| dd¡}| dd	¡}| d
|d@ |f  d¡¡ |  d¡}t|ƒdkr™| tj||d¡ |  d¡}t|ƒdks„|r¡| d¡ n| d¡ W |D ]}| ¡  q©dS |D ]}| ¡  q´w )zUuencode fileú-NÚrbÚwbi¶  Ú
z\núz\rzbegin %o %s
iÿ  Úasciié-   r   r
   s   `
end
s    
end
)ÚsysÚstdinÚbufferÚ
isinstanceÚstrÚosÚpathÚbasenameÚstatÚst_modeÚAttributeErrorÚopenÚappendÚstdoutÚreplaceÚwriter   ÚreadÚlenÚbinasciiÚb2a_uuÚclose)Úin_fileÚout_fileÚnameÚmoder   Úopened_filesÚdataÚfr   r   r	   r   *   sR   

ÿ







þ
€
ÿ
ÿr   c              
   C   s~  g }| dkrt jj} nt| tƒrt| dƒ} | | ¡ z	 |  ¡ }|s'tdƒ‚| 	d¡s-q| 
dd¡}t|ƒdkrR|d	 dkrRz	t|d
 dƒ W n
 tyQ   Y nw q|du r•|d  d¡ d¡}tj |¡rntd|› ƒ‚| 	tj¡sdtj› |v stjr•| 	tj¡sdtj› |v r•td|› dƒ‚|du r t|d
 dƒ}|dkr©t jj}nt|tƒrÀt|dƒ}t ||¡ |}| |¡ |  ¡ }|r | d¡dkr zt |¡}	W n6 tjy }
 z(|d	 d d@ d d d }t |d|… ¡}	|st j d|
 ¡ W Y d}
~
nd}
~
ww | |	¡ |  ¡ }|r | d¡dksÏ|s'tdƒ‚W |D ]}| ¡  q*dS |D ]}| ¡  q6w )zDecode uuencoded filer   r   Tz'No valid begin line found in input files   beginó    é   é   r   é   é   Ns    	
r   z Cannot overwrite existing file: z..zRefusing to write to z due to directory traversalr   s   endé    é?   é   é   zWarning: %s
zTruncated input file)r   r   r   r   r   r   r   Úreadliner   Ú
startswithÚsplitr$   ÚintÚ
ValueErrorÚrstripr   r   r   ÚexistsÚsepÚaltsepr    ÚchmodÚstripr%   Úa2b_uuÚstderrr"   r'   )r(   r)   r+   Úquietr,   ÚhdrÚ	hdrfieldsÚfpÚsr-   ÚvÚnbytesr.   r   r   r	   r   d   s‚   




ÿõÿ
þ



€û
öÿÿÿr   c                  C   s2  ddl } | jdd}|jddddd	d
d |jddddd	d
d | ¡ \}}t|ƒdkr6| d¡ t d¡ tjj	}tj
j	}t|ƒdkrH|d }t|ƒdkrR|d }|jrw|jrpt|tƒrct|dƒ}nttjd dƒ t d¡ t||ƒ dS |jr’t|tƒr…t|dƒ}nttjd dƒ t d¡ t||ƒ dS )zuuencode/uudecode main programr   Nz'usage: %prog [-d] [-t] [input [output]])Úusagez-dz--decoder   zDecode (instead of encode)?FÚ
store_true)ÚdestÚhelpÚdefaultÚactionz-tz--textÚtextz2data is text, encoded format unix-compatible text?r0   zincorrect number of argumentsr2   r   z: cannot do -t to stdoutr   z: cannot do -t from stdin)ÚoptparseÚOptionParserÚ
add_optionÚ
parse_argsr$   Úerrorr   Úexitr   r   r    r   rR   r   r   r   ÚprintÚargvr   )rS   ÚparserÚoptionsÚargsÚinputÚoutputr   r   r	   Útest®   s6   





r`   Ú__main__)NN)NNF)Ú__doc__r%   r   r   Ú__all__Ú	Exceptionr   r   r   r`   r   r   r   r   r	   Ú<module>   s   
:J&
ÿ