1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ 2 /* 3 * This file is part of the LibreOffice project. 4 * 5 * This Source Code Form is subject to the terms of the Mozilla Public 6 * License, v. 2.0. If a copy of the MPL was not distributed with this 7 * file, You can obtain one at http://mozilla.org/MPL/2.0/. 8 * 9 * This file incorporates work covered by the following license notice: 10 * 11 * Licensed to the Apache Software Foundation (ASF) under one or more 12 * contributor license agreements. See the NOTICE file distributed 13 * with this work for additional information regarding copyright 14 * ownership. The ASF licenses this file to you under the Apache 15 * License, Version 2.0 (the "License"); you may not use this file 16 * except in compliance with the License. You may obtain a copy of 17 * the License at http://www.apache.org/licenses/LICENSE-2.0 . 18 */ 19 20 #ifndef INCLUDED_HWPFILTER_SOURCE_HGZIP_H 21 #define INCLUDED_HWPFILTER_SOURCE_HGZIP_H 22 23 #include <zlib.h> 24 25 class HStream; 26 /** 27 * @short Structure for using z_stream 28 */ 29 struct gz_stream 30 { 31 z_stream stream; 32 /** 33 * The error code of z_stream operation 34 */ 35 int z_err; 36 /** 37 * EOF of the input file 38 */ 39 int z_eof; 40 /** 41 * Stream 42 */ 43 HStream* _inputstream; 44 /** 45 * Input buffer 46 */ 47 Byte *inbuf; 48 /** 49 * Crc32 of uncompressed data 50 */ 51 uLong crc; 52 /** 53 * Stream 54 */ 55 char *msg; 56 /** 57 * 'w' or 'r' 58 */ 59 char mode; 60 }; 61 62 /** 63 * Opens a gzipped stream for reading. 64 * gz_open returns NULL if the stream could not be opened or if there was 65 * insufficient memory to allocate the (de)compression state; errno 66 * can be checked to distinguish the two cases (if errno is zero, the 67 * zlib error is Z_MEM_ERROR). 68 * @param _stream Reference of stream object having binary data. 69 */ 70 gz_stream *gz_open ( HStream& _stream ); 71 /** 72 * Flushes all pending output if necessary, closes the compressed stream 73 * and deallocates all the (de)compression state 74 */ 75 int gz_close ( gz_stream *file ); 76 /** 77 * Reads the given number of uncompressed bytes from the compressed stream 78 * @param file Gzipped stream 79 * @param buf Buffer to have the data to be read 80 * @param len Length of data to be read 81 * @returns The number of bytes actually read 82 */ 83 size_t gz_read ( gz_stream *file, voidp buf, unsigned len ); 84 /** 85 * Flushes all pending output into the compressed file 86 * gz_flush should be called only when strictly necessary because it can 87 * degrade compression 88 * @param flush Is as in the deflate() function 89 */ 90 int gz_flush ( gz_stream *file, int flush ); 91 #endif // INCLUDED_HWPFILTER_SOURCE_HGZIP_H 92 93 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ 94