
![c           @  se  d  d l  m Z m Z m Z d  d l m Z d  d l m Z m Z m	 Z	 m
 Z
 d  d l m Z m Z d d l m Z d d l m Z m Z m Z m Z m Z m Z d d l m Z m Z d	 e f d
     YZ e d d d   Z e d d e e e e d   Z e d d d d   Z e d d d d   Z e d d d   Z e d d e d   Z  d S(   i(   t   divisiont   print_functiont   unicode_literals(   t   contextmanager(   t   castt   c_void_pt   POINTERt   create_string_buffer(   t   fstatt   stati   (   t   ffi(   t   ARCHIVE_EOFt   OPEN_CALLBACKt   READ_CALLBACKt   CLOSE_CALLBACKt   VOID_CBt	   page_size(   t   ArchiveEntryt   new_archive_entryt   ArchiveReadc           B  s   e  Z d    Z d   Z RS(   c         C  s   | |  _  d  S(   N(   t   _pointer(   t   selft	   archive_p(    (    s.   lib/python2.7/site-packages/libarchive/read.pyt   __init__   s    c         c  sb   |  j  } t j } t   A } t | |  } x( | | |  } | t k rO d S| Vq0 WWd QXd S(   u/   Iterates through an archive's entries.
        N(   R   R
   t   read_next_header2R   R   R   (   R   R   R   t   entry_pt   entryt   r(    (    s.   lib/python2.7/site-packages/libarchive/read.pyt   __iter__   s    		(   t   __name__t
   __module__R   R   (    (    (    s.   lib/python2.7/site-packages/libarchive/read.pyR      s   	u   allc         c  sX   t  j   } t t  d |  |  t t  d |   |  z	 | VWd t  j |  Xd S(   u   Creates an archive struct suitable for reading from an archive.

    Returns a pointer if successful. Raises ArchiveError on error.
    u   read_support_filter_u   read_support_format_N(   R
   t   read_newt   getattrt	   read_free(   t   format_namet   filter_nameR   (    (    s.   lib/python2.7/site-packages/libarchive/read.pyt   new_archive_read    s    	c      
   c  sd   t  |  } t |   } t |  }	 t | |  + }
 t j |
 d | | |	  | |
  VWd QXd S(   u-   Read an archive using a custom function.
    N(   R   R   R   R$   R
   t	   read_opent   None(   t	   read_funcR"   R#   t	   open_funct
   close_funct
   block_sizet   archive_read_classt   open_cbt   read_cbt   close_cbR   (    (    s.   lib/python2.7/site-packages/libarchive/read.pyt   custom_reader/   s    i   c      
   c  sg   t  | |  R } y t |   j } Wn t t f k
 r> n Xt j | |  |  t |  VWd QXd S(   u,   Read an archive from a file descriptor.
    N(   R$   R   t
   st_blksizet   OSErrort   AttributeErrorR
   t   read_open_fdR   (   t   fdR"   R#   R*   R   (    (    s.   lib/python2.7/site-packages/libarchive/read.pyt	   fd_reader?   s    c      
   c  sg   t  | |  R } y t |   j } Wn t t f k
 r> n Xt j | |  |  t |  VWd QXd S(   u!   Read an archive from a file.
    N(   R$   R	   R0   R1   R2   R
   t   read_open_filename_wR   (   t   pathR"   R#   R*   R   (    (    s.   lib/python2.7/site-packages/libarchive/read.pyt   file_readerL   s    c      	   c  sI   t  | |  4 } t j | t |  t  t |    t |  VWd QXd S(   u!   Read an archive from memory.
    N(   R$   R
   t   read_open_memoryR   R   t   lenR   (   t   bufR"   R#   R   (    (    s.   lib/python2.7/site-packages/libarchive/read.pyt   memory_readerY   s    "c   	   
   #  s   t  |    t   t       f d   } t t  } t |  } t t  } t | |  + } t j	 | d | | |  t |  VWd QXd S(   ui   Read an archive from a stream.

    The `stream` object must support the standard `readinto` method.
    c           s2    j     } t | t t   }  | d <| S(   Ni    (   t   readintoR   R   R   (   R   t   contextt   ptrptrt   length(   R;   t   buf_pt   stream(    s.   lib/python2.7/site-packages/libarchive/read.pyR'   l   s    
N(   R   R   R   R   R   R   R   R$   R
   R%   R&   R   (	   RB   R"   R#   R*   R'   R,   R-   R.   R   (    (   R;   RA   RB   s.   lib/python2.7/site-packages/libarchive/read.pyt   stream_readerb   s    	N(!   t
   __future__R    R   R   t
   contextlibR   t   ctypesR   R   R   R   t   osR   R	   t    R
   R   R   R   R   R   R   R   R   R   t   objectR   R$   R/   R5   R8   R<   RC   (    (    (    s.   lib/python2.7/site-packages/libarchive/read.pyt   <module>   s,   ".	