o
p̦i @ sl d Z ddlZddlZddlZg dZG dd deZddddd Zdd
dZdd
Z e
dkr4e dS dS )zImplementation of the UUencode and UUdecode functions.
encode(in_file, out_file [,name, mode], *, backtick=False)
decode(in_file [, out_file, mode, quiet])
N)Errorencodedecodec @ s e Zd ZdS )r N)__name__
__module____qualname__ r r /usr/lib/python3.10/uu.pyr ' s r Fbacktickc C sx g }z| dkrt jj} n/t| tr;|du rtj| }|du r1zt| j }W n t
y0 Y nw t| d} || |dkrDt j
j}nt|trSt|d}|| |du rYd}|du r_d}|dd}|dd }|d
|d@ |f d | d
}t|dkr|tj||d | d
}t|dks|r|d n|d W |D ]}| qdS |D ]}| qw )z
Uuencode file-Nrbwbi
z\n
z\rzbegin %o %s
i ascii- r r
s `
end
s
end
)sysstdinbuffer
isinstancestrospathbasenamestatst_modeAttributeErroropenappendstdoutreplacewriter readlenbinasciib2a_uuclose)in_fileout_filenamemoder opened_filesdatafr r r r * sR
r c
C s~ g }| dkrt jj} nt| trt| d} || z | }|s'td| ds-q|
dd}t|dkrR|d dkrRz t|d
d W n
t
yQ Y nw q|du r|d d
d}tj|rntd| | tjsdtj |v stjr| tjsdtj |v rtd| d|du rt|d
d}|dkrt jj}nt|trt|d}t|| |}|| | }|r |d
dkr zt|} W n6 tjy }
z(|d d d@ d d d }t|d| } |st jd|
W Y d}
~
nd}
~
ww || | }|r |d
dks|s'tdW |D ]}| q*dS |D ]}| q6w )zDecode uuencoded filer r
Tz'No valid begin line found in input files begin r Ns
r z Cannot overwrite existing file: z..zRefusing to write to z due to directory traversalr s end ? zWarning: %s
zTruncated input file)r r r r r r r readliner
startswithsplitr$ int
ValueErrorrstripr r r existssepaltsepr chmodstripr% a2b_uustderrr" r' )
r( r) r+ quietr, hdr hdrfieldsfpsr- vnbytesr. r r r r d s
r c C s2 ddl } | jdd}|jddddd d
d |jdd
ddd d
d | \}}t|dkr6|d td tjj }tj
j }t|dkrH|d }t|dkrR|d }|jrw|jrpt
|trct|d}n
ttjd d td t|| dS |jrt
|trt|d}n
ttjd d td t|| dS )zuuencode/uudecode main programr Nz'usage: %prog [-d] [-t] [input [output]])usagez-dz--decoder zDecode (instead of encode)?F
store_true)desthelpdefaultactionz-tz--texttextz2data is text, encoded format unix-compatible text?r0 zincorrect number of argumentsr2 r z: cannot do -t to stdoutr
z: cannot do -t from stdin)optparseOptionParser
add_option
parse_argsr$ errorr exitr r r r rR r r r printargvr )rS parseroptionsargsinputoutputr r r test s6
r` __main__)NN)NNF)__doc__r% r r __all__ Exceptionr r r r` r r r r r