164 has_header = _header._magic == ResourceHeader::resource_header_magic;
165 if (has_header) {
166 // decompressed_resource array contains the result of decompression
167 decompressed_resource = new u1[(size_t) _header._uncompressed_size];
168 // Retrieve the decompressor name
169 const char* decompressor_name = strings->get(_header._decompressor_name_offset);
170 assert(decompressor_name && "image decompressor not found");
171 // Retrieve the decompressor instance
172 ImageDecompressor* decompressor = get_decompressor(decompressor_name);
173 assert(decompressor && "image decompressor not found");
174 // Ask the decompressor to decompress the compressed content
175 decompressor->decompress_resource(compressed_resource, decompressed_resource,
176 &_header, strings);
177 if (compressed_resource_base != compressed) {
178 delete[] compressed_resource_base;
179 }
180 compressed_resource = decompressed_resource;
181 }
182 } while (has_header);
183 memcpy(uncompressed, decompressed_resource, (size_t) uncompressed_size);
184 delete decompressed_resource;
185 }
186
187 // Zip decompressor
188
189 void ZipDecompressor::decompress_resource(u1* data, u1* uncompressed,
190 ResourceHeader* header, const ImageStrings* strings) {
191 char* msg = NULL;
192 jboolean res = ZipDecompressor::decompress(data, header->_size, uncompressed,
193 header->_uncompressed_size, &msg);
194 assert(res && "decompression failed");
195 }
196
197 jboolean ZipDecompressor::decompress(void *in, u8 inSize, void *out, u8 outSize, char **pmsg) {
198 return (*ZipInflateFully)(in, inSize, out, outSize, pmsg);
199 }
200
201 // END Zip Decompressor
202
203 // Shared String decompressor
204
|
164 has_header = _header._magic == ResourceHeader::resource_header_magic;
165 if (has_header) {
166 // decompressed_resource array contains the result of decompression
167 decompressed_resource = new u1[(size_t) _header._uncompressed_size];
168 // Retrieve the decompressor name
169 const char* decompressor_name = strings->get(_header._decompressor_name_offset);
170 assert(decompressor_name && "image decompressor not found");
171 // Retrieve the decompressor instance
172 ImageDecompressor* decompressor = get_decompressor(decompressor_name);
173 assert(decompressor && "image decompressor not found");
174 // Ask the decompressor to decompress the compressed content
175 decompressor->decompress_resource(compressed_resource, decompressed_resource,
176 &_header, strings);
177 if (compressed_resource_base != compressed) {
178 delete[] compressed_resource_base;
179 }
180 compressed_resource = decompressed_resource;
181 }
182 } while (has_header);
183 memcpy(uncompressed, decompressed_resource, (size_t) uncompressed_size);
184 delete[] decompressed_resource;
185 }
186
187 // Zip decompressor
188
189 void ZipDecompressor::decompress_resource(u1* data, u1* uncompressed,
190 ResourceHeader* header, const ImageStrings* strings) {
191 char* msg = NULL;
192 jboolean res = ZipDecompressor::decompress(data, header->_size, uncompressed,
193 header->_uncompressed_size, &msg);
194 assert(res && "decompression failed");
195 }
196
197 jboolean ZipDecompressor::decompress(void *in, u8 inSize, void *out, u8 outSize, char **pmsg) {
198 return (*ZipInflateFully)(in, inSize, out, outSize, pmsg);
199 }
200
201 // END Zip Decompressor
202
203 // Shared String decompressor
204
|