コード例 #1
0
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);
}
コード例 #2
0
ファイル: hpgszostream.c プロジェクト: AmirAbrams/haiku
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;
    }
}