X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Fstreams-jar.cpp;h=e597822e9280a426778ec16f0986fa8331d708ff;hb=090f793a8a0366a90c96bd4ae509ac7315ec8391;hp=712524cf0b130b2fe0d05f31c99e28a6f82877d8;hpb=f951374eef04129c6a0d213e7ab4d9ed2095ca69;p=inkscape.git diff --git a/src/streams-jar.cpp b/src/streams-jar.cpp index 712524cf0..e597822e9 100644 --- a/src/streams-jar.cpp +++ b/src/streams-jar.cpp @@ -1,3 +1,4 @@ +#include #include "streams-jar.h" namespace Inkscape { @@ -16,27 +17,16 @@ void JarBuffer::consume_header() throw(JarHeaderException) check_signature(data); _urihandle->read(data+4, 26); compressed_size = compressed_left = unpack_4bytes(data, LOC_CSIZE); - guint16 filename_length = unpack_2bytes(data, LOC_FNLEN); eflen = unpack_2bytes(data, LOC_EFLEN); flags = unpack_2bytes(data, LOC_EXTRA); method = unpack_2bytes(data, LOC_COMP); #ifdef DEBUG_STREAMS std::printf("Compressed size is %u\n", compressed_size); - std::printf("Filename length is %hu\n", filename_length); std::printf("Extra field length is %hu\n", eflen); std::printf("Flags are %#hx\n", flags); std::printf("Compression method is %#hx\n", method); #endif - - //guint32 crc = check_crc(data, flags); - gchar filename[filename_length+1]; - _urihandle->read(filename, filename_length); - filename[filename_length] = '\0'; - -#ifdef DEBUG_STREAMS - std::printf("Filename is %s\n", filename); -#endif } catch (std::exception& e) { throw JarHeaderException(); @@ -89,11 +79,11 @@ int JarBuffer::consume_and_inflate() int JarBuffer::consume_compressed(int nbytes) { - int ret; + int ret=do_consume_and_inflate(nbytes); - if ((ret = do_consume_and_inflate(nbytes)) == EOF && eflen > 0) { - guint8 efbuf[eflen]; - _urihandle->read(efbuf, eflen); + if ( ret == EOF && eflen > 0 ) { + std::vector efbuf(eflen); + _urihandle->read(&efbuf[0], eflen); return 1; } @@ -102,14 +92,13 @@ int JarBuffer::consume_compressed(int nbytes) int JarBuffer::consume_uncompressed(int nbytes) { - guint8 data[nbytes]; - if (consume(data, nbytes) == EOF) - return EOF; - - copy_to_get(data, nbytes); - compressed_left -= nbytes; - - return nbytes; + std::vector data(nbytes); + int consumed=consume(&data[0], nbytes); + if ( consumed != EOF ) { + copy_to_get(&data[0], consumed); + compressed_left -= consumed; + } + return consumed; } GByteArray *JarBuffer::inflate(guint8 *data, const int nbytes)