typedef void * (*alloc_func)(void * opaque, unsigned items, unsigned size);
typedef void (*free_func)(void * opaque, void * address);

typedef struct z_stream_s {
  char *msg;
  alloc_func zalloc;
  free_func zfree;
  void * opaque;
} z_stream;

void * zcalloc(void * opaque, unsigned items, unsigned size);
void zcfree(void * opaque, void * ptr);

int deflateInit2_(z_stream *strm, int level, int method, int windowBits,
                  int memLevel, int strategy, const char *version,
                  int stream_size) {
  int noheader = 0;
  static const char *my_version = "1.1.3";

  if (version == 0 || version[0] != my_version[0] ||
      stream_size != sizeof(z_stream)) {
    return (-6);
  }
  if (strm == 0)
    return (-2);

  strm->msg = 0;
  if (strm->zalloc == 0) {
    strm->zalloc = zcalloc;
    strm->opaque = (void *)0;
  }
  if (strm->zfree == 0)
    strm->zfree = zcfree;

  if (level == (-1))
    level = 6;

  if (windowBits < 0) {
    noheader = 1;
    windowBits = -windowBits;
  }
  if (memLevel < 1 || memLevel > 9 || method != 8 || windowBits < 8 ||
      windowBits > 15 || level < 0 || level > 9 || strategy < 0 ||
      strategy > 2) {
    return (-2);
  }
  (*((strm)->zalloc))((strm)->opaque, (1), 112);
  return 0;
}
