← back to Atmos Game

assets/gen/.venv/lib/python3.12/site-packages/filelock/__pycache__/_util.cpython-312.pyc

68 lines

�

c�bj���*�UddlmZddlZddlZddlZddlZddlmZmZm	Z	ddl
mZddlm
Z
dd�Zdd�Zdd�Zdd	�Zdd
�dd�Zej&dk7xrej(ej*vZd
ed<ej(ej0vZd
ed<gd�Zy)�)�annotationsN)�EACCES�EIO�EISDIR)�Path)�Finalc��t|�}|r4tj||�x}dk(rttd��||d}|r�3yy)ac
    Write the whole buffer to *fd*, looping over the short writes ``os.write`` is allowed to make.

    A marker written with a bare ``os.write`` can land partially: a peer reading it mid-write parses a truncated record
    as malformed or as a foreign holder. Looping until the buffer drains keeps the record atomic in the process and
    kernel view. No ``fsync``: filelock needs a complete record, not crash-durable storage.

    :param fd: file descriptor open for writing.
    :param data: bytes to write in full.

    :raises OSError: if a write reports zero progress before the record is complete.

    rz5os.write wrote 0 bytes before the record was completeN)�
memoryview�os�write�OSErrorr)�fd�data�	remaining�writtens    �e/Users/macstudio3/Projects/atmos-game/assets/gen/.venv/lib/python3.12/site-packages/filelock/_util.py�	write_allrsH���4� �I�
��x�x��I�.�.�G�1�4��#�V�W�W��g�h�'�	��c�R�	tj|�}|jtj
zst
td|��t	j|j�r5tjdk(rt
td|��ttd|��y#t$rYywxYw)a
    Raise an exception if attempting to open the file for writing would fail.

    Separates files that can never be written from files that are writable but currently locked.

    :param filename: file to check

    :raises OSError: as if the file was opened for writing.

    NzPermission denied�win32zIs a directory)
r�lstatr
�st_mode�stat�S_IWUSR�PermissionErrorr�S_ISDIR�sys�platform�IsADirectoryErrorr)�filename�	file_stats  r�raise_on_not_writable_filer"!s����
�H�H�X�&�	�
������,��f�&9�8�D�D��|�|�I�%�%�&��<�<�7�"�!�&�*=�x�H�H���(8�(�C�C�'������s�B�	B&�%B&c�P�t|�jjdd��y)zp
    Ensure the directory containing the file exists (create it if necessary).

    :param filename: file.

    T)�parents�exist_okN)r�parent�mkdir)r s r�ensure_directory_existsr(As!��	��N������t��<rc�P�|�dtj��dtjd���}t	|�j|�	tj|�}|j|kDs|j|k7ryt	|�j�y#t$rYywxYw)aA
    Atomically break a stale lock file judged stale at modification time *mtime_before*.

    Rename the file to a process-private name before unlinking it, so two processes breaking the same lock cannot
    delete each other's work: only one rename of a given inode wins, the loser gets ``OSError``. After the rename,
    re-check the file. A newer modification time, or a different inode than *ino_before*, means a peer recreated the
    lock between the stale decision and the rename, so we grabbed a live file and abort, leaving the renamed file in
    place. A rollback rename is itself racy, the same trade-off as the soft read/write marker break. The inode check
    matters because filesystems with coarse modification-time granularity (NFS, FAT) can give a same-second recreation
    the old mtime, so mtime alone would miss it and unlink a live lock; the inode is the reliable identity, mirroring
    the token re-check in the soft read/write marker break. ``lstat`` avoids following a hostile symlink swapped in
    after the decision.

    The break name carries a random token so it is unguessable and unique per attempt. Without it two breakers in the
    same process share ``<lock>.break.<pid>``, and a second break can rename a recreated live lock onto that path in
    the window between the re-verify ``lstat`` above and the ``unlink`` below, deleting a live lock the inode check
    just approved. A private name keeps anyone else from targeting our break path, matching the soft read/write marker
    break.

    :param lock_file: path to the lock file to break.
    :param mtime_before: modification time observed when the lock was judged stale.
    :param ino_before: inode number observed when the lock was judged stale.

    :raises OSError: if the rename fails (e.g. the file vanished or is not owned in a sticky directory).

    z.break.�.�N)r�getpid�secrets�	token_hexr�renamerr
�st_mtime�st_ino�unlink)�	lock_file�mtime_before�
ino_before�
break_path�st_afters     r�break_lock_filer8Ks���6�;�g�b�i�i�k�]�!�G�4E�4E�b�4I�3J�K�J���O���:�&���8�8�J�'�����<�'�8�?�?�j�+H���������	����s�B�	B%�$B%)rc�|�|�trtj|d�ytj|dt��y)N)�follow_symlinks)�_SUPPORTS_UTIME_FDr�utime�_SUPPORTS_UTIME_NOFOLLOW)�namers  r�touchr?qs1��

�~�,�
����T����H�H�T�4�-E�)E�FrrzFinal[bool]r;r=)r8r(r"r?r)r�intr�bytes�return�None)r �strrBrC)r z
Path | strrBrC)r3rDr4�floatr5r@rBrC)r>rDrz
int | NonerBrC)�
__future__rrr-rr�errnorrr�pathlibr�typingrrr"r(r8r?rr<�supports_fdr;�__annotations__�supports_follow_symlinksr=�__all__�rr�<module>rOs���"�	���
�%�%���(�*D�@=�#�L*.�G�#&�,�,�'�"9�"X�b�h�h�"�.�.�>X��K�X�(*���B�4O�4O�(O��+�O��r