ZIP_EXTERN struct zip_source * zip_source_function(struct zip *za, zip_source_callback zcb, void *ud) { struct zip_source *zs; if (za == NULL) return NULL; if ((zs=_zip_source_new(za)) == NULL) return NULL; zs->cb.f = zcb; zs->ud = ud; return zs; }
zip_source_layered(struct zip *za, struct zip_source *src, zip_source_layered_callback cb, void *ud) { struct zip_source *zs; if (za == NULL) return NULL; if ((zs=_zip_source_new(za)) == NULL) return NULL; zs->src = src; zs->cb.l = cb; zs->ud = ud; return zs; }
ZIP_EXTERN zip_source_t * zip_source_function_create(zip_source_callback zcb, void *ud, zip_error_t *error) { zip_source_t *zs; if ((zs=_zip_source_new(error)) == NULL) return NULL; zs->cb.f = zcb; zs->ud = ud; zs->supports = zcb(ud, NULL, 0, ZIP_SOURCE_SUPPORTS); if (zs->supports < 0) { zs->supports = ZIP_SOURCE_SUPPORTS_READABLE; } return zs; }