diff options
| author | Ted Gould <ted@gould.cx> | 2008-11-21 05:24:08 +0000 |
|---|---|---|
| committer | Ted Gould <ted@canonical.com> | 2008-11-21 05:24:08 +0000 |
| commit | 44a3a78fb6a3863c0c7f3c1193837337e68a67e4 (patch) | |
| tree | 1722ee5ec6f88c881cd4124923354b3c1311501b /src/streams-gzip.cpp | |
| parent | Merge from trunk (diff) | |
| download | inkscape-44a3a78fb6a3863c0c7f3c1193837337e68a67e4.tar.gz inkscape-44a3a78fb6a3863c0c7f3c1193837337e68a67e4.zip | |
Merge from fe-moved
(bzr r6891)
Diffstat (limited to 'src/streams-gzip.cpp')
| -rw-r--r-- | src/streams-gzip.cpp | 153 |
1 files changed, 0 insertions, 153 deletions
diff --git a/src/streams-gzip.cpp b/src/streams-gzip.cpp deleted file mode 100644 index c77e7162b..000000000 --- a/src/streams-gzip.cpp +++ /dev/null @@ -1,153 +0,0 @@ -/* - * IO layer : gzip streambuf and streams - * - * Authors: - * Johan Ceuppens <jceuppen at easynet dot be> - * - * Copyright (C) 2004 Johan Ceuppens - * - * Released under GNU LGPL, read the file 'COPYING.LIB' for more information - */ - -#include <cstring> -#include <string> -#include <string.h> - -#include "streams-gzip.h" - -namespace Inkscape { - -//With some inpsiration and code from libgsf, fastjar, libpng and RFC 1952 - -static int const GZIP_IS_ASCII = 0x01; //file contains text -static int const GZIP_HEADER_CRC = 0x02; //there is a CRC in the header -static int const GZIP_EXTRA_FIELD = 0x04; //there is an 'extra' field -static int const GZIP_ORIGINAL_NAME = 0x08; //the original is stored -static int const GZIP_HAS_COMMENT = 0x10; //There is a comment in the header -static unsigned int const GZIP_HEADER_FLAGS = (GZIP_IS_ASCII - |GZIP_HEADER_CRC - |GZIP_EXTRA_FIELD - |GZIP_ORIGINAL_NAME - |GZIP_HAS_COMMENT); - -/** - * GZipBuffer - */ - -void GZipBuffer::consume_header() throw(GZipHeaderException) -{ - unsigned int flags; - guint8 data[4]; - - try { - _urihandle->read(data, 4); - check_signature(data); - check_flags(data); - flags = data[3]; - _urihandle->read(data, 4); - //get_modification_time() - _urihandle->read(data, 1); - //check_extra_flags(); - _urihandle->read(data, 1); - //check_OS(); - - if (flags & GZIP_EXTRA_FIELD) { - get_extrafield(); - } - if (flags & GZIP_ORIGINAL_NAME) { - get_filename(); - } - if (flags & GZIP_HAS_COMMENT) { - get_comment(); - } - if (flags & GZIP_HEADER_CRC) { - get_crc(); - } - } - catch(std::exception& e) { - throw GZipHeaderException(); - } -} - -void GZipBuffer::check_signature(guint8 *data) throw(GZipHeaderException) -{ - guint8 const signature[2] = {0x1f, 0x8b}; - if (memcmp(data, signature, sizeof(signature)) != 0) - throw GZipHeaderException(); -} - -void GZipBuffer::check_flags(guint8 *data) throw(GZipHeaderException) -{ - unsigned int flags = data[3]; - if (data[2] != Z_DEFLATED || (flags & ~GZIP_HEADER_FLAGS) != 0) - throw GZipHeaderException(); -} - -gchar *GZipBuffer::get_filename() -{ -#ifdef DEBUG_STREAMS - std::cout<<"Filename is "; -#endif - return read_string(); -} - -gchar *GZipBuffer::get_comment() -{ -#ifdef DEBUG_STREAMS - std::cout<<"Comment is "<<std::endl; -#endif - return read_string(); -} - -guint16 GZipBuffer::get_crc() -{ - guint16 buf; - _urihandle->read(&buf, 2); - return buf; -} - -void GZipBuffer::get_extrafield() -{ - guint8 length_data[2]; - _urihandle->read(length_data, 2); - unsigned int const length = length_data[0] | (length_data[1] << 8); - guint8 *data = new guint8[length]; - _urihandle->read(data, length); -} - -gchar *GZipBuffer::read_string() throw(GZipHeaderException) -{ - GByteArray *gba = g_byte_array_new(); - try { - guint8 byte[1]; - do { - _urihandle->read(byte, 1); - g_byte_array_append(gba, byte, sizeof(byte)); -#ifdef DEBUG_STREAMS - std::cout <<(char)*byte; -#endif - } while (*byte != 0); - } catch (std::exception& e) { - g_byte_array_free(gba, TRUE); - throw GZipHeaderException(); - } -#ifdef DEBUG_STREAMS - std::cout<<std::endl; -#endif - gchar *ret = (gchar *)gba->data; - g_byte_array_free(gba, FALSE); - return ret; -} - -} // 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 : |
