o
    HXîhµ  ã                   @   sÀ   	 d dl Z d dlZd dlZd dlZd dlZd dlmZ d dlmZm	Z	 d dl
mZ d dlmZmZ edƒZdd„ Zeƒ ZG d	d
„ d
ƒZdd„ Zdd„ ZG dd„ dejƒZedkr^e ¡  dS dS )é    N)ÚProcess)ÚverboseÚcpython_only)Úimport_module)ÚTESTFNÚunlinkÚfcntlc               
   C   s  zt j W n ty   d} Y nw d} tj d¡stjdkr@t d¡dkr*d}d}nd}d}t || | d	 d
d
d
t	j
d
¡}n6tj d¡rSt dd
d
d
t	j
d
d
¡}n#tjdv rft dt	j
d
d
d
d
d
d
¡}nt d	|  d	 t	j
d
d
d
d
d
¡}|rtrtdt|ƒƒ |S )NZllZqq)ZnetbsdZfreebsdZopenbsdÚdarwinÚlé   ÚiZlxxxxZhhr   ZgnukfreebsdZqqihhi)zhp-uxBZ	unixware7Zhhllliizstruct.pack: )ÚosÚO_LARGEFILEÚAttributeErrorÚsysÚplatformÚ
startswithÚstructÚcalcsizeÚpackr   ÚF_WRLCKr   ÚprintÚrepr)Z	start_lenZoff_tZpid_tÚlockdata© r   ú9/opt/python-3.10.19/usr/lib/python3.10/test/test_fcntl.pyÚget_lockdata   s2   
ÿ
ÿ
 r   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚBadFilec                 C   s
   || _ d S ©N©Úfn)Úselfr    r   r   r   Ú__init__3   ó   
zBadFile.__init__c                 C   s   | j S r   r   ©r!   r   r   r   Úfileno5   s   zBadFile.filenoN)Ú__name__Ú
__module__Ú__qualname__r"   r%   r   r   r   r   r   2   s    r   c                 C   sV   t | dƒ}z zt ||¡ W n	 ty   Y nw W | ¡  d S W | ¡  d S | ¡  w ©Núwb+)Úopenr   ÚlockfÚBlockingIOErrorÚclose©ZfnameÚcmdÚfr   r   r   Útry_lockf_on_other_process_fail8   s   
ÿÿþr2   c                 C   s0   t | dƒ}t ||¡ t |tj¡ | ¡  d S r)   )r+   r   r,   ÚLOCK_UNr.   r/   r   r   r   Útry_lockf_on_other_processA   s   
r4   c                   @   sô   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zedd„ ƒZ	e
 e ¡  d¡o,e ¡ dkd¡dd„ ƒZdd„ Ze
 e ¡ dkd¡dd„ ƒZe
 e ¡ dkd¡dd„ ƒZedd„ ƒZe
 ejdkd¡dd„ ƒZe
 eed ƒoqeed!ƒd"¡d#d$„ ƒZd%S )&Ú	TestFcntlc                 C   s
   d | _ d S r   )r1   r$   r   r   r   ÚsetUpI   r#   zTestFcntl.setUpc                 C   s$   | j r| j js| j  ¡  ttƒ d S r   )r1   Úclosedr.   r   r   r$   r   r   r   ÚtearDownL   s   
zTestFcntl.tearDownc                 C   sh   t tdƒ| _t | j ¡ tjtj¡}trt	d|ƒ t | j ¡ tj
t¡}tr-t	dt|ƒƒ | j ¡  d S ©NÚwbz#Status from fcntl with O_NONBLOCK: z!String from fcntl with F_SETLKW: )r+   r   r1   r   r%   ÚF_SETFLr   Ú
O_NONBLOCKr   r   ÚF_SETLKWr   r   r.   ©r!   Úrvr   r   r   Útest_fcntl_filenoQ   s   
zTestFcntl.test_fcntl_filenoc                 C   s`   t tdƒ| _t | jtjtj¡}trtd|ƒ t | jtj	t
¡}tr)tdt|ƒƒ | j ¡  d S r9   )r+   r   r1   r   r;   r   r<   r   r   r=   r   r   r.   r>   r   r   r   Útest_fcntl_file_descriptor\   s   
z$TestFcntl.test_fcntl_file_descriptorc                 C   sþ   |   t¡ t dtjtj¡ W d   ƒ n1 sw   Y  |   t¡ t tdƒtjtj¡ W d   ƒ n1 s9w   Y  |   t¡ t dtjtj¡ W d   ƒ n1 sWw   Y  |   t¡ t tdƒtjtj¡ W d   ƒ d S 1 sxw   Y  d S )NéÿÿÿÿÚspam)ÚassertRaisesÚ
ValueErrorr   r;   r   r<   r   Ú	TypeErrorr$   r   r   r   Útest_fcntl_bad_fileg   s   ÿÿÿ"ÿzTestFcntl.test_fcntl_bad_filec                 C   s  ddl m}m} |  t¡ t |d tjtj¡ W d   ƒ n1 s#w   Y  |  t¡ t t	|d ƒtjtj¡ W d   ƒ n1 sEw   Y  |  t¡ t |d tjtj¡ W d   ƒ n1 sew   Y  |  t¡ t t	|d ƒtjtj¡ W d   ƒ d S 1 sˆw   Y  d S )Nr   )ÚINT_MAXÚINT_MINé   )
Ú	_testcapirH   rI   rD   ÚOverflowErrorr   r;   r   r<   r   )r!   rH   rI   r   r   r   Útest_fcntl_bad_file_overflowq   s   ÿÿÿ"ÿz&TestFcntl.test_fcntl_bad_file_overflowZarmZLinuxz2ARM Linux returns EINVAL for F_NOTIFY DN_MULTISHOTc              	   C   sx   zt j}t j}W n ty   |  d¡ Y nw t tj tj 	t
¡¡tj¡}zt   |||¡ W t |¡ d S t |¡ w )Nz$F_NOTIFY or DN_MULTISHOT unavailable)r   ÚF_NOTIFYÚDN_MULTISHOTr   ZskipTestr   r+   ÚpathÚdirnameÚabspathr   ÚO_RDONLYr.   )r!   r0   ÚflagsÚfdr   r   r   Útest_fcntl_64_bit~   s   
ÿzTestFcntl.test_fcntl_64_bitc                 C   s    t tdƒ| _| j ¡ }t |tj¡ t |tj¡ t | jtjtjB ¡ t | jtj¡ t |tj	¡ t |tj¡ |  
ttjdtj¡ |  
ttjdtj¡ d S )Nr*   rB   rC   )r+   r   r1   r%   r   ÚflockÚLOCK_SHr3   ÚLOCK_NBÚLOCK_EXrD   rE   rF   )r!   r%   r   r   r   Ú
test_flock   s   
zTestFcntl.test_flockZAIXzAIX returns PermissionErrorc                 C   óh   t tdƒ| _tjtjB }t | j|¡ ttt|fd}| 	¡  | 
¡  t | jtj¡ |  |jd¡ d S ©Nr*   )ÚtargetÚargsr   )r+   r   r1   r   rZ   rY   r,   r   r2   ÚstartÚjoinr3   ÚassertEqualÚexitcode©r!   r0   Úpr   r   r   Útest_lockf_exclusivež   ó   zTestFcntl.test_lockf_exclusivec                 C   r\   r]   )r+   r   r1   r   rX   rY   r,   r   r4   r`   ra   r3   rb   rc   rd   r   r   r   Útest_lockf_share©   rg   zTestFcntl.test_lockf_sharec                 C   s&   dd l }|  ttj|jd tj¡ d S )Nr   rJ   )rK   rD   rL   r   rW   rH   rX   )r!   rK   r   r   r   Útest_flock_overflow´   s   ÿzTestFcntl.test_flock_overflowr	   z$F_GETPATH is only available on macosc                 C   sL   t tdƒ| _tj t¡ d¡}t | j ¡ tj	t
t|ƒƒ¡}|  ||¡ d S )Nr:   zutf-8)r+   r   r1   r   rP   rR   Úencoder   r%   Z	F_GETPATHÚbytesÚlenrb   )r!   ZexpectedÚresr   r   r   Útest_fcntl_f_getpathº   s   zTestFcntl.test_fcntl_f_getpathÚF_SETPIPE_SZÚF_GETPIPE_SZzAF_SETPIPE_SZ and F_GETPIPE_SZ are not available on all platforms.c              	   C   sŒ   t  ¡ \}}z4t |tj¡}|d }|dk rt d¡‚t |tj|¡ |  t |tj¡|¡ W t  |¡ t  |¡ d S t  |¡ t  |¡ w )Né   i   z+default pipesize too small to perform test.)	r   Úpiper   rp   ÚunittestZSkipTestro   rb   r.   )r!   Ztest_pipe_rZtest_pipe_wZpipesize_defaultÚpipesizer   r   r   Útest_fcntl_f_pipesizeÁ   s    ÿÿ

ÿzTestFcntl.test_fcntl_f_pipesizeN)r&   r'   r(   r6   r8   r@   rA   rG   r   rM   rs   ZskipIfr   Úmachiner   ÚsystemrV   r[   rf   rh   ri   r   rn   Z
skipUnlessÚhasattrr   ru   r   r   r   r   r5   G   s6    

þ






þr5   Ú__main__)r   r   r   r   rs   Úmultiprocessingr   Ztest.supportr   r   Ztest.support.import_helperr   Ztest.support.os_helperr   r   r   r   r   r   r2   r4   ZTestCaser5   r&   Úmainr   r   r   r   Ú<module>   s*    	 ÿ