/* * Copyright (C) 2023 Patrick McDermott * * This file is part of opkg-opk. * * opkg-opk is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * opkg-opk is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with opkg-opk. If not, see . */ #ifndef OPKG_OPK_GZIP_H_ #define OPKG_OPK_GZIP_H_ #include struct opkg_opk_gzip; typedef int (opkg_opk_gzip_read_func)(void *, char **, size_t *); /* * Allocates and initializes a decompression structure. * Parameters: * - read: Function to read compressed data. Parameter 1 is user_data, * parameter 2 is an address in which the read function should * store an address to compressed data, and parameter 3 is an * address in which the read function should store the size of read * compressed data. Should return OPKG_OPK_OK if data is read, * OPKG_OPK_END if no more data is available (end of file or * archive), or OPKG_OPK_ERROR on error. * - user_data: Passed to read function. * Returns: * - Allocated decompression structure on success. Free with * opkg_opk_gzip_free(). * - NULL on memory exhaustion. */ struct opkg_opk_gzip * opkg_opk_gzip_init_read(opkg_opk_gzip_read_func *read_func, void *user_data); struct opkg_opk_gzip * opkg_opk_gzip_init_write(FILE *write_fp); /* * Reads and decompresses data to output the next record (512 octets). * Parameters: * - gzip: Decompression structure. * - record: Address in which to store decompressed record. * Returns: * - OPKG_OPK_OK if a record is read and decompressed. * - OPKG_OPK_END if the end of the gzip stream is reached. * - OPKG_OPK_ERROR if the read function returned an error, the compressed input * data or gzip stream end prematurely, or zlib returns an error. */ int opkg_opk_gzip_read(struct opkg_opk_gzip *gzip, void *record); int opkg_opk_gzip_write(struct opkg_opk_gzip *gzip, void *record, size_t size); size_t opkg_opk_gzip_written(struct opkg_opk_gzip *gzip) __attribute__((__pure__)); int opkg_opk_gzip_finish_write(struct opkg_opk_gzip *gzip); /* * Frees a decompression structure. * Parameters: * - gzip: Decompression structure. */ int opkg_opk_gzip_free(struct opkg_opk_gzip *gzip); #endif /* OPKG_OPK_GZIP_H_ */