This file is indexed.

/usr/include/dar/compressor.hpp is in libdar-dev 2.4.2-1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
/*********************************************************************/
// dar - disk archive - a backup/restoration program
// Copyright (C) 2002-2052 Denis Corbin
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
//
// to contact the author : http://dar.linux.free.fr/email.html
/*********************************************************************/
// $Id: compressor.hpp,v 1.26 2011/04/17 13:12:29 edrusb Rel $
//
/*********************************************************************/
    /// \file compressor.hpp
    /// \brief compression engine implementation
    /// \ingroup Private

#ifndef COMPRESSOR_HPP
#define COMPRESSOR_HPP

#include "/usr/include/dar/libdar_my_config.h"

#include "/usr/include/dar/infinint.hpp"
#include "/usr/include/dar/generic_file.hpp"
#include "/usr/include/dar/integers.hpp"
#include "/usr/include/dar/wrapperlib.hpp"

namespace libdar
{

	/// the different compression algorithm available

	/// values to be used as argument of libdar API calls
	/// \ingroup API
    enum compression
    {
	none = 'n',  ///< no compression
	gzip = 'z',  ///< gzip compression
	bzip2 = 'y', ///< bzip2 compression
	lzo = 'l'    ///< lzo compression
    };

	/// \ingroup Private
	/// @}

    extern compression char2compression(char a);
    extern char compression2char(compression c);
    extern std::string compression2string(compression c);
    extern compression string2compression(const std::string & a); // throw Erange if an unknown string is given

	/// compression class for gzip and bzip2 algorithms
    class compressor : public generic_file
    {
    public :
        compressor(compression algo, generic_file & compressed_side, U_I compression_level = 9);
            // compressed_side is not owned by the object and will remains
            // after the objet destruction
        compressor(compression algo, generic_file *compressed_side, U_I compression_level = 9);
            // compressed_side is owned by the object and will be
            // deleted a destructor time
        ~compressor();

        void flush_write(); // flush all data to compressed_side, and reset the compressor
            // for that additional write can be uncompresssed starting at this point.
        void flush_read(); // reset decompression engine to be able to read the next block of compressed data
            // if not called, furthur read return EOF
        void clean_read(); // discard any byte buffered and not yet returned by read()
        void clean_write(); // discard any byte buffered and not yet wrote to compressed_side;

        compression get_algo() const { return current_algo; };

	    /// changes compression algorithm used by the compressor

	    /// \param[in] new_algo defines the new algorithm to use
	    /// \param[in] new_compression_level defines the new compression level to use.
            /// \note valid value for new_compression_level range from 0 (no compression) to
	    /// 9 (maximum compression).
        void change_algo(compression new_algo, U_I new_compression_level);


	    /// changes the compression algorithm keeping the same compression level

        void change_algo(compression new_algo)
	{
	    change_algo(new_algo, current_level);
	};

            // inherited from generic file
        bool skip(const infinint & pos) { flush_write(); flush_read(); clean_read(); return compressed->skip(pos); };
        bool skip_to_eof()  { flush_write(); flush_read(); clean_read(); return compressed->skip_to_eof(); };
        bool skip_relative(S_I x) { flush_write(); flush_read(); clean_read(); return compressed->skip_relative(x); };
        infinint get_position() { return compressed->get_position(); };

    protected :
        U_I inherited_read(char *a, U_I size) { return (this->*read_ptr)(a, size); };
        void inherited_write(const char *a, U_I size) { (this->*write_ptr)(a, size); };
	void inherited_sync_write() { flush_write(); };
	void inherited_terminate() { local_terminate(); };
    private :
        struct xfer
        {
            wrapperlib wrap;
            char *buffer;
            U_I size;

            xfer(U_I sz, wrapperlib_mode mode);
            ~xfer();
        };

	struct lzo_block_header
	{
	    char type;             //< let the possibility to extend this architecture (for now type is fixed)
	    infinint size;         //< size of the following compressed block of data

	    void dump(generic_file & f);
	    void set_from(generic_file & f);
	};


        xfer *compr, *decompr;     //< datastructure for bzip2 an gzip compression

	char *lzo_read_buffer;     //< stores clear data (uncompressed) read from the compressed generic_file
	char *lzo_write_buffer;    //< stores the clear data to be compressed and written to the compressed generic_file
	U_I lzo_read_size;         //< number of available bytes in the read buffer for lzo decompression
	U_I lzo_write_size;        //< number of available bytes to compress and next place where to add more data in the wite buffer
	U_I lzo_read_start;        //< location of the next byte to read out from the read buffer
	bool lzo_write_flushed;    //< whether write flushing has been done
	bool lzo_read_reached_eof; //< whether reading reached end of file and the lzo engine has to be reset to uncompress further data
	char *lzo_compressed;      //< compressed data just read or about to be written
	char *lzo_wrkmem;          //< work memory for LZO library

        generic_file *compressed;
        bool compressed_owner;
        compression current_algo;
	U_I current_level;

        void init(compression algo, generic_file *compressed_side, U_I compression_level);
        void local_terminate();
        U_I (compressor::*read_ptr) (char *a, U_I size);
        U_I none_read(char *a, U_I size);
        U_I gzip_read(char *a, U_I size);
            // U_I zip_read(char *a, U_I size);
            // U_I bzip2_read(char *a, U_I size); // using gzip_read, same code thanks to wrapperlib
	U_I lzo_read(char *a, U_I size);

        void (compressor::*write_ptr) (const char *a, U_I size);
        void none_write(const char *a, U_I size);
        void gzip_write(const char *a, U_I size);
            // void zip_write(char *a, U_I size);
            // void bzip2_write(char *a, U_I size); // using gzip_write, same code thanks to wrapperlib
	void lzo_write(const char *a, U_I size);

	void lzo_compress_buffer_and_write();
	void lzo_read_and_uncompress_to_buffer();
    };

	/// @}

} // end of namespace

#endif