Use zip_source_call. --HG-- branch : HEAD
diff --git a/lib/zip_close.c b/lib/zip_close.c index c0a2301..5b45623 100644 --- a/lib/zip_close.c +++ b/lib/zip_close.c
@@ -44,11 +44,11 @@ static int add_data(struct zip *, struct zip_source *, struct zip_dirent *, FILE *); -static int add_data_comp(zip_source_callback, void *, struct zip_stat *, +static int add_data_comp(struct zip_source *, struct zip_stat *, FILE *, struct zip_error *); -static int add_data_uncomp(struct zip *, zip_source_callback, void *, +static int add_data_uncomp(struct zip *, struct zip_source *, struct zip_stat *, FILE *); -static void ch_set_error(struct zip_error *, zip_source_callback, void *); +static void ch_set_error(struct zip_error *, struct zip_source *); static int copy_data(FILE *, off_t, FILE *, struct zip_error *); static int write_cdir(struct zip *, struct zip_cdir *, FILE *); static int _zip_cdir_set_comment(struct zip_cdir *, struct zip *); @@ -313,23 +313,20 @@ static int -add_data(struct zip *za, struct zip_source *zs, struct zip_dirent *de, FILE *ft) +add_data(struct zip *za, struct zip_source *src, struct zip_dirent *de, + FILE *ft) { off_t offstart, offend; - zip_source_callback cb; - void *ud; struct zip_stat st; - cb = zs->f; - ud = zs->ud; - - if (cb(ud, &st, sizeof(st), ZIP_SOURCE_STAT) < (zip_int64_t)sizeof(st)) { - ch_set_error(&za->error, cb, ud); + if (zip_source_call(src, &st, sizeof(st), + ZIP_SOURCE_STAT) < (zip_int64_t)sizeof(st)) { + ch_set_error(&za->error, src); return -1; } - if (cb(ud, NULL, 0, ZIP_SOURCE_OPEN) < 0) { - ch_set_error(&za->error, cb, ud); + if (zip_source_call(src, NULL, 0, ZIP_SOURCE_OPEN) < 0) { + ch_set_error(&za->error, src); return -1; } @@ -339,16 +336,16 @@ return -1; if (st.comp_method != ZIP_CM_STORE) { - if (add_data_comp(cb, ud, &st, ft, &za->error) < 0) + if (add_data_comp(src, &st, ft, &za->error) < 0) return -1; } else { - if (add_data_uncomp(za, cb, ud, &st, ft) < 0) + if (add_data_uncomp(za, src, &st, ft) < 0) return -1; } - if (cb(ud, NULL, 0, ZIP_SOURCE_CLOSE) < 0) { - ch_set_error(&za->error, cb, ud); + if (zip_source_call(src, NULL, 0, ZIP_SOURCE_CLOSE) < 0) { + ch_set_error(&za->error, src); return -1; } @@ -383,14 +380,14 @@ static int -add_data_comp(zip_source_callback cb, void *ud, struct zip_stat *st,FILE *ft, +add_data_comp(struct zip_source *src, struct zip_stat *st, FILE *ft, struct zip_error *error) { char buf[BUFSIZE]; zip_int64_t n; st->comp_size = 0; - while ((n=cb(ud, buf, sizeof(buf), ZIP_SOURCE_READ)) > 0) { + while ((n=zip_source_call(src, buf, sizeof(buf), ZIP_SOURCE_READ)) > 0) { if (fwrite(buf, 1, n, ft) != (size_t)n) { _zip_error_set(error, ZIP_ER_WRITE, errno); return -1; @@ -399,7 +396,7 @@ st->comp_size += n; } if (n < 0) { - ch_set_error(error, cb, ud); + ch_set_error(error, src); return -1; } @@ -409,7 +406,7 @@ static int -add_data_uncomp(struct zip *za, zip_source_callback cb, void *ud, +add_data_uncomp(struct zip *za, struct zip_source *src, struct zip_stat *st, FILE *ft) { char b1[BUFSIZE], b2[BUFSIZE]; @@ -446,8 +443,8 @@ end = 0; while (!end) { if (zstr.avail_in == 0 && !flush) { - if ((n=cb(ud, b1, sizeof(b1), ZIP_SOURCE_READ)) < 0) { - ch_set_error(&za->error, cb, ud); + if ((n=zip_source_call(src, b1, sizeof(b1), ZIP_SOURCE_READ)) < 0) { + ch_set_error(&za->error, src); deflateEnd(&zstr); return -1; } @@ -492,11 +489,12 @@ static void -ch_set_error(struct zip_error *error, zip_source_callback cb, void *ud) +ch_set_error(struct zip_error *error, struct zip_source *src) { int e[2]; - if ((cb(ud, e, sizeof(e), ZIP_SOURCE_ERROR)) < (zip_int64_t)sizeof(e)) { + if ((zip_source_call(src, e, sizeof(e), + ZIP_SOURCE_ERROR)) < (zip_int64_t)sizeof(e)) { error->zip_err = ZIP_ER_INTERNAL; error->sys_err = 0; }