some more size reduction

git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@1312 212acab6-be3b-0410-9dea-997c60f758d6
This commit is contained in:
justin1014 2002-10-07 19:44:57 +00:00
parent dd9943aedd
commit 7cffd00d9d

View file

@ -409,40 +409,6 @@ uInt *hn) /* working area: values in order of bit length */
return (y != 0 && g != 1) ? Z_BUF_ERROR : Z_OK; return (y != 0 && g != 1) ? Z_BUF_ERROR : Z_OK;
} }
local int __inline inflate_trees_dynamic(nl, nd, c, bl, bd, tl, td, hp)
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 */
inflate_huft *hp; /* space for trees */
{
int r;
uInt hn = 0; /* hufts used in space */
/* build literal/length tree */
r = huft_build(c, nl, 257, cplens, cplext, tl, bl, hp, &hn);
if (r != Z_OK || *bl == 0)
{
//if (r != Z_MEM_ERROR)
return Z_DATA_ERROR;
//return r;
}
/* build distance tree */
r = huft_build(c + nl, nd, 0, cpdist, cpdext, td, bd, hp, &hn);
if (r != Z_OK || (*bd == 0 && nl > 257))
{
//if (r != Z_MEM_ERROR)
return Z_DATA_ERROR;
//return r;
}
return Z_OK;
}
/* build fixed tables only once--keep them here */ /* build fixed tables only once--keep them here */
local char fixed_built = 0; local char fixed_built = 0;
@ -453,48 +419,6 @@ local uInt fixed_bd=5;
local inflate_huft *fixed_tl; local inflate_huft *fixed_tl;
local inflate_huft *fixed_td; local inflate_huft *fixed_td;
local void __inline inflate_trees_fixed(bl, bd, tl, td)
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 */
{
/* build fixed tables if not already */
if (!fixed_built)
{
int k; /* temporary variable */
uInt f = 0; /* number of hufts used in fixed_mem */
static uIntf c[288]; /* length list for huft_build */
/* literal table */
for (k = 0; k < 288; k++)
{
char v=8;
if (k > 143)
{
if (k < 256) v++;
else if (k < 280) v--;
}
c[k] = v;
}
// fixed_bl = 9;
huft_build(c, 288, 257, cplens, cplext, &fixed_tl, &fixed_bl, fixed_mem, &f);
/* distance table */
for (k = 0; k < 30; k++) c[k] = 5;
// fixed_bd = 5;
huft_build(c, 30, 0, cpdist, cpdext, &fixed_td, &fixed_bd, fixed_mem, &f);
/* done */
fixed_built++;
}
*bl = fixed_bl;
*bd = fixed_bd;
*tl = fixed_tl;
*td = fixed_td;
}
void inflateReset(z_streamp z) void inflateReset(z_streamp z)
{ {
inflate_blocks_statef *s=&z->blocks; inflate_blocks_statef *s=&z->blocks;
@ -553,11 +477,36 @@ int r=Z_OK;
Tracev((stderr, "inflate: fixed codes block%s\n", Tracev((stderr, "inflate: fixed codes block%s\n",
s->last ? " (last)" : "")); s->last ? " (last)" : ""));
{ {
uInt bl, bd; if (!fixed_built)
inflate_huft *tl, *td; {
int _k; /* temporary variable */
uInt f = 0; /* number of hufts used in fixed_mem */
static uIntf c[288]; /* length list for huft_build */
inflate_trees_fixed(&bl, &bd, &tl, &td); /* literal table */
inflate_codes_new(&s->sub.decode.t_codes,bl, bd, tl, td); for (_k = 0; _k < 288; _k++)
{
char v=8;
if (_k > 143)
{
if (_k < 256) v++;
else if (_k < 280) v--;
}
c[_k] = v;
}
// fixed_bl = 9;
huft_build(c, 288, 257, cplens, cplext, &fixed_tl, &fixed_bl, fixed_mem, &f);
/* distance table */
for (_k = 0; _k < 30; _k++) c[_k] = 5;
// fixed_bd = 5;
huft_build(c, 30, 0, cpdist, cpdext, &fixed_td, &fixed_bd, fixed_mem, &f);
/* done */
fixed_built++;
}
inflate_codes_new(&s->sub.decode.t_codes,fixed_bl, fixed_bd, fixed_tl, fixed_td);
} }
s->mode = CODES; s->mode = CODES;
break; break;
@ -568,7 +517,6 @@ int r=Z_OK;
break; break;
default: /* illegal */ default: /* illegal */
s->mode = BAD; s->mode = BAD;
// z->msg = (char*)"err";//invalid block type";
r = Z_DATA_ERROR; r = Z_DATA_ERROR;
LEAVE LEAVE
} }
@ -626,12 +574,10 @@ int r=Z_OK;
if (t == Z_BUF_ERROR || s->sub.trees.bb == 0) t=Z_DATA_ERROR; if (t == Z_BUF_ERROR || s->sub.trees.bb == 0) t=Z_DATA_ERROR;
} }
if (t != Z_OK) if (t != Z_OK)
{ {
r = t; r = t;
if (r == Z_DATA_ERROR) s->mode = BAD;
s->mode = BAD;
LEAVE LEAVE
} }
s->sub.trees.index = 0; s->sub.trees.index = 0;
@ -687,19 +633,32 @@ int r=Z_OK;
} }
s->sub.trees.tb = Z_NULL; s->sub.trees.tb = Z_NULL;
{ {
uInt hn = 0; /* hufts used in space */
uInt bl, bd; uInt bl, bd;
inflate_huft *tl, *td; inflate_huft *tl, *td;
int nl,nd;
t = s->sub.trees.table;
nl=257 + (t & 0x1f);
nd=1 + ((t >> 5) & 0x1f);
bl = 9; /* must be <= 9 for lookahead assumptions */ bl = 9; /* must be <= 9 for lookahead assumptions */
bd = 6; /* must be <= 9 for lookahead assumptions */ bd = 6; /* must be <= 9 for lookahead assumptions */
t = s->sub.trees.table;
t = inflate_trees_dynamic(257 + (t & 0x1f), 1 + ((t >> 5) & 0x1f), t = huft_build(s->sub.trees.t_blens, nl, 257, cplens, cplext, &tl, &bl, s->hufts, &hn);
s->sub.trees.t_blens, &bl, &bd, &tl, &td, if (t != Z_OK || bl == 0) t=Z_DATA_ERROR;
s->hufts); else
{
/* build distance tree */
t = huft_build(s->sub.trees.t_blens + nl, nd, 0, cpdist, cpdext, &td, &bd, s->hufts, &hn);
if (t != Z_OK || (bd == 0 && nl > 257))
{
t=Z_DATA_ERROR;
}
}
if (t != Z_OK) if (t != Z_OK)
{ {
if (t == (uInt)Z_DATA_ERROR) s->mode = BAD;
s->mode = BAD;
r = t; r = t;
LEAVE LEAVE
} }