int hpgs_copy_streams (hpgs_ostream *out, hpgs_istream *in) { unsigned char buf[16384]; size_t sz; while ((sz = hpgs_istream_read(buf,1,sizeof(buf),in)) > 0) if (hpgs_ostream_write(buf,1,sz,out) == 0) return -1; return hpgs_istream_iserror(in); }
static int z_consume(hpgs_z_ostream_stream *stream, int flags) { int cnt=stream->pptr-stream->buffer; int zret; if (stream->errflg) return EOF; if (!stream->zstream.next_out && z_init(stream)) return EOF; if (cnt <= 0 && flags == Z_NO_FLUSH) return 0; stream->zstream.avail_in=cnt; stream->zstream.total_in=0; stream->zstream.next_in=(Bytef *)stream->buffer; do { stream->zstream.avail_out=Z_OSTREAM_XFER_SIZE; stream->zstream.total_out=0; stream->zstream.next_out=(Bytef *)stream->xfer; zret=deflate (&stream->zstream,flags); if (hpgs_ostream_write(stream->xfer,1,stream->zstream.total_out,stream->base) < stream->zstream.total_out) { stream->errflg = 1; return -1; } } while (zret == Z_OK && stream->zstream.avail_out == 0); stream->pptr = stream->buffer; if (stream->zstream.avail_in==0) { stream->total_bytes += cnt; return 0; } else { stream->errflg = 1; return -1; } }