iNOISSUE fix build issue with pack200 on rhel 7.6

This commit is contained in:
Petr Mrázek 2018-11-01 22:08:15 +01:00
parent e4ce74e622
commit 9eb165bfee
3 changed files with 12 additions and 8 deletions

View File

@ -23,6 +23,8 @@
* questions. * questions.
*/ */
#pragma once
// Global Structures // Global Structures
struct jar; struct jar;
struct gunzip; struct gunzip;
@ -33,6 +35,8 @@ struct cpindex;
struct inner_class; struct inner_class;
struct value_stream; struct value_stream;
typedef int64_t (*read_input_fn_t)(unpacker *self, void *buf, int64_t minlen, int64_t maxlen);
struct cpindex struct cpindex
{ {
uint32_t len; uint32_t len;
@ -186,8 +190,6 @@ struct unpacker
int unsized_bytes_read; int unsized_bytes_read;
// callback to read at least one byte, up to available input // callback to read at least one byte, up to available input
typedef int64_t (*read_input_fn_t)(unpacker *self, void *buf, int64_t minlen,
int64_t maxlen);
read_input_fn_t read_input_fn; read_input_fn_t read_input_fn;
// archive header fields // archive header fields

View File

@ -444,7 +444,7 @@ static int64_t read_input_via_gzip(unpacker *u, void *buf, int64_t minlen, int64
char *bufptr = (char *)buf; char *bufptr = (char *)buf;
char *inbuf = u->gzin->inbuf; char *inbuf = u->gzin->inbuf;
size_t inbuflen = sizeof(u->gzin->inbuf); size_t inbuflen = sizeof(u->gzin->inbuf);
unpacker::read_input_fn_t read_gzin_fn = (unpacker::read_input_fn_t)u->gzin->read_input_fn; read_input_fn_t read_gzin_fn = u->gzin->read_input_fn;
z_stream &zs = *(z_stream *)u->gzin->zstream; z_stream &zs = *(z_stream *)u->gzin->zstream;
while (numread < minlen) while (numread < minlen)
{ {
@ -507,7 +507,7 @@ void gunzip::init(unpacker *u_)
BYTES_OF(*this).clear(); BYTES_OF(*this).clear();
u = u_; u = u_;
assert(u->gzin == nullptr); // once only, please assert(u->gzin == nullptr); // once only, please
read_input_fn = (void *)u->read_input_fn; read_input_fn = u->read_input_fn;
zstream = NEW(z_stream, 1); zstream = NEW(z_stream, 1);
u->gzin = this; u->gzin = this;
u->read_input_fn = read_input_via_gzip; u->read_input_fn = read_input_via_gzip;
@ -574,7 +574,7 @@ void gunzip::free()
{ {
assert(u->gzin == this); assert(u->gzin == this);
u->gzin = nullptr; u->gzin = nullptr;
u->read_input_fn = (unpacker::read_input_fn_t) this->read_input_fn; u->read_input_fn = this->read_input_fn;
inflateEnd((z_stream *)zstream); inflateEnd((z_stream *)zstream);
::free(zstream); ::free(zstream);
zstream = nullptr; zstream = nullptr;
@ -583,7 +583,7 @@ void gunzip::free()
void gunzip::read_fixed_field(char *buf, size_t buflen) void gunzip::read_fixed_field(char *buf, size_t buflen)
{ {
int64_t nr = ((unpacker::read_input_fn_t)read_input_fn)(u, buf, buflen, buflen); int64_t nr = read_input_fn(u, buf, buflen, buflen);
if ((size_t)nr != buflen) if ((size_t)nr != buflen)
unpack_abort("short stream header"); unpack_abort("short stream header");
} }

View File

@ -22,12 +22,14 @@
* or visit www.oracle.com if you need additional information or have any * or visit www.oracle.com if you need additional information or have any
* questions. * questions.
*/ */
#pragma once
#include <stdint.h> #include <stdint.h>
typedef unsigned short ushort; typedef unsigned short ushort;
typedef unsigned int uint32_t; typedef unsigned int uint32_t;
typedef unsigned char uchar; typedef unsigned char uchar;
struct unpacker; #include "unpack.h"
struct jar struct jar
{ {
@ -95,7 +97,7 @@ struct gunzip
// pointer to outer unpacker, for error checks etc. // pointer to outer unpacker, for error checks etc.
unpacker *u; unpacker *u;
void *read_input_fn; // underlying \bchar\b stream read_input_fn_t read_input_fn; // underlying \bchar\b stream
void *zstream; // inflater state void *zstream; // inflater state
char inbuf[1 << 14]; // input buffer char inbuf[1 << 14]; // input buffer