NAME¶
zip_source_function - create data source from function
LIBRARY¶
libzip (-lzip)
SYNOPSIS¶
#include <zip.h>
struct zip_source *
zip_source_function(
struct zip
*archive,
zip_source_callback fn,
void
*userdata);
DESCRIPTION¶
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 *state,
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
allocated struct zip_stat, which should be initialized using
zip_stat_init(3) and then filled in. 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. NOTE:
zip_source_function() may be called with this argument even after
being called with ZIP_SOURCE_CLOSE.
- 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 ZIP_SOURCE_FREE.
RETURN VALUES¶
Upon successful completion, the created source is returned. Otherwise, NULL is
returned and the error code in
archive is set to indicate the error.
ERRORS¶
zip_source_function() fails if:
- [ZIP_ER_MEMORY]
- Required memory could not be allocated.
SEE ALSO¶
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)
AUTHORS¶
Dieter Baron <
dillo@nih.at> and Thomas Klausner <
tk@giga.or.at>