[haiku-commits] haiku: hrev52209 - src/kits/package/hpkg src/bin/package src/add-ons/kernel/file_systems/packagefs headers/os/package/hpkg

  • From: waddlesplash <waddlesplash@xxxxxxxxx>
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Sat, 11 Aug 2018 19:10:03 -0400 (EDT)

hrev52209 adds 1 changeset to branch 'master'
old head: b8a38e2bc1a6acae1b9a91dc082aafafe4af0911
new head: 81375d4fbb014aef855696c12cf7b0e49083a8b1
overview: 
https://git.haiku-os.org/haiku/log/?qt=range&q=81375d4fbb01+%5Eb8a38e2bc1a6

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

81375d4fbb01: Package Kit: add Zstd compression.
  
  Change-Id: Idbdb7cf1bde659046a88ea69a76e3b5fc4cd7013
  Reviewed-on: https://review.haiku-os.org/323
  Reviewed-by: Adrien Destugues <pulkomandy@xxxxxxxxx>

                                   [ Jérôme Duval <jerome.duval@xxxxxxxxx> ]

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

Revision:    hrev52209
Commit:      81375d4fbb014aef855696c12cf7b0e49083a8b1
URL:         https://git.haiku-os.org/haiku/commit/?id=81375d4fbb01
Author:      Jérôme Duval <jerome.duval@xxxxxxxxx>
Date:        Wed Jul 11 09:36:44 2018 UTC
Committer:   waddlesplash <waddlesplash@xxxxxxxxx>
Commit-Date: Sat Aug 11 23:10:00 2018 UTC

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

8 files changed, 82 insertions(+), 5 deletions(-)
headers/os/package/hpkg/HPKGDefs.h               |  3 ++-
.../kernel/file_systems/packagefs/Jamfile        | 14 ++++++++++-
src/bin/package/command_create.cpp               | 11 ++++++++-
src/bin/package/command_recompress.cpp           | 11 ++++++++-
src/bin/package/package.cpp                      |  2 ++
src/kits/package/Jamfile                         |  4 ++-
src/kits/package/hpkg/ReaderImplBase.cpp         | 16 ++++++++++++
src/kits/package/hpkg/WriterImplBase.cpp         | 26 ++++++++++++++++++++

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

diff --git a/headers/os/package/hpkg/HPKGDefs.h 
b/headers/os/package/hpkg/HPKGDefs.h
index 4650a7ff05..ba7735c666 100644
--- a/headers/os/package/hpkg/HPKGDefs.h
+++ b/headers/os/package/hpkg/HPKGDefs.h
@@ -98,7 +98,8 @@ enum BHPKGAttributeID {
 // compression types
 enum {
        B_HPKG_COMPRESSION_NONE = 0,
-       B_HPKG_COMPRESSION_ZLIB = 1
+       B_HPKG_COMPRESSION_ZLIB = 1,
+       B_HPKG_COMPRESSION_ZSTD = 2
 };
 
 
diff --git a/src/add-ons/kernel/file_systems/packagefs/Jamfile 
b/src/add-ons/kernel/file_systems/packagefs/Jamfile
index 52aebe0975..5a31abff21 100644
--- a/src/add-ons/kernel/file_systems/packagefs/Jamfile
+++ b/src/add-ons/kernel/file_systems/packagefs/Jamfile
@@ -5,6 +5,17 @@ UseBuildFeatureHeaders zlib ;
 UsePrivateKernelHeaders ;
 UsePrivateHeaders package shared storage support ;
 
+local zstdSources ;
+local zstdKernelLib ;
+
+if [ FIsBuildFeatureEnabled zstd ] {
+       zstdSources = ZstdCompressionAlgorithm.cpp ;
+       zstdKernelLib = kernel_libzstd.a ;
+       UseBuildFeatureHeaders zstd ;
+       Includes [ FGristFiles $(zstdSources) ]
+               : [ BuildFeatureAttribute zstd : headers ] ;
+       SubDirC++Flags -DZSTD_ENABLED ;
+}
 
 local subDirs =
        indices
@@ -117,6 +128,7 @@ local storageKitSources =
 local supportKitSources =
        CompressionAlgorithm.cpp
        ZlibCompressionAlgorithm.cpp
+       $(zstdSources)
 ;
 
 KernelAddon packagefs
@@ -129,7 +141,7 @@ KernelAddon packagefs
        $(storageKitSources)
        $(supportKitSources)
 
-       : kernel_libz.a
+       : kernel_libz.a $(zstdKernelLib)
 ;
 
 
diff --git a/src/bin/package/command_create.cpp 
b/src/bin/package/command_create.cpp
index ed2498210b..b397201f06 100644
--- a/src/bin/package/command_create.cpp
+++ b/src/bin/package/command_create.cpp
@@ -39,6 +39,7 @@ command_create(int argc, const char* const* argv)
        bool quiet = false;
        bool verbose = false;
        int32 compressionLevel = 
BPackageKit::BHPKG::B_HPKG_COMPRESSION_LEVEL_BEST;
+       int32 compression = BPackageKit::BHPKG::B_HPKG_COMPRESSION_ZLIB;
 
        while (true) {
                static struct option sLongOptions[] = {
@@ -49,7 +50,7 @@ command_create(int argc, const char* const* argv)
                };
 
                opterr = 0; // don't print errors
-               int c = getopt_long(argc, (char**)argv, "+b0123456789C:hi:I:qv",
+               int c = getopt_long(argc, (char**)argv, 
"+b0123456789C:hi:I:qvz",
                        sLongOptions, NULL);
                if (c == -1)
                        break;
@@ -96,6 +97,10 @@ command_create(int argc, const char* const* argv)
                                verbose = true;
                                break;
 
+                       case 'z':
+                               compression = 
BPackageKit::BHPKG::B_HPKG_COMPRESSION_ZSTD;
+                               break;
+
                        default:
                                print_usage_and_exit(true);
                                break;
@@ -123,6 +128,10 @@ command_create(int argc, const char* const* argv)
                        BPackageKit::BHPKG::B_HPKG_COMPRESSION_NONE);
        }
 
+       if (compressionLevel == 0)
+               compression = BPackageKit::BHPKG::B_HPKG_COMPRESSION_NONE;
+       writerParameters.SetCompression(compression);
+
        PackageWriterListener listener(verbose, quiet);
        BPackageWriter packageWriter(&listener);
        status_t result = packageWriter.Init(packageFileName, 
&writerParameters);
diff --git a/src/bin/package/command_recompress.cpp 
b/src/bin/package/command_recompress.cpp
index c380a3e844..671e42e5e9 100644
--- a/src/bin/package/command_recompress.cpp
+++ b/src/bin/package/command_recompress.cpp
@@ -45,6 +45,7 @@ command_recompress(int argc, const char* const* argv)
        bool quiet = false;
        bool verbose = false;
        int32 compressionLevel = 
BPackageKit::BHPKG::B_HPKG_COMPRESSION_LEVEL_BEST;
+       int32 compression = BPackageKit::BHPKG::B_HPKG_COMPRESSION_ZLIB;
 
        while (true) {
                static struct option sLongOptions[] = {
@@ -55,7 +56,7 @@ command_recompress(int argc, const char* const* argv)
                };
 
                opterr = 0; // don't print errors
-               int c = getopt_long(argc, (char**)argv, "+0123456789:hqv",
+               int c = getopt_long(argc, (char**)argv, "+0123456789:hqvz",
                        sLongOptions, NULL);
                if (c == -1)
                        break;
@@ -86,6 +87,10 @@ command_recompress(int argc, const char* const* argv)
                                verbose = true;
                                break;
 
+                       case 'z':
+                               compression = 
BPackageKit::BHPKG::B_HPKG_COMPRESSION_ZSTD;
+                               break;
+
                        default:
                                print_usage_and_exit(true);
                                break;
@@ -124,6 +129,10 @@ command_recompress(int argc, const char* const* argv)
                        BPackageKit::BHPKG::B_HPKG_COMPRESSION_NONE);
        }
 
+       if (compressionLevel == 0)
+               compression = BPackageKit::BHPKG::B_HPKG_COMPRESSION_NONE;
+       writerParameters.SetCompression(compression);
+
        PackageWriterListener listener(verbose, quiet);
        BPackageWriter packageWriter(&listener);
        if (strcmp(outputPackageFileName, "-") == 0) {
diff --git a/src/bin/package/package.cpp b/src/bin/package/package.cpp
index d47b8bca7b..bfbb6c348e 100644
--- a/src/bin/package/package.cpp
+++ b/src/bin/package/package.cpp
@@ -50,6 +50,7 @@ static const char* kUsage =
        "\n"
        "    -q         - Be quiet (don't show any output except for errors).\n"
        "    -v         - Be verbose (show more info about created package).\n"
+       "    -z         - Use Zstd compression.\n"
        "\n"
        "  create [ <options> ] <package>\n"
        "    Creates package file <package> from contents of current 
directory.\n"
@@ -120,6 +121,7 @@ static const char* kUsage =
        "                 Defaults to 9.\n"
        "    -q         - Be quiet (don't show any output except for errors).\n"
        "    -v         - Be verbose (show more info about created package).\n"
+       "    -z         - Use Zstd compression.\n"
        "\n"
        "Common Options:\n"
        "  -h, --help   - Print this usage info.\n"
diff --git a/src/kits/package/Jamfile b/src/kits/package/Jamfile
index b849ecf189..98b03b92d4 100644
--- a/src/kits/package/Jamfile
+++ b/src/kits/package/Jamfile
@@ -62,7 +62,9 @@ local architectureObject ;
 for architectureObject in [ MultiArchSubDirSetup ] {
        on $(architectureObject) {
                UseBuildFeatureHeaders curl ;
-
+               if [ FIsBuildFeatureEnabled zstd ] {
+                       SubDirC++Flags -DZSTD_ENABLED ;
+               }
                SEARCH_SOURCE += [ FDirName $(HAIKU_TOP) src kits package hpkg 
] ;
                SEARCH_SOURCE += [ FDirName $(HAIKU_TOP) src kits package hpkg 
v1 ] ;
                SEARCH_SOURCE += [ FDirName $(HAIKU_TOP) src kits package 
manager ] ;
diff --git a/src/kits/package/hpkg/ReaderImplBase.cpp 
b/src/kits/package/hpkg/ReaderImplBase.cpp
index bb3bb1b05e..c4e4978c15 100644
--- a/src/kits/package/hpkg/ReaderImplBase.cpp
+++ b/src/kits/package/hpkg/ReaderImplBase.cpp
@@ -20,6 +20,9 @@
 #include <DataIO.h>
 
 #include <ZlibCompressionAlgorithm.h>
+#ifdef ZSTD_ENABLED
+#include <ZstdCompressionAlgorithm.h>
+#endif
 
 #include <package/hpkg/HPKGDefsPrivate.h>
 #include <package/hpkg/PackageFileHeapReader.h>
@@ -824,6 +827,19 @@ ReaderImplBase::InitHeapReader(uint32 compression, uint32 
chunkSize,
                                return B_NO_MEMORY;
                        }
                        break;
+#ifdef ZSTD_ENABLED
+               case B_HPKG_COMPRESSION_ZSTD:
+                       decompressionAlgorithm = 
DecompressionAlgorithmOwner::Create(
+                               new(std::nothrow) BZstdCompressionAlgorithm,
+                               new(std::nothrow) BZstdDecompressionParameters);
+                       
decompressionAlgorithmReference.SetTo(decompressionAlgorithm, true);
+                       if (decompressionAlgorithm == NULL
+                               || decompressionAlgorithm->algorithm == NULL
+                               || decompressionAlgorithm->parameters == NULL) {
+                               return B_NO_MEMORY;
+                       }
+                       break;
+#endif
                default:
                        fErrorOutput->PrintError("Error: Invalid heap 
compression\n");
                        return B_BAD_DATA;
diff --git a/src/kits/package/hpkg/WriterImplBase.cpp 
b/src/kits/package/hpkg/WriterImplBase.cpp
index 7db79e1dc3..c17f534a61 100644
--- a/src/kits/package/hpkg/WriterImplBase.cpp
+++ b/src/kits/package/hpkg/WriterImplBase.cpp
@@ -20,6 +20,9 @@
 
 #include <AutoDeleter.h>
 #include <ZlibCompressionAlgorithm.h>
+#ifdef ZSTD_ENABLED
+#include <ZstdCompressionAlgorithm.h>
+#endif
 
 #include <package/hpkg/DataReader.h>
 #include <package/hpkg/ErrorOutput.h>
@@ -326,6 +329,29 @@ WriterImplBase::InitHeapReader(size_t headerSize)
                                throw std::bad_alloc();
                        }
                        break;
+#ifdef ZSTD_ENABLED
+               case B_HPKG_COMPRESSION_ZSTD:
+                       compressionAlgorithm = 
CompressionAlgorithmOwner::Create(
+                               new(std::nothrow) BZstdCompressionAlgorithm,
+                               new(std::nothrow) BZstdCompressionParameters(
+                                       fParameters.CompressionLevel()));
+                       
compressionAlgorithmReference.SetTo(compressionAlgorithm, true);
+
+                       decompressionAlgorithm = 
DecompressionAlgorithmOwner::Create(
+                               new(std::nothrow) BZstdCompressionAlgorithm,
+                               new(std::nothrow) BZstdDecompressionParameters);
+                       
decompressionAlgorithmReference.SetTo(decompressionAlgorithm, true);
+
+                       if (compressionAlgorithm == NULL
+                               || compressionAlgorithm->algorithm == NULL
+                               || compressionAlgorithm->parameters == NULL
+                               || decompressionAlgorithm == NULL
+                               || decompressionAlgorithm->algorithm == NULL
+                               || decompressionAlgorithm->parameters == NULL) {
+                               throw std::bad_alloc();
+                       }
+                       break;
+#endif
                default:
                        fErrorOutput->PrintError("Error: Invalid heap 
compression\n");
                        return B_BAD_VALUE;


Other related posts:

  • » [haiku-commits] haiku: hrev52209 - src/kits/package/hpkg src/bin/package src/add-ons/kernel/file_systems/packagefs headers/os/package/hpkg - waddlesplash