diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/apk_io.h | 22 | ||||
-rw-r--r-- | src/archive.c | 12 | ||||
-rw-r--r-- | src/gunzip.c | 25 | ||||
-rw-r--r-- | src/io.c | 83 | ||||
-rw-r--r-- | src/url.c | 12 |
5 files changed, 68 insertions, 86 deletions
diff --git a/src/apk_io.h b/src/apk_io.h index 26c3f28..c44ed55 100644 --- a/src/apk_io.h +++ b/src/apk_io.h @@ -53,10 +53,14 @@ struct apk_file_info { struct apk_xattr_array *xattrs; }; +struct apk_istream; +struct apk_bstream; +struct apk_ostream; + struct apk_istream_ops { - void (*get_meta)(void *stream, struct apk_file_meta *meta); - ssize_t (*read)(void *stream, void *ptr, size_t size); - void (*close)(void *stream); + void (*get_meta)(struct apk_istream *is, struct apk_file_meta *meta); + ssize_t (*read)(struct apk_istream *is, void *ptr, size_t size); + void (*close)(struct apk_istream *is); }; struct apk_istream { @@ -67,9 +71,9 @@ struct apk_istream { #define APK_BSTREAM_EOF 0x0002 struct apk_bstream_ops { - void (*get_meta)(void *stream, struct apk_file_meta *meta); - apk_blob_t (*read)(void *stream, apk_blob_t token); - void (*close)(void *stream, size_t *size); + void (*get_meta)(struct apk_bstream *bs, struct apk_file_meta *meta); + apk_blob_t (*read)(struct apk_bstream *bs, apk_blob_t token); + void (*close)(struct apk_bstream *bs, size_t *size); }; struct apk_bstream { @@ -78,8 +82,8 @@ struct apk_bstream { }; struct apk_ostream_ops { - ssize_t (*write)(void *stream, const void *buf, size_t size); - int (*close)(void *stream); + ssize_t (*write)(struct apk_ostream *os, const void *buf, size_t size); + int (*close)(struct apk_ostream *os); }; struct apk_ostream { @@ -110,7 +114,7 @@ struct apk_istream *apk_istream_from_url_gz(const char *url); ssize_t apk_istream_skip(struct apk_istream *istream, size_t size); #define APK_SPLICE_ALL 0xffffffff -ssize_t apk_istream_splice(void *stream, int fd, size_t size, +ssize_t apk_istream_splice(struct apk_istream *is, int fd, size_t size, apk_progress_cb cb, void *cb_ctx); static inline struct apk_istream *apk_istream_from_fd(int fd) diff --git a/src/archive.c b/src/archive.c index 86f2e3d..e04e583 100644 --- a/src/archive.c +++ b/src/archive.c @@ -89,20 +89,18 @@ struct apk_tar_entry_istream { time_t mtime; }; -static void tar_entry_get_meta(void *stream, struct apk_file_meta *meta) +static void tar_entry_get_meta(struct apk_istream *is, struct apk_file_meta *meta) { - struct apk_tar_entry_istream *teis = - container_of(stream, struct apk_tar_entry_istream, is); + struct apk_tar_entry_istream *teis = container_of(is, struct apk_tar_entry_istream, is); *meta = (struct apk_file_meta) { .atime = teis->mtime, .mtime = teis->mtime, }; } -static ssize_t tar_entry_read(void *stream, void *ptr, size_t size) +static ssize_t tar_entry_read(struct apk_istream *is, void *ptr, size_t size) { - struct apk_tar_entry_istream *teis = - container_of(stream, struct apk_tar_entry_istream, is); + struct apk_tar_entry_istream *teis = container_of(is, struct apk_tar_entry_istream, is); ssize_t r; if (size > teis->bytes_left) @@ -131,7 +129,7 @@ static ssize_t tar_entry_read(void *stream, void *ptr, size_t size) return r; } -static void tar_entry_close(void *stream) +static void tar_entry_close(struct apk_istream *is) { } diff --git a/src/gunzip.c b/src/gunzip.c index 2de841b..5d96c7e 100644 --- a/src/gunzip.c +++ b/src/gunzip.c @@ -30,10 +30,9 @@ struct apk_gzip_istream { apk_blob_t cbarg; }; -static void gzi_get_meta(void *stream, struct apk_file_meta *meta) +static void gzi_get_meta(struct apk_istream *is, struct apk_file_meta *meta) { - struct apk_gzip_istream *gis = - container_of(stream, struct apk_gzip_istream, is); + struct apk_gzip_istream *gis = container_of(is, struct apk_gzip_istream, is); apk_bstream_get_meta(gis->bs, meta); } @@ -47,10 +46,9 @@ static int gzi_boundary_change(struct apk_gzip_istream *gis) return r; } -static ssize_t gzi_read(void *stream, void *ptr, size_t size) +static ssize_t gzi_read(struct apk_istream *is, void *ptr, size_t size) { - struct apk_gzip_istream *gis = - container_of(stream, struct apk_gzip_istream, is); + struct apk_gzip_istream *gis = container_of(is, struct apk_gzip_istream, is); int r; if (gis->err != 0) { @@ -134,10 +132,9 @@ ret: return size - gis->zs.avail_out; } -static void gzi_close(void *stream) +static void gzi_close(struct apk_istream *is) { - struct apk_gzip_istream *gis = - container_of(stream, struct apk_gzip_istream, is); + struct apk_gzip_istream *gis = container_of(is, struct apk_gzip_istream, is); inflateEnd(&gis->zs); apk_bstream_close(gis->bs, NULL); @@ -184,9 +181,9 @@ struct apk_gzip_ostream { z_stream zs; }; -static ssize_t gzo_write(void *stream, const void *ptr, size_t size) +static ssize_t gzo_write(struct apk_ostream *os, const void *ptr, size_t size) { - struct apk_gzip_ostream *gos = (struct apk_gzip_ostream *) stream; + struct apk_gzip_ostream *gos = container_of(os, struct apk_gzip_ostream, os); unsigned char buffer[1024]; ssize_t have, r; @@ -209,9 +206,9 @@ static ssize_t gzo_write(void *stream, const void *ptr, size_t size) return size; } -static int gzo_close(void *stream) +static int gzo_close(struct apk_ostream *os) { - struct apk_gzip_ostream *gos = (struct apk_gzip_ostream *) stream; + struct apk_gzip_ostream *gos = container_of(os, struct apk_gzip_ostream, os); unsigned char buffer[1024]; size_t have; int r, rc = 0; @@ -229,7 +226,7 @@ static int gzo_close(void *stream) rc = r; deflateEnd(&gos->zs); - free(stream); + free(gos); return rc; } @@ -63,17 +63,15 @@ struct apk_fd_istream { int (*translate_status)(int status); }; -static void fdi_get_meta(void *stream, struct apk_file_meta *meta) +static void fdi_get_meta(struct apk_istream *is, struct apk_file_meta *meta) { - struct apk_fd_istream *fis = - container_of(stream, struct apk_fd_istream, is); + struct apk_fd_istream *fis = container_of(is, struct apk_fd_istream, is); apk_file_meta_from_fd(fis->fd, meta); } -static ssize_t fdi_read(void *stream, void *ptr, size_t size) +static ssize_t fdi_read(struct apk_istream *is, void *ptr, size_t size) { - struct apk_fd_istream *fis = - container_of(stream, struct apk_fd_istream, is); + struct apk_fd_istream *fis = container_of(is, struct apk_fd_istream, is); ssize_t i = 0, r; if (ptr == NULL) { @@ -100,10 +98,9 @@ static ssize_t fdi_read(void *stream, void *ptr, size_t size) return i; } -static void fdi_close(void *stream) +static void fdi_close(struct apk_istream *is) { - struct apk_fd_istream *fis = - container_of(stream, struct apk_fd_istream, is); + struct apk_fd_istream *fis = container_of(is, struct apk_fd_istream, is); int status; close(fis->fd); @@ -165,11 +162,10 @@ ssize_t apk_istream_skip(struct apk_istream *is, size_t size) return done; } -ssize_t apk_istream_splice(void *stream, int fd, size_t size, +ssize_t apk_istream_splice(struct apk_istream *is, int fd, size_t size, apk_progress_cb cb, void *cb_ctx) { static void *splice_buffer = NULL; - struct apk_istream *is = (struct apk_istream *) stream; unsigned char *buf, *mmapbase = MAP_FAILED; size_t bufsz, done = 0, togo; ssize_t r; @@ -234,17 +230,15 @@ struct apk_istream_bstream { size_t size; }; -static void is_bs_get_meta(void *stream, struct apk_file_meta *meta) +static void is_bs_get_meta(struct apk_bstream *bs, struct apk_file_meta *meta) { - struct apk_istream_bstream *isbs = - container_of(stream, struct apk_istream_bstream, bs); + struct apk_istream_bstream *isbs = container_of(bs, struct apk_istream_bstream, bs); return apk_istream_get_meta(isbs->is, meta); } -static apk_blob_t is_bs_read(void *stream, apk_blob_t token) +static apk_blob_t is_bs_read(struct apk_bstream *bs, apk_blob_t token) { - struct apk_istream_bstream *isbs = - container_of(stream, struct apk_istream_bstream, bs); + struct apk_istream_bstream *isbs = container_of(bs, struct apk_istream_bstream, bs); ssize_t size; apk_blob_t ret; @@ -296,10 +290,9 @@ ret: return ret; } -static void is_bs_close(void *stream, size_t *size) +static void is_bs_close(struct apk_bstream *bs, size_t *size) { - struct apk_istream_bstream *isbs = - container_of(stream, struct apk_istream_bstream, bs); + struct apk_istream_bstream *isbs = container_of(bs, struct apk_istream_bstream, bs); if (size != NULL) *size = isbs->size; @@ -341,17 +334,15 @@ struct apk_mmap_bstream { apk_blob_t left; }; -static void mmap_get_meta(void *stream, struct apk_file_meta *meta) +static void mmap_get_meta(struct apk_bstream *bs, struct apk_file_meta *meta) { - struct apk_mmap_bstream *mbs = - container_of(stream, struct apk_mmap_bstream, bs); + struct apk_mmap_bstream *mbs = container_of(bs, struct apk_mmap_bstream, bs); return apk_file_meta_from_fd(mbs->fd, meta); } -static apk_blob_t mmap_read(void *stream, apk_blob_t token) +static apk_blob_t mmap_read(struct apk_bstream *bs, apk_blob_t token) { - struct apk_mmap_bstream *mbs = - container_of(stream, struct apk_mmap_bstream, bs); + struct apk_mmap_bstream *mbs = container_of(bs, struct apk_mmap_bstream, bs); apk_blob_t ret; if (!APK_BLOB_IS_NULL(token) && !APK_BLOB_IS_NULL(mbs->left)) { @@ -366,10 +357,9 @@ static apk_blob_t mmap_read(void *stream, apk_blob_t token) return ret; } -static void mmap_close(void *stream, size_t *size) +static void mmap_close(struct apk_bstream *bs, size_t *size) { - struct apk_mmap_bstream *mbs = - container_of(stream, struct apk_mmap_bstream, bs); + struct apk_mmap_bstream *mbs = container_of(bs, struct apk_mmap_bstream, bs); if (size != NULL) *size = mbs->size; @@ -448,17 +438,15 @@ struct apk_tee_bstream { void *cb_ctx; }; -static void tee_get_meta(void *stream, struct apk_file_meta *meta) +static void tee_get_meta(struct apk_bstream *bs, struct apk_file_meta *meta) { - struct apk_tee_bstream *tbs = - container_of(stream, struct apk_tee_bstream, bs); + struct apk_tee_bstream *tbs = container_of(bs, struct apk_tee_bstream, bs); apk_bstream_get_meta(tbs->inner_bs, meta); } -static apk_blob_t tee_read(void *stream, apk_blob_t token) +static apk_blob_t tee_read(struct apk_bstream *bs, apk_blob_t token) { - struct apk_tee_bstream *tbs = - container_of(stream, struct apk_tee_bstream, bs); + struct apk_tee_bstream *tbs = container_of(bs, struct apk_tee_bstream, bs); apk_blob_t blob; blob = apk_bstream_read(tbs->inner_bs, token); @@ -470,11 +458,10 @@ static apk_blob_t tee_read(void *stream, apk_blob_t token) return blob; } -static void tee_close(void *stream, size_t *size) +static void tee_close(struct apk_bstream *bs, size_t *size) { struct apk_file_meta meta; - struct apk_tee_bstream *tbs = - container_of(stream, struct apk_tee_bstream, bs); + struct apk_tee_bstream *tbs = container_of(bs, struct apk_tee_bstream, bs); if (tbs->copy_meta) { apk_bstream_get_meta(tbs->inner_bs, &meta); @@ -831,10 +818,9 @@ static ssize_t fdo_flush(struct apk_fd_ostream *fos) return 0; } -static ssize_t fdo_write(void *stream, const void *ptr, size_t size) +static ssize_t fdo_write(struct apk_ostream *os, const void *ptr, size_t size) { - struct apk_fd_ostream *fos = - container_of(stream, struct apk_fd_ostream, os); + struct apk_fd_ostream *fos = container_of(os, struct apk_fd_ostream, os); ssize_t r; if (size + fos->bytes >= sizeof(fos->buffer)) { @@ -855,10 +841,9 @@ static ssize_t fdo_write(void *stream, const void *ptr, size_t size) return size; } -static int fdo_close(void *stream) +static int fdo_close(struct apk_ostream *os) { - struct apk_fd_ostream *fos = - container_of(stream, struct apk_fd_ostream, os); + struct apk_fd_ostream *fos = container_of(os, struct apk_fd_ostream, os); int rc; fdo_flush(fos); @@ -937,19 +922,17 @@ struct apk_counter_ostream { off_t *counter; }; -static ssize_t co_write(void *stream, const void *ptr, size_t size) +static ssize_t co_write(struct apk_ostream *os, const void *ptr, size_t size) { - struct apk_counter_ostream *cos = - container_of(stream, struct apk_counter_ostream, os); + struct apk_counter_ostream *cos = container_of(os, struct apk_counter_ostream, os); *cos->counter += size; return size; } -static int co_close(void *stream) +static int co_close(struct apk_ostream *os) { - struct apk_counter_ostream *cos = - container_of(stream, struct apk_counter_ostream, os); + struct apk_counter_ostream *cos = container_of(os, struct apk_counter_ostream, os); free(cos); return 0; @@ -67,9 +67,9 @@ static int fetch_maperror(int ec) return map[ec]; } -static void fetch_get_meta(void *stream, struct apk_file_meta *meta) +static void fetch_get_meta(struct apk_istream *is, struct apk_file_meta *meta) { - struct apk_fetch_istream *fis = container_of(stream, struct apk_fetch_istream, is); + struct apk_fetch_istream *fis = container_of(is, struct apk_fetch_istream, is); *meta = (struct apk_file_meta) { .atime = fis->urlstat.atime, @@ -77,9 +77,9 @@ static void fetch_get_meta(void *stream, struct apk_file_meta *meta) }; } -static ssize_t fetch_read(void *stream, void *ptr, size_t size) +static ssize_t fetch_read(struct apk_istream *is, void *ptr, size_t size) { - struct apk_fetch_istream *fis = container_of(stream, struct apk_fetch_istream, is); + struct apk_fetch_istream *fis = container_of(is, struct apk_fetch_istream, is); ssize_t i = 0, r; if (ptr == NULL) return apk_istream_skip(&fis->is, size); @@ -94,9 +94,9 @@ static ssize_t fetch_read(void *stream, void *ptr, size_t size) return i; } -static void fetch_close(void *stream) +static void fetch_close(struct apk_istream *is) { - struct apk_fetch_istream *fis = container_of(stream, struct apk_fetch_istream, is); + struct apk_fetch_istream *fis = container_of(is, struct apk_fetch_istream, is); fetchIO_close(fis->fetchIO); free(fis); |