o
    +keJ                     @   s   d dl Z d dlZddlmZ ze jZW n ey   e jZY nw eeddZdd Z	dd	 Z
G d
d deZdddZdd Zdd Zdd ZdS )    N   )Bufferi   )limitc                 C   s$   t | tr	t| } | ddd S )zMsplit a list of zero-terminated strings into python not-zero-terminated bytes    N)
isinstance	bytearraybytessplit)buf r   7usr/lib/python3.10/site-packages/borg/platform/xattr.pysplit_string0   s   
r   c                 C   sJ   g }t | }|r#|d }|t|dd|   |d| d }|s|S )zMsplit a list of length-prefixed strings into python not-length-prefixed bytesr      N)
memoryviewappendr	   )r   resultmvlengthr   r   r   split_lstring   s   r   c                   @   s   e Zd ZdZdS )BufferTooSmallErrorzBthe buffer given to a xattr function was too small for the result.N)__name__
__module____qualname____doc__r   r   r   r   r   #   s    r   Fc                 C   s   ddl m} | dk r8| }|r|tjkrtzt|}W n ty(   d}Y nw t|t	r2d| }t
||||rB| ttkrBt| S )Nr   )	get_errnor    z<FD %d>)r   r   errnoZERANGEr   osstrerror
ValueErrorr   intOSErrorlenbuffer)rvpathdetect_buffer_too_smallr   emsgr   r   r   _check'   s    
r*   c                 C   sd   t |ttfs	J tt}	 t|}zt| ||||dd}W ||fS  ty0   |d9 }Y nw qNTr'   r   r   r	   r!   r#   r$   getr*   r   )funcr&   sizer   nr   r   r   _listxattr_inner@   s   
r2   c                 C   st   t |ttfs	J t |tsJ tt}	 t|}zt| |||||dd}W ||fS  ty8   |d9 }Y nw qr+   r-   )r/   r&   namer0   r   r1   r   r   r   _getxattr_innerM   s   
r4   c                 C   sN   t |ttfs	J t |tsJ t |tsJ t| |||t||dd d S )NFr,   )r   r	   r!   r*   r#   )r/   r&   r3   valuer   r   r   _setxattr_inner[   s    r6   )NF)r   r   helpersr   ZENOATTRAttributeErrorENODATAr   r$   r   r   	Exceptionr   r*   r2   r4   r6   r   r   r   r   <module>   s     


