/* Copyright (C) 2015-2020, Dirk Krause SPDX-License-Identifier: BSD-3-Clause */ /* WARNING: This file was generated by the dkct program (see http://dktools.sourceforge.net/ for details). Changes you make here will be lost if dkct is run again! You should modify the original source and run dkct on it. Original source: dk4strmg.ctr */ /** @file dk4strmg.c The dk4strmg module. */ #line 101 "dk4strmg.ctr" #include "dk4conf.h" #if DK4_HAVE_ASSERT_H #ifndef ASSERT_H_INCLUDED #include #define ASSERT_H_INCLUDED 1 #endif #endif #if DK4_HAVE_ZLIB_H #include "dk4strm.h" #include "dk4strmg.h" void dk4stream_gzfile_with_close_function(dk4_stream_api_t *api) { gzFile fipo; int res; #if DK4_USE_ASSERT assert(NULL != api); #endif if (NULL != api) { api->res = 0; api->sz_out = 0; fipo = (gzFile)(api->d); if (NULL != fipo) { switch (api->cmd) { case DK4_STREAM_API_READ: { res = gzread(fipo, api->b, (int)(api->sz_in)); if (0 < res) { api->res = 1; api->sz_out = (size_t)res; } } break; case DK4_STREAM_API_WRITE: { if (0 < api->sz_in) { res = gzwrite(fipo, api->b, (int)(api->sz_in)); if (res == (int)(api->sz_in)) { api->res = 1; } if (0 <= res) { api->sz_out = (size_t)res; } else { api->sz_out = 0; } } else { api->res = 1; } } break; case DK4_STREAM_API_FLUSH: { if (Z_OK == gzflush(fipo, Z_FULL_FLUSH)) { api->res = 1; } } break; case DK4_STREAM_API_AT_END: { if (1 == gzeof(fipo)) { api->res = 1; } } break; case DK4_STREAM_API_CLOSE: { if (Z_OK == gzclose(fipo)) { api->res = 1; } } break; } } } else { } } void dk4stream_gzfile_function(dk4_stream_api_t *api) { #if DK4_USE_ASSERT assert(NULL != api); #endif if (NULL != api) { switch (api->cmd) { case DK4_STREAM_API_CLOSE: { api->res = 1; } break; default: { dk4stream_gzfile_with_close_function(api); } break; } } } dk4_stream_t * dk4stream_open_for_gzfile( gzFile fipo, int fl, size_t ibs, size_t obs, dk4_er_t *erp ) { #if DK4_USE_ASSERT assert(NULL != fipo); #endif return ( dk4stream_open( (void *)fipo, dk4stream_gzfile_function, fl, ibs, obs, erp ) ); } dk4_stream_t * dk4stream_open_for_gzfile_with_close( gzFile fipo, int fl, size_t ibs, size_t obs, dk4_er_t *erp ) { #if DK4_USE_ASSERT assert(NULL != fipo); #endif return ( dk4stream_open( (void *)fipo, dk4stream_gzfile_with_close_function, fl, ibs, obs, erp ) ); } #endif