예제 #1
0
static void write_binary(FILE *fd, const char *prefix, size_t size, const uint8_t *buf)
{
    int n;

#if WITH_ZLIB
    ZlibEncoder *enc;
    int zlib_size;

    record_encoder_data.buf = buf;
    record_encoder_data.size = size;
    enc = zlib_encoder_create(&record_encoder_data.base,
            RECORD_ZLIB_DEFAULT_COMPRESSION_LEVEL);
    if (!enc) {
        fprintf(stderr, "%s: zlib encoder creation failed\n", __FUNCTION__);
        exit(1);
    }
#endif

    fprintf(fd, "binary %d %s %ld:", WITH_ZLIB, prefix, size);
#if WITH_ZLIB
    zlib_size = zlib_encode(enc, RECORD_ZLIB_DEFAULT_COMPRESSION_LEVEL, size,
        output, sizeof(output));
    fprintf(fd, "%d:", zlib_size);
    n = fwrite(output, zlib_size, 1, fd);
    zlib_encoder_destroy(enc);
#else
    n = fwrite(buf, size, 1, fd);
#endif
    (void)n;
    fprintf(fd, "\n");
}
예제 #2
0
svn_error_t *
svn__compress(svn_stringbuf_t *in,
              svn_stringbuf_t *out,
              int compression_method)
{
  if (   compression_method < SVN__COMPRESSION_NONE
      || compression_method > SVN__COMPRESSION_ZLIB_MAX)
    return svn_error_createf(SVN_ERR_BAD_COMPRESSION_METHOD, NULL,
                             _("Unsupported compression method %d"),
                             compression_method);

  return zlib_encode(in->data, in->len, out, compression_method);
}