/*
* 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_ */