Files
QZMusic/apkdiff/common/zlib_stream.h

63 lines
1.9 KiB
C

/*
* zlib_stream.h - zlib compression callbacks for bsdiff/bspatch streams
*/
#ifndef ZLIB_STREAM_H
#define ZLIB_STREAM_H
#include <stdio.h>
#include <stdint.h>
#include <zlib.h>
#include "bsdiff.h"
#include "bspatch.h"
#define ZLIB_STREAM_BUF_SIZE 8192
/* ---- Write context (used by bsdiff in gen.exe) ---- */
typedef struct {
FILE* fp;
z_stream zs;
uint8_t out_buf[ZLIB_STREAM_BUF_SIZE];
} zlib_write_ctx;
/* Initialize zlib deflate write context. Must be called before bsdiff(). */
int zlib_write_init(zlib_write_ctx* ctx, FILE* fp);
/* Flush and clean up. Must be called after bsdiff() completes. */
int zlib_write_finish(zlib_write_ctx* ctx);
/* bsdiff_stream.write callback */
int zlib_write_cb(struct bsdiff_stream* stream, const void* buffer, int size);
/* ---- Read context (used by bspatch in JNI) ---- */
typedef struct {
const uint8_t* data;
size_t data_len;
z_stream zs;
int inited;
} zlib_read_ctx;
/* Initialize zlib inflate read context from compressed data buffer. */
int zlib_read_init(zlib_read_ctx* ctx, const uint8_t* data, size_t len);
/* Clean up zlib read context. */
void zlib_read_cleanup(zlib_read_ctx* ctx);
/* bspatch_stream.read callback */
int zlib_read_cb(const struct bspatch_stream* stream, void* buffer, int length);
/* ---- Convenience setup functions ---- */
/* Fill a bsdiff_stream struct for zlib-compressed output to fp.
* Caller must call zlib_write_finish() on ctx after bsdiff() completes. */
void zlib_setup_bsdiff_stream(struct bsdiff_stream* stream, zlib_write_ctx* ctx, FILE* fp);
/* Fill a bspatch_stream struct for zlib-decompressed input from data buffer.
* Caller must call zlib_read_cleanup() on ctx when done. */
void zlib_setup_bspatch_stream(struct bspatch_stream* stream, zlib_read_ctx* ctx,
const uint8_t* data, size_t len);
#endif /* ZLIB_STREAM_H */