1 /*
2 * Copyright (c) 2001, 2014, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26 #define ushort unsigned short
27 #define uint unsigned int
28 #define uchar unsigned char
29
30 struct unpacker;
31
32 struct jar {
33 // JAR file writer
34 FILE* jarfp;
35 int default_modtime;
36
37 // Used by unix2dostime:
38 int modtime_cache;
39 uLong dostime_cache;
40
41 // Private members
42 fillbytes central_directory;
43 uint central_directory_count;
44 uint output_file_offset;
45 fillbytes deflated; // temporary buffer
46
47 // pointer to outer unpacker, for error checks etc.
48 unpacker* u;
49
50 // Public Methods
51 void openJarFile(const char* fname);
52 void addJarEntry(const char* fname,
53 bool deflate_hint, int modtime,
54 bytes& head, bytes& tail);
55 void addDirectoryToJarFile(const char* dir_name);
56 void closeJarFile(bool central);
81
82 // The definitions of these depend on the NO_ZLIB option:
83 bool deflate_bytes(bytes& head, bytes& tail);
84 static uint get_crc32(uint c, unsigned char *ptr, uint len);
85
86 // error handling
87 void abort(const char* msg) { unpack_abort(msg, u); }
88 bool aborting() { return unpack_aborting(u); }
89 };
90
91 struct gunzip {
92 // optional gzip input stream control block
93
94 // pointer to outer unpacker, for error checks etc.
95 unpacker* u;
96
97 void* read_input_fn; // underlying byte stream
98 void* zstream; // inflater state
99 char inbuf[1 << 14]; // input buffer
100
101 void init(unpacker* u_); // pushes new value on u->read_input_fn
102
103 void free();
104
105 void start(int magic);
106
107 // private stuff
108 void read_fixed_field(char* buf, size_t buflen);
109
110 // error handling
111 void abort(const char* msg) { unpack_abort(msg, u); }
112 bool aborting() { return unpack_aborting(u); }
113 };
|
1 /*
2 * Copyright (c) 2001, 2016, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26 #define ushort unsigned short
27 #define uint unsigned int
28 #define uchar unsigned char
29
30 struct unpacker;
31
32 struct jar {
33 // JAR file writer
34 FILE* jarfp;
35 int default_modtime;
36
37 const char* jarname;
38
39 // Used by unix2dostime:
40 int modtime_cache;
41 uLong dostime_cache;
42
43 // Private members
44 fillbytes central_directory;
45 uint central_directory_count;
46 uint output_file_offset;
47 fillbytes deflated; // temporary buffer
48
49 // pointer to outer unpacker, for error checks etc.
50 unpacker* u;
51
52 // Public Methods
53 void openJarFile(const char* fname);
54 void addJarEntry(const char* fname,
55 bool deflate_hint, int modtime,
56 bytes& head, bytes& tail);
57 void addDirectoryToJarFile(const char* dir_name);
58 void closeJarFile(bool central);
83
84 // The definitions of these depend on the NO_ZLIB option:
85 bool deflate_bytes(bytes& head, bytes& tail);
86 static uint get_crc32(uint c, unsigned char *ptr, uint len);
87
88 // error handling
89 void abort(const char* msg) { unpack_abort(msg, u); }
90 bool aborting() { return unpack_aborting(u); }
91 };
92
93 struct gunzip {
94 // optional gzip input stream control block
95
96 // pointer to outer unpacker, for error checks etc.
97 unpacker* u;
98
99 void* read_input_fn; // underlying byte stream
100 void* zstream; // inflater state
101 char inbuf[1 << 14]; // input buffer
102
103 uint gzcrc; // CRC gathered from gzip *container* content
104 uint gzlen; // CRC gathered length
105
106 void init(unpacker* u_); // pushes new value on u->read_input_fn
107
108 void free();
109
110 void start(int magic);
111
112 // private stuff
113 void read_fixed_field(char* buf, size_t buflen);
114
115 // error handling
116 void abort(const char* msg) { unpack_abort(msg, u); }
117 bool aborting() { return unpack_aborting(u); }
118 };
|