z_streamp z;
inflate_huft *hp;        z_streamp z;
int inflate_trees_dynamic(nl, nd, c, bl, bd, tl, td, z)uInt nl;                /* number of literal/length codes */uInt nd;                /* number of distance codes */uIntf *c;               /* that many (total) code lengths */uIntf *bl;              /* literal desired/actual bit depth */uIntf *bd;              /* distance desired/actual bit depth */inflate_huft * FAR *tl; /* literal/length tree result */inflate_huft * FAR *td; /* distance tree result */z_streamp z;            /* for zfree function */{  int r;  /* build literal/length tree */  r = huft_build(c, nl, 257, cplens, cplext, tl, bl, z);  if (r != Z_OK || *bl == 0)  {    if (r == Z_DATA_ERROR)      z->msg = (char*)"oversubscribed literal/length tree";    else if (r != Z_MEM_ERROR)    {      inflate_trees_free(*tl, z);      z->msg = (char*)"incomplete literal/length tree";      r = Z_DATA_ERROR;    }    return r;  }  /* build distance tree */  r = huft_build(c + nl, nd, 0, cpdist, cpdext, td, bd, z);  if (r != Z_OK || (*bd == 0 && nl > 257))  {    if (r == Z_DATA_ERROR)      z->msg = (char*)"oversubscribed literal/length tree";    else if (r == Z_BUF_ERROR) {#ifdef PKZIP_BUG_WORKAROUND      r = Z_OK;    }#else      inflate_trees_free(*td, z);      z->msg = (char*)"incomplete distance tree";      r = Z_DATA_ERROR;    }    else if (r != Z_MEM_ERROR)    {	z->msg = (char*)"empty distance tree with lengths";	r = Z_DATA_ERROR;    }    inflate_trees_free(*tl, z);    return r;#endif  }  /* done */  return Z_OK;}