summaryrefslogtreecommitdiffstats
path: root/src/streams-jar.cpp
diff options
context:
space:
mode:
authorTed Gould <ted@gould.cx>2008-11-21 05:24:08 +0000
committerTed Gould <ted@canonical.com>2008-11-21 05:24:08 +0000
commit44a3a78fb6a3863c0c7f3c1193837337e68a67e4 (patch)
tree1722ee5ec6f88c881cd4124923354b3c1311501b /src/streams-jar.cpp
parentMerge from trunk (diff)
downloadinkscape-44a3a78fb6a3863c0c7f3c1193837337e68a67e4.tar.gz
inkscape-44a3a78fb6a3863c0c7f3c1193837337e68a67e4.zip
Merge from fe-moved
(bzr r6891)
Diffstat (limited to 'src/streams-jar.cpp')
-rw-r--r--src/streams-jar.cpp135
1 files changed, 0 insertions, 135 deletions
diff --git a/src/streams-jar.cpp b/src/streams-jar.cpp
deleted file mode 100644
index e597822e9..000000000
--- a/src/streams-jar.cpp
+++ /dev/null
@@ -1,135 +0,0 @@
-#include <vector>
-#include "streams-jar.h"
-
-namespace Inkscape {
-
-const int LOC_EXTRA = 6; // extra bytes
-const int LOC_COMP = 8; // compression method
-const int LOC_CSIZE = 18; // compressed size
-const int LOC_FNLEN = 26; // filename length
-const int LOC_EFLEN = 28; // extra-field length
-
-void JarBuffer::consume_header() throw(JarHeaderException)
-{
- try {
- guint8 data[30];
- _urihandle->read(data, 4);
- check_signature(data);
- _urihandle->read(data+4, 26);
- compressed_size = compressed_left = unpack_4bytes(data, LOC_CSIZE);
- 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("Extra field length is %hu\n", eflen);
- std::printf("Flags are %#hx\n", flags);
- std::printf("Compression method is %#hx\n", method);
-#endif
- }
- catch (std::exception& e) {
- throw JarHeaderException();
- }
-}
-
-void JarBuffer::check_signature(guint8 *data) throw(JarHeaderException)
-{
- guint32 signature = unpack_4bytes(data, 0);
-
-#ifdef DEBUG_STREAMS
- std::printf("signature is %x\n", signature);
-#endif
-
- if (signature == 0x08074b50) {
- _urihandle->read(data, 12);
- } else if (signature != 0x02014b50 && signature != 0x04034b50) {
- throw JarHeaderException();
- }
-}
-
-void JarBuffer::reset()//resets zlib and buffer (also skips archived directories)
-{
- bool do_reset = false;
- while (compressed_left == 0) {
- consume_header();
- do_reset = true;
- }
-
- if (do_reset) {
- reset_inflation();
- setg(eback(), eback(), eback());
- }
-}
-
-int JarBuffer::consume_and_inflate()
-{
- int nbytes;
-
- reset();
-
- nbytes = compressed_left > BUFSIZE_STREAM ? BUFSIZE_STREAM
- : compressed_left;
-
- if (is_compressed())
- return consume_compressed(nbytes);
- else
- return consume_uncompressed(nbytes);
-}
-
-int JarBuffer::consume_compressed(int nbytes)
-{
- int ret=do_consume_and_inflate(nbytes);
-
- if ( ret == EOF && eflen > 0 ) {
- std::vector<guint8> efbuf(eflen);
- _urihandle->read(&efbuf[0], eflen);
- return 1;
- }
-
- return ret;
-}
-
-int JarBuffer::consume_uncompressed(int nbytes)
-{
- std::vector<guint8> 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)
-{
- GByteArray *gba = do_inflate(data, nbytes);
- compressed_left -= nbytes;
- return gba;
-}
-
-guint32 JarBuffer::unpack_4bytes(guint8 *data, const int offset)
-{
- return ((guint32)data[offset]
- + (((guint32)data[offset + 1]) << 8)
- + (((guint32)data[offset + 2]) << 16)
- + (((guint32)data[offset + 3]) << 24));
-}
-
-guint16 JarBuffer::unpack_2bytes(guint8 *data, int offset)
-{
- return ((guint16)data[offset] + (((guint16)data[offset + 1]) << 8));
-}
-
-} // namespace Inkscape
-
-/*
- Local Variables:
- mode:c++
- c-file-style:"stroustrup"
- c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
- indent-tabs-mode:nil
- fill-column:99
- End:
-*/
-// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :