Merge branch 'for-linus' of git://one.firstfloor.org/home/andi/git/linux-2.6
* 'for-linus' of git://one.firstfloor.org/home/andi/git/linux-2.6: (231 commits) [PATCH] i386: Don't delete cpu_devs data to identify different x86 types in late_initcall [PATCH] i386: type may be unused [PATCH] i386: Some additional chipset register values validation. [PATCH] i386: Add missing !X86_PAE dependincy to the 2G/2G split. [PATCH] x86-64: Don't exclude asm-offsets.c in Documentation/dontdiff [PATCH] i386: avoid redundant preempt_disable in __unlazy_fpu [PATCH] i386: white space fixes in i387.h [PATCH] i386: Drop noisy e820 debugging printks [PATCH] x86-64: Fix allnoconfig error in genapic_flat.c [PATCH] x86-64: Shut up warnings for vfat compat ioctls on other file systems [PATCH] x86-64: Share identical video.S between i386 and x86-64 [PATCH] x86-64: Remove CONFIG_REORDER [PATCH] x86-64: Print type and size correctly for unknown compat ioctls [PATCH] i386: Remove copy_*_user BUG_ONs for (size < 0) [PATCH] i386: Little cleanups in smpboot.c [PATCH] x86-64: Don't enable NUMA for a single node in K8 NUMA scanning [PATCH] x86: Use RDTSCP for synchronous get_cycles if possible [PATCH] i386: Add X86_FEATURE_RDTSCP [PATCH] i386: Implement X86_FEATURE_SYNC_RDTSC on i386 [PATCH] i386: Implement alternative_io for i386 ... Fix up trivial conflict in include/linux/highmem.h manually. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
+90
-37
@@ -292,7 +292,6 @@ STATIC int INIT huft_build(
|
||||
oversubscribed set of lengths), and three if not enough memory. */
|
||||
{
|
||||
unsigned a; /* counter for codes of length k */
|
||||
unsigned c[BMAX+1]; /* bit length count table */
|
||||
unsigned f; /* i repeats in table every f entries */
|
||||
int g; /* maximum code length */
|
||||
int h; /* table level */
|
||||
@@ -303,18 +302,33 @@ STATIC int INIT huft_build(
|
||||
register unsigned *p; /* pointer into c[], b[], or v[] */
|
||||
register struct huft *q; /* points to current table */
|
||||
struct huft r; /* table entry for structure assignment */
|
||||
struct huft *u[BMAX]; /* table stack */
|
||||
unsigned v[N_MAX]; /* values in order of bit length */
|
||||
register int w; /* bits before this table == (l * h) */
|
||||
unsigned x[BMAX+1]; /* bit offsets, then code stack */
|
||||
unsigned *xp; /* pointer into x */
|
||||
int y; /* number of dummy codes added */
|
||||
unsigned z; /* number of entries in current table */
|
||||
struct {
|
||||
unsigned c[BMAX+1]; /* bit length count table */
|
||||
struct huft *u[BMAX]; /* table stack */
|
||||
unsigned v[N_MAX]; /* values in order of bit length */
|
||||
unsigned x[BMAX+1]; /* bit offsets, then code stack */
|
||||
} *stk;
|
||||
unsigned *c, *v, *x;
|
||||
struct huft **u;
|
||||
int ret;
|
||||
|
||||
DEBG("huft1 ");
|
||||
|
||||
stk = malloc(sizeof(*stk));
|
||||
if (stk == NULL)
|
||||
return 3; /* out of memory */
|
||||
|
||||
c = stk->c;
|
||||
v = stk->v;
|
||||
x = stk->x;
|
||||
u = stk->u;
|
||||
|
||||
/* Generate counts for each bit length */
|
||||
memzero(c, sizeof(c));
|
||||
memzero(stk->c, sizeof(stk->c));
|
||||
p = b; i = n;
|
||||
do {
|
||||
Tracecv(*p, (stderr, (n-i >= ' ' && n-i <= '~' ? "%c %d\n" : "0x%x %d\n"),
|
||||
@@ -326,7 +340,8 @@ DEBG("huft1 ");
|
||||
{
|
||||
*t = (struct huft *)NULL;
|
||||
*m = 0;
|
||||
return 2;
|
||||
ret = 2;
|
||||
goto out;
|
||||
}
|
||||
|
||||
DEBG("huft2 ");
|
||||
@@ -351,10 +366,14 @@ DEBG("huft3 ");
|
||||
|
||||
/* Adjust last length count to fill out codes, if needed */
|
||||
for (y = 1 << j; j < i; j++, y <<= 1)
|
||||
if ((y -= c[j]) < 0)
|
||||
return 2; /* bad input: more codes than bits */
|
||||
if ((y -= c[i]) < 0)
|
||||
return 2;
|
||||
if ((y -= c[j]) < 0) {
|
||||
ret = 2; /* bad input: more codes than bits */
|
||||
goto out;
|
||||
}
|
||||
if ((y -= c[i]) < 0) {
|
||||
ret = 2;
|
||||
goto out;
|
||||
}
|
||||
c[i] += y;
|
||||
|
||||
DEBG("huft4 ");
|
||||
@@ -428,7 +447,8 @@ DEBG1("3 ");
|
||||
{
|
||||
if (h)
|
||||
huft_free(u[0]);
|
||||
return 3; /* not enough memory */
|
||||
ret = 3; /* not enough memory */
|
||||
goto out;
|
||||
}
|
||||
DEBG1("4 ");
|
||||
hufts += z + 1; /* track memory usage */
|
||||
@@ -492,7 +512,11 @@ DEBG("h6f ");
|
||||
DEBG("huft7 ");
|
||||
|
||||
/* Return true (1) if we were given an incomplete table */
|
||||
return y != 0 && g != 1;
|
||||
ret = y != 0 && g != 1;
|
||||
|
||||
out:
|
||||
free(stk);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
@@ -705,10 +729,14 @@ STATIC int noinline INIT inflate_fixed(void)
|
||||
struct huft *td; /* distance code table */
|
||||
int bl; /* lookup bits for tl */
|
||||
int bd; /* lookup bits for td */
|
||||
unsigned l[288]; /* length list for huft_build */
|
||||
unsigned *l; /* length list for huft_build */
|
||||
|
||||
DEBG("<fix");
|
||||
|
||||
l = malloc(sizeof(*l) * 288);
|
||||
if (l == NULL)
|
||||
return 3; /* out of memory */
|
||||
|
||||
/* set up literal table */
|
||||
for (i = 0; i < 144; i++)
|
||||
l[i] = 8;
|
||||
@@ -719,9 +747,10 @@ DEBG("<fix");
|
||||
for (; i < 288; i++) /* make a complete, but wrong code set */
|
||||
l[i] = 8;
|
||||
bl = 7;
|
||||
if ((i = huft_build(l, 288, 257, cplens, cplext, &tl, &bl)) != 0)
|
||||
if ((i = huft_build(l, 288, 257, cplens, cplext, &tl, &bl)) != 0) {
|
||||
free(l);
|
||||
return i;
|
||||
|
||||
}
|
||||
|
||||
/* set up distance table */
|
||||
for (i = 0; i < 30; i++) /* make an incomplete code set */
|
||||
@@ -730,6 +759,7 @@ DEBG("<fix");
|
||||
if ((i = huft_build(l, 30, 0, cpdist, cpdext, &td, &bd)) > 1)
|
||||
{
|
||||
huft_free(tl);
|
||||
free(l);
|
||||
|
||||
DEBG(">");
|
||||
return i;
|
||||
@@ -737,11 +767,13 @@ DEBG("<fix");
|
||||
|
||||
|
||||
/* decompress until an end-of-block code */
|
||||
if (inflate_codes(tl, td, bl, bd))
|
||||
if (inflate_codes(tl, td, bl, bd)) {
|
||||
free(l);
|
||||
return 1;
|
||||
|
||||
}
|
||||
|
||||
/* free the decoding tables, return */
|
||||
free(l);
|
||||
huft_free(tl);
|
||||
huft_free(td);
|
||||
return 0;
|
||||
@@ -766,16 +798,19 @@ STATIC int noinline INIT inflate_dynamic(void)
|
||||
unsigned nb; /* number of bit length codes */
|
||||
unsigned nl; /* number of literal/length codes */
|
||||
unsigned nd; /* number of distance codes */
|
||||
#ifdef PKZIP_BUG_WORKAROUND
|
||||
unsigned ll[288+32]; /* literal/length and distance code lengths */
|
||||
#else
|
||||
unsigned ll[286+30]; /* literal/length and distance code lengths */
|
||||
#endif
|
||||
unsigned *ll; /* literal/length and distance code lengths */
|
||||
register ulg b; /* bit buffer */
|
||||
register unsigned k; /* number of bits in bit buffer */
|
||||
int ret;
|
||||
|
||||
DEBG("<dyn");
|
||||
|
||||
#ifdef PKZIP_BUG_WORKAROUND
|
||||
ll = malloc(sizeof(*ll) * (288+32)); /* literal/length and distance code lengths */
|
||||
#else
|
||||
ll = malloc(sizeof(*ll) * (286+30)); /* literal/length and distance code lengths */
|
||||
#endif
|
||||
|
||||
/* make local bit buffer */
|
||||
b = bb;
|
||||
k = bk;
|
||||
@@ -796,7 +831,10 @@ DEBG("<dyn");
|
||||
#else
|
||||
if (nl > 286 || nd > 30)
|
||||
#endif
|
||||
return 1; /* bad lengths */
|
||||
{
|
||||
ret = 1; /* bad lengths */
|
||||
goto out;
|
||||
}
|
||||
|
||||
DEBG("dyn1 ");
|
||||
|
||||
@@ -818,7 +856,8 @@ DEBG("dyn2 ");
|
||||
{
|
||||
if (i == 1)
|
||||
huft_free(tl);
|
||||
return i; /* incomplete code set */
|
||||
ret = i; /* incomplete code set */
|
||||
goto out;
|
||||
}
|
||||
|
||||
DEBG("dyn3 ");
|
||||
@@ -840,8 +879,10 @@ DEBG("dyn3 ");
|
||||
NEEDBITS(2)
|
||||
j = 3 + ((unsigned)b & 3);
|
||||
DUMPBITS(2)
|
||||
if ((unsigned)i + j > n)
|
||||
return 1;
|
||||
if ((unsigned)i + j > n) {
|
||||
ret = 1;
|
||||
goto out;
|
||||
}
|
||||
while (j--)
|
||||
ll[i++] = l;
|
||||
}
|
||||
@@ -850,8 +891,10 @@ DEBG("dyn3 ");
|
||||
NEEDBITS(3)
|
||||
j = 3 + ((unsigned)b & 7);
|
||||
DUMPBITS(3)
|
||||
if ((unsigned)i + j > n)
|
||||
return 1;
|
||||
if ((unsigned)i + j > n) {
|
||||
ret = 1;
|
||||
goto out;
|
||||
}
|
||||
while (j--)
|
||||
ll[i++] = 0;
|
||||
l = 0;
|
||||
@@ -861,8 +904,10 @@ DEBG("dyn3 ");
|
||||
NEEDBITS(7)
|
||||
j = 11 + ((unsigned)b & 0x7f);
|
||||
DUMPBITS(7)
|
||||
if ((unsigned)i + j > n)
|
||||
return 1;
|
||||
if ((unsigned)i + j > n) {
|
||||
ret = 1;
|
||||
goto out;
|
||||
}
|
||||
while (j--)
|
||||
ll[i++] = 0;
|
||||
l = 0;
|
||||
@@ -891,7 +936,8 @@ DEBG("dyn5b ");
|
||||
error("incomplete literal tree");
|
||||
huft_free(tl);
|
||||
}
|
||||
return i; /* incomplete code set */
|
||||
ret = i; /* incomplete code set */
|
||||
goto out;
|
||||
}
|
||||
DEBG("dyn5c ");
|
||||
bd = dbits;
|
||||
@@ -907,15 +953,18 @@ DEBG("dyn5d ");
|
||||
huft_free(td);
|
||||
}
|
||||
huft_free(tl);
|
||||
return i; /* incomplete code set */
|
||||
ret = i; /* incomplete code set */
|
||||
goto out;
|
||||
#endif
|
||||
}
|
||||
|
||||
DEBG("dyn6 ");
|
||||
|
||||
/* decompress until an end-of-block code */
|
||||
if (inflate_codes(tl, td, bl, bd))
|
||||
return 1;
|
||||
if (inflate_codes(tl, td, bl, bd)) {
|
||||
ret = 1;
|
||||
goto out;
|
||||
}
|
||||
|
||||
DEBG("dyn7 ");
|
||||
|
||||
@@ -924,10 +973,14 @@ DEBG("dyn7 ");
|
||||
huft_free(td);
|
||||
|
||||
DEBG(">");
|
||||
return 0;
|
||||
ret = 0;
|
||||
out:
|
||||
free(ll);
|
||||
return ret;
|
||||
|
||||
underrun:
|
||||
return 4; /* Input underrun */
|
||||
underrun:
|
||||
ret = 4; /* Input underrun */
|
||||
goto out;
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user