Provided by: libzip-dev_0.10-1ubuntu1_amd64 bug


       zip_source_function - create data source from function


       libzip (-lzip)


       #include <zip.h>

       struct  zip_source * zip_source_function(struct zip *archive, zip_source_callback fn, void


       The function zip_source_function creates a zip source from the user-provided function  fn,
       which  must  be  of  the  following  type: typedef zip_int64_t (*zip_source_callback)(void
           void *data, zip_uint64_t len, enum zip_source_cmd cmd);

       When called by the library, the first  argument  is  the  userdata  argument  supplied  to
       zip_source_function.   The  next  two arguments are a buffer data of size len when data is
       expected to be returned, or else NULL and 0.  The  last  argument,  cmd,  specifies  which
       action the function should perform:

              ZIP_SOURCE_OPEN      Prepare for reading.  Return 0 on success, -1 on error.

              ZIP_SOURCE_READ      Read data into the buffer data of size len.  Return the number
                                   of bytes placed into data on success, -1 on error.

              ZIP_SOURCE_CLOSE     Reading is done.  Return 0.

              ZIP_SOURCE_STAT      Get meta information for the input data.  data  points  to  an
                                   initialized which should be filled in.  (See zip_stat_init(3).
                                   ) Information only available after the source  has  been  read
                                   (e.g.  size)  can  be  omitted  in  an  earlier  call.  Return
                                   sizeof(struct zip_stat) on success, -1 on error.

              ZIP_SOURCE_ERROR     Get error information.  data points to an array of  two  ints,
                                   which  should  be  filled  with  the libzip error code and the
                                   corresponding system error code for the error  that  occurred.
                                   See  zip_errors(3)  for  details  on  the error codes.  Return
                                   return(2 * sizeof(int)).

              ZIP_SOURCE_FREE      Clean up and free all resources.  Return 0.

       The library will always issue ZIP_SOURCE_OPEN before issuing ZIP_SOURCE_READ.  When it  no
       longer  wishes  to  read from this source, it will issue ZIP_SOURCE_CLOSE.  If the library
       wishes to read the data again, it will  issue  ZIP_SOURCE_OPEN  a  second  time.   If  the
       function is unable to provide the data again, it should return -1.

       ZIP_SOURCE_STAT  can  be  issued  at  any  time.   ZIP_SOURCE_ERROR will only be issued in
       response to the function returning -1.  ZIP_SOURCE_FREE will be the last  command  issued;
       if  ZIP_SOURCE_OPEN  was  called  and  succeeded,  ZIP_SOURCE_CLOSE  will be called before


       Upon successful completion, the created source is returned.  Otherwise, NULL  is  returned
       and the error code in archive is set to indicate the error.


       zip_source_function fails if:

                  Required memory could not be allocated.


       libzip(3),    zip_add(3),    zip_replace(3),   zip_source_buffer(3),   zip_source_file(3),
       zip_source_filep(3), zip_source_free(3), zip_source_zip(3), zip_stat_init(3)


       Dieter Baron <> and Thomas Klausner <>