[haiku-commits] haiku: hrev47454 - src/tests/kits/support src/kits/support headers/private/support

  • From: ingo_weinhold@xxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Tue, 1 Jul 2014 21:55:15 +0200 (CEST)

hrev47454 adds 2 changesets to branch 'master'
old head: 3b19a781372517c294c6aba6cc3d744ce686699d
new head: 5c8bfe24eab3045337f5316e533107751078a2e7
overview: http://cgit.haiku-os.org/haiku/log/?qt=range&q=5c8bfe2+%5E3b19a78

----------------------------------------------------------------------------

72cf56a: BZlibCompressionAlgorithm: Basic support for gzip format

5c8bfe2: compression_test: Add option for gzip format

                                    [ Ingo Weinhold <ingo_weinhold@xxxxxx> ]

----------------------------------------------------------------------------

4 files changed, 84 insertions(+), 19 deletions(-)
.../private/support/ZlibCompressionAlgorithm.h   |  5 ++
src/kits/support/ZlibCompressionAlgorithm.cpp    | 36 ++++++++++--
src/tests/kits/support/Jamfile                   |  2 +-
src/tests/kits/support/compression_test.cpp      | 60 ++++++++++++++++----

############################################################################

Commit:      72cf56a0fd536ab9eb5398f95df9347b25a5e707
URL:         http://cgit.haiku-os.org/haiku/commit/?id=72cf56a
Author:      Ingo Weinhold <ingo_weinhold@xxxxxx>
Date:        Tue Jul  1 19:53:49 2014 UTC

BZlibCompressionAlgorithm: Basic support for gzip format

----------------------------------------------------------------------------

diff --git a/headers/private/support/ZlibCompressionAlgorithm.h 
b/headers/private/support/ZlibCompressionAlgorithm.h
index 6e8099d..df9ddae 100644
--- a/headers/private/support/ZlibCompressionAlgorithm.h
+++ b/headers/private/support/ZlibCompressionAlgorithm.h
@@ -31,9 +31,14 @@ public:
                        size_t                          BufferSize() const;
                        void                            SetBufferSize(size_t 
size);
 
+                       // TODO: Support setting the gzip header.
+                       bool                            IsGzipFormat() const;
+                       void                            SetGzipFormat(bool 
gzipFormat);
+
 private:
                        int32                           fCompressionLevel;
                        size_t                          fBufferSize;
+                       bool                            fGzipFormat;
 };
 
 
diff --git a/src/kits/support/ZlibCompressionAlgorithm.cpp 
b/src/kits/support/ZlibCompressionAlgorithm.cpp
index ca02633..9aaaf26 100644
--- a/src/kits/support/ZlibCompressionAlgorithm.cpp
+++ b/src/kits/support/ZlibCompressionAlgorithm.cpp
@@ -45,7 +45,8 @@ BZlibCompressionParameters::BZlibCompressionParameters(
        :
        BCompressionParameters(),
        fCompressionLevel(compressionLevel),
-       fBufferSize(kDefaultBufferSize)
+       fBufferSize(kDefaultBufferSize),
+       fGzipFormat(false)
 {
 }
 
@@ -83,6 +84,20 @@ BZlibCompressionParameters::SetBufferSize(size_t size)
 }
 
 
+bool
+BZlibCompressionParameters::IsGzipFormat() const
+{
+       return fGzipFormat;
+}
+
+
+void
+BZlibCompressionParameters::SetGzipFormat(bool gzipFormat)
+{
+       fGzipFormat = gzipFormat;
+}
+
+
 // #pragma mark - BZlibDecompressionParameters
 
 
@@ -127,10 +142,18 @@ struct BZlibCompressionAlgorithm::CompressionStrategy {
        static int Init(z_stream& stream,
                const BZlibCompressionParameters* parameters)
        {
-               return deflateInit(&stream,
-                       parameters != NULL
-                               ? parameters->CompressionLevel()
-                               : B_ZLIB_COMPRESSION_DEFAULT);
+               int32 compressionLevel = B_ZLIB_COMPRESSION_DEFAULT;
+               bool gzipFormat = false;
+               if (parameters != NULL) {
+                       compressionLevel = parameters->CompressionLevel();
+                       gzipFormat = parameters->IsGzipFormat();
+               }
+
+               return deflateInit2(&stream, compressionLevel,
+                       Z_DEFLATED,
+                       MAX_WBITS + (gzipFormat ? 16 : 0),
+                       MAX_MEM_LEVEL,
+                       Z_DEFAULT_STRATEGY);
        }
 
        static void Uninit(z_stream& stream)
@@ -159,7 +182,8 @@ struct BZlibCompressionAlgorithm::DecompressionStrategy {
        static int Init(z_stream& stream,
                const BZlibDecompressionParameters* /*parameters*/)
        {
-               return inflateInit(&stream);
+               // auto-detect zlib/gzip header
+               return inflateInit2(&stream, 32 + MAX_WBITS);
        }
 
        static void Uninit(z_stream& stream)

############################################################################

Revision:    hrev47454
Commit:      5c8bfe24eab3045337f5316e533107751078a2e7
URL:         http://cgit.haiku-os.org/haiku/commit/?id=5c8bfe2
Author:      Ingo Weinhold <ingo_weinhold@xxxxxx>
Date:        Tue Jul  1 19:54:27 2014 UTC

compression_test: Add option for gzip format

----------------------------------------------------------------------------

diff --git a/src/tests/kits/support/Jamfile b/src/tests/kits/support/Jamfile
index 6257f21..86a90ae 100644
--- a/src/tests/kits/support/Jamfile
+++ b/src/tests/kits/support/Jamfile
@@ -85,7 +85,7 @@ UnitTestLib libsupporttest.so
 
 UsePrivateHeaders support ;
 
-SimpleTest compression_test : compression_test.cpp : be ;
+SimpleTest compression_test : compression_test.cpp : be $(TARGET_LIBSUPC++) ;
 SimpleTest string_utf8_tests : string_utf8_tests.cpp : be ;
 
 SubInclude HAIKU_TOP src tests kits support barchivable ;
diff --git a/src/tests/kits/support/compression_test.cpp 
b/src/tests/kits/support/compression_test.cpp
index 21cdd25..c752a90 100644
--- a/src/tests/kits/support/compression_test.cpp
+++ b/src/tests/kits/support/compression_test.cpp
@@ -19,6 +19,12 @@ extern const char* __progname;
 const char* kCommandName = __progname;
 
 
+enum CompressionType {
+       ZlibCompression,
+       GzipCompression,
+};
+
+
 static const char* kUsage =
        "Usage: %s <options> <input file> <output file>\n"
        "Compresses or decompresses (option -d) a file.\n"
@@ -29,6 +35,8 @@ static const char* kUsage =
        "      Defaults to 9.\n"
        "  -d, --decompress\n"
        "      Decompress the input file (default is compress).\n"
+       "  -f <format>\n"
+       "      Specify the compression format: \"zlib\" (default), or 
\"gzip\"\n"
        "  -h, --help\n"
        "      Print this usage info.\n"
        "  -i, --input-stream\n"
@@ -50,6 +58,7 @@ main(int argc, const char* const* argv)
        int compressionLevel = B_ZLIB_COMPRESSION_DEFAULT;
        bool compress = true;
        bool useInputStream = true;
+       CompressionType compressionType = ZlibCompression;
 
        while (true) {
                static struct option sLongOptions[] = {
@@ -60,7 +69,7 @@ main(int argc, const char* const* argv)
                };
 
                opterr = 0; // don't print errors
-               int c = getopt_long(argc, (char**)argv, "+0123456789dhi",
+               int c = getopt_long(argc, (char**)argv, "+0123456789df:hi",
                        sLongOptions, NULL);
                if (c == -1)
                        break;
@@ -87,6 +96,18 @@ main(int argc, const char* const* argv)
                                compress = false;
                                break;
 
+                       case 'f':
+                               if (strcmp(optarg, "zlib") == 0) {
+                                       compressionType = ZlibCompression;
+                               } else if (strcmp(optarg, "gzip") == 0) {
+                                       compressionType = GzipCompression;
+                               } else {
+                                       fprintf(stderr, "Error: Unsupported 
compression type "
+                                               "\"%s\"\n", optarg);
+                                       return 1;
+                               }
+                               break;
+
                        case 'i':
                                useInputStream = true;
                                break;
@@ -123,19 +144,34 @@ main(int argc, const char* const* argv)
                return 1;
        }
 
-       // init parameters
-       BZlibCompressionParameters compressionParameters(compressionLevel);
-       BZlibDecompressionParameters decompressionParameters;
+       // create compression algorithm and parameters
+       BCompressionAlgorithm* compressionAlgorithm;
+       BCompressionParameters* compressionParameters;
+       BDecompressionParameters* decompressionParameters;
+       switch (compressionType) {
+               case ZlibCompression:
+               case GzipCompression:
+               {
+                       compressionAlgorithm = new BZlibCompressionAlgorithm;
+                       BZlibCompressionParameters* zlibCompressionParameters
+                               = new 
BZlibCompressionParameters(compressionLevel);
+                       zlibCompressionParameters->SetGzipFormat(
+                               compressionType == GzipCompression);
+                       compressionParameters = zlibCompressionParameters;
+                       decompressionParameters = new 
BZlibDecompressionParameters;
+                       break;
+               }
+       }
 
        if (useInputStream) {
                // create input stream
                BDataIO* inputStream;
                if (compress) {
-                       error = 
BZlibCompressionAlgorithm().CreateCompressingInputStream(
-                               &inputFile, &compressionParameters, 
inputStream);
+                       error = 
compressionAlgorithm->CreateCompressingInputStream(
+                               &inputFile, compressionParameters, inputStream);
                } else {
-                       error = 
BZlibCompressionAlgorithm().CreateDecompressingInputStream(
-                               &inputFile, &decompressionParameters, 
inputStream);
+                       error = 
compressionAlgorithm->CreateDecompressingInputStream(
+                               &inputFile, decompressionParameters, 
inputStream);
                }
 
                if (error != B_OK) {
@@ -167,11 +203,11 @@ main(int argc, const char* const* argv)
                // create output stream
                BDataIO* outputStream;
                if (compress) {
-                       error = 
BZlibCompressionAlgorithm().CreateCompressingOutputStream(
-                               &outputFile, &compressionParameters, 
outputStream);
+                       error = 
compressionAlgorithm->CreateCompressingOutputStream(
+                               &outputFile, compressionParameters, 
outputStream);
                } else {
-                       error = 
BZlibCompressionAlgorithm().CreateDecompressingOutputStream(
-                               &outputFile, &decompressionParameters, 
outputStream);
+                       error = 
compressionAlgorithm->CreateDecompressingOutputStream(
+                               &outputFile, decompressionParameters, 
outputStream);
                }
 
                if (error != B_OK) {


Other related posts:

  • » [haiku-commits] haiku: hrev47454 - src/tests/kits/support src/kits/support headers/private/support - ingo_weinhold