Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Zip archive in Qt. How and which library better to use? QuaZIP? Libzip?
Forum Updated to NodeBB v4.3 + New Features

Zip archive in Qt. How and which library better to use? QuaZIP? Libzip?

Scheduled Pinned Locked Moved Solved General and Desktop
13 Posts 3 Posters 7.0k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • B Offline
    B Offline
    bogong
    wrote on last edited by
    #1

    Hello all!

    I've got issue to manage encrypted Zip-files and need to do it cross-platform:
    -- I need to add/delete/change files or directories on-fly in zip-archive
    -- I need to get information about file in archive
    -- I need to change password for zip-archive

    Does QuaZip can do this things for encrypted files? I haven't found methods for it.

    I found plain C library - libzip. Does anyone use it? Is it Ok for mobile platforms. Is there any manuals for building it for Qt project?

    KroMignonK 1 Reply Last reply
    0
    • B bogong

      Hello all!

      I've got issue to manage encrypted Zip-files and need to do it cross-platform:
      -- I need to add/delete/change files or directories on-fly in zip-archive
      -- I need to get information about file in archive
      -- I need to change password for zip-archive

      Does QuaZip can do this things for encrypted files? I haven't found methods for it.

      I found plain C library - libzip. Does anyone use it? Is it Ok for mobile platforms. Is there any manuals for building it for Qt project?

      KroMignonK Offline
      KroMignonK Offline
      KroMignon
      wrote on last edited by
      #2

      @bogong Yes QuaZip is able to work with password protection (cf. http://quazip.sourceforge.net/classQuaZipFile.html)

      //Opens a file for reading. 
      bool QuaZipFile::open (OpenMode mode, const char *password);
      
      //Opens a file for reading. 
      bool QuaZipFile::open (OpenMode mode, int *method, int *level, bool raw, const char *password=NULL)
      
      

      I have used QuaZip for some projects, it do the job!

      It is an old maxim of mine that when you have excluded the impossible, whatever remains, however improbable, must be the truth. (Sherlock Holmes)

      B 1 Reply Last reply
      3
      • KroMignonK KroMignon

        @bogong Yes QuaZip is able to work with password protection (cf. http://quazip.sourceforge.net/classQuaZipFile.html)

        //Opens a file for reading. 
        bool QuaZipFile::open (OpenMode mode, const char *password);
        
        //Opens a file for reading. 
        bool QuaZipFile::open (OpenMode mode, int *method, int *level, bool raw, const char *password=NULL)
        
        

        I have used QuaZip for some projects, it do the job!

        B Offline
        B Offline
        bogong
        wrote on last edited by
        #3

        @KroMignon Thanks a lot for rapid reply. Checked it but not found the definition of encryption type. Is there ability to define the length of key for AES? Is there ability to use different type of compression algorithm?

        KroMignonK 2 Replies Last reply
        0
        • B bogong

          @KroMignon Thanks a lot for rapid reply. Checked it but not found the definition of encryption type. Is there ability to define the length of key for AES? Is there ability to use different type of compression algorithm?

          KroMignonK Offline
          KroMignonK Offline
          KroMignon
          wrote on last edited by
          #4

          @bogong I don't know, don't used this feature of QuaZip

          It is an old maxim of mine that when you have excluded the impossible, whatever remains, however improbable, must be the truth. (Sherlock Holmes)

          1 Reply Last reply
          0
          • B bogong

            @KroMignon Thanks a lot for rapid reply. Checked it but not found the definition of encryption type. Is there ability to define the length of key for AES? Is there ability to use different type of compression algorithm?

            KroMignonK Offline
            KroMignonK Offline
            KroMignon
            wrote on last edited by
            #5

            @bogong Looking at QuaZip project page => https://sourceforge.net/p/quazip/feature-requests/19/

            It seems that AES is not yet supported but should be include in next release.

            It is an old maxim of mine that when you have excluded the impossible, whatever remains, however improbable, must be the truth. (Sherlock Holmes)

            B 1 Reply Last reply
            1
            • KroMignonK KroMignon

              @bogong Looking at QuaZip project page => https://sourceforge.net/p/quazip/feature-requests/19/

              It seems that AES is not yet supported but should be include in next release.

              B Offline
              B Offline
              bogong
              wrote on last edited by
              #6

              @KroMignon Then I have no any chance to use it. Will try to use libzip. This library already has AES but adding it to Qt Project looks like not trivial way.

              1 Reply Last reply
              0
              • VRoninV Offline
                VRoninV Offline
                VRonin
                wrote on last edited by
                #7

                QuaZip and KArchive are both wrappers around zlib and that library does not support encryption.

                If you want to use libzip, you can use the C++ wrapped version http://hg.markand.fr/libzip if, like me, do not like C style very much

                "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
                ~Napoleon Bonaparte

                On a crusade to banish setIndexWidget() from the holy land of Qt

                B 1 Reply Last reply
                2
                • VRoninV VRonin

                  QuaZip and KArchive are both wrappers around zlib and that library does not support encryption.

                  If you want to use libzip, you can use the C++ wrapped version http://hg.markand.fr/libzip if, like me, do not like C style very much

                  B Offline
                  B Offline
                  bogong
                  wrote on last edited by
                  #8

                  @VRonin
                  For me no matter which library to use. I need encryption. If you know alternative that might be used for encryption - it would be best to share opinion.

                  For now I am trying to build libzip and got failed. I've been following all of instructions but still have this:

                  Undefined symbols for architecture x86_64:
                    "_crc32", referenced from:
                        __zip_string_crc32 in libzipstatic.a(zip_string.c.o)
                       (maybe you meant: __zip_string_crc32)
                  ld: symbol(s) not found for architecture x86_64
                  clang: error: linker command failed with exit code 1 (use -v to see invocation)
                  make: *** [plainc_libzip.app/Contents/MacOS/plainc_libzip] Error 1
                  19:20:30: The process "/usr/bin/make" exited with code 2.
                  Error while building/deploying project plainc_libzip (kit: Desktop Qt 5.12.1 clang 64bit)
                  When executing step "Make"
                  

                  in *.pro file

                  macx: LIBS += -L$$PWD/libs/libzip/ -lzipstatic
                  ios: LIBS += -L$$PWD/libs/libzip/ -lzipstatic
                  
                  INCLUDEPATH += $$PWD/libs/libzip
                  DEPENDPATH += $$PWD/libs/libzip
                  
                  macx: PRE_TARGETDEPS += $$PWD/libs/libzip/libzipstatic.a
                  ios: PRE_TARGETDEPS += $$PWD/libs/libzip/libzipstatic.a
                  

                  Everything building passing all self tests but when I am trying to add it to QT project got this error. Dynamic library do not working too. I've got this when been trying to add it:

                  19:50:49: Running steps for project plainc_libzip...
                  19:50:49: Configuration unchanged, skipping qmake step.
                  19:50:49: Starting: "/usr/bin/make" -j8
                  /Users/alexandr/Applications/Qt5.12/5.12.1/clang_64/bin/qmake -o Makefile ../plainc_libzip/plainc_libzip.pro -spec macx-clang CONFIG+=debug CONFIG+=x86_64 CONFIG+=qml_debug
                  /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ -stdlib=libc++ -headerpad_max_install_names  -arch x86_64 -Wl,-syslibroot,/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk -mmacosx-version-min=10.12 -Wl,-rpath,@executable_path/Frameworks -Wl,-rpath,/Users/alexandr/Applications/Qt5.12/5.12.1/clang_64/lib -o plainc_libzip.app/Contents/MacOS/plainc_libzip main.o qrc_qml.o   -F/Users/alexandr/Applications/Qt5.12/5.12.1/clang_64/lib -lzip.5.0 -framework QtQuick -framework QtQml -framework QtNetwork -framework QtCore -framework DiskArbitration -framework IOKit -framework QtGui -framework OpenGL -framework AGL   
                  ld: library not found for -lzip.5.0
                  clang: error: linker command failed with exit code 1 (use -v to see invocation)
                  make: *** [plainc_libzip.app/Contents/MacOS/plainc_libzip] Error 1
                  19:50:50: The process "/usr/bin/make" exited with code 2.
                  Error while building/deploying project plainc_libzip (kit: Desktop Qt 5.12.1 clang 64bit)
                  When executing step "Make"
                  19:50:50: Elapsed time: 00:00.
                  

                  but in *.pro file I have this:

                  macx: LIBS += -lzip.5.0
                  

                  For now nothing works. But it shell be! And I hope it will.

                  1 Reply Last reply
                  0
                  • VRoninV Offline
                    VRoninV Offline
                    VRonin
                    wrote on last edited by VRonin
                    #9

                    Did you build libzip for your compiler & architecture? Looking at the CI log looks like this library as well relies on zlib in a way or another

                    "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
                    ~Napoleon Bonaparte

                    On a crusade to banish setIndexWidget() from the holy land of Qt

                    B 3 Replies Last reply
                    0
                    • VRoninV VRonin

                      Did you build libzip for your compiler & architecture? Looking at the CI log looks like this library as well relies on zlib in a way or another

                      B Offline
                      B Offline
                      bogong
                      wrote on last edited by
                      #10

                      @VRonin In following libzip build logs - there should be OK.

                      $ make
                      Scanning dependencies of target zipstatic
                      [  0%] Building C object lib/CMakeFiles/zipstatic.dir/zip_add.c.o
                      [  0%] Building C object lib/CMakeFiles/zipstatic.dir/zip_add_dir.c.o
                      [  0%] Building C object lib/CMakeFiles/zipstatic.dir/zip_add_entry.c.o
                      [  1%] Building C object lib/CMakeFiles/zipstatic.dir/zip_algorithm_deflate.c.o
                      [  1%] Building C object lib/CMakeFiles/zipstatic.dir/zip_buffer.c.o
                      [  1%] Building C object lib/CMakeFiles/zipstatic.dir/zip_close.c.o
                      [  1%] Building C object lib/CMakeFiles/zipstatic.dir/zip_delete.c.o
                      [  1%] Building C object lib/CMakeFiles/zipstatic.dir/zip_dir_add.c.o
                      [  1%] Building C object lib/CMakeFiles/zipstatic.dir/zip_dirent.c.o
                      [  3%] Building C object lib/CMakeFiles/zipstatic.dir/zip_discard.c.o
                      [  3%] Building C object lib/CMakeFiles/zipstatic.dir/zip_entry.c.o
                      [  3%] Building C object lib/CMakeFiles/zipstatic.dir/zip_err_str.c.o
                      [  3%] Building C object lib/CMakeFiles/zipstatic.dir/zip_error.c.o
                      [  3%] Building C object lib/CMakeFiles/zipstatic.dir/zip_error_clear.c.o
                      [  4%] Building C object lib/CMakeFiles/zipstatic.dir/zip_error_get.c.o
                      [  4%] Building C object lib/CMakeFiles/zipstatic.dir/zip_error_get_sys_type.c.o
                      [  4%] Building C object lib/CMakeFiles/zipstatic.dir/zip_error_strerror.c.o
                      [  4%] Building C object lib/CMakeFiles/zipstatic.dir/zip_error_to_str.c.o
                      [  4%] Building C object lib/CMakeFiles/zipstatic.dir/zip_extra_field.c.o
                      [  4%] Building C object lib/CMakeFiles/zipstatic.dir/zip_extra_field_api.c.o
                      [  6%] Building C object lib/CMakeFiles/zipstatic.dir/zip_fclose.c.o
                      [  6%] Building C object lib/CMakeFiles/zipstatic.dir/zip_fdopen.c.o
                      [  6%] Building C object lib/CMakeFiles/zipstatic.dir/zip_file_add.c.o
                      [  6%] Building C object lib/CMakeFiles/zipstatic.dir/zip_file_error_clear.c.o
                      [  6%] Building C object lib/CMakeFiles/zipstatic.dir/zip_file_error_get.c.o
                      [  7%] Building C object lib/CMakeFiles/zipstatic.dir/zip_file_get_comment.c.o
                      [  7%] Building C object lib/CMakeFiles/zipstatic.dir/zip_file_get_external_attributes.c.o
                      [  7%] Building C object lib/CMakeFiles/zipstatic.dir/zip_file_get_offset.c.o
                      [  7%] Building C object lib/CMakeFiles/zipstatic.dir/zip_file_rename.c.o
                      [  7%] Building C object lib/CMakeFiles/zipstatic.dir/zip_file_replace.c.o
                      [  9%] Building C object lib/CMakeFiles/zipstatic.dir/zip_file_set_comment.c.o
                      [  9%] Building C object lib/CMakeFiles/zipstatic.dir/zip_file_set_encryption.c.o
                      [  9%] Building C object lib/CMakeFiles/zipstatic.dir/zip_file_set_external_attributes.c.o
                      [  9%] Building C object lib/CMakeFiles/zipstatic.dir/zip_file_set_mtime.c.o
                      [  9%] Building C object lib/CMakeFiles/zipstatic.dir/zip_file_strerror.c.o
                      [  9%] Building C object lib/CMakeFiles/zipstatic.dir/zip_filerange_crc.c.o
                      [ 10%] Building C object lib/CMakeFiles/zipstatic.dir/zip_fopen.c.o
                      [ 10%] Building C object lib/CMakeFiles/zipstatic.dir/zip_fopen_encrypted.c.o
                      [ 10%] Building C object lib/CMakeFiles/zipstatic.dir/zip_fopen_index.c.o
                      [ 10%] Building C object lib/CMakeFiles/zipstatic.dir/zip_fopen_index_encrypted.c.o
                      [ 10%] Building C object lib/CMakeFiles/zipstatic.dir/zip_fread.c.o
                      [ 12%] Building C object lib/CMakeFiles/zipstatic.dir/zip_fseek.c.o
                      [ 12%] Building C object lib/CMakeFiles/zipstatic.dir/zip_ftell.c.o
                      [ 12%] Building C object lib/CMakeFiles/zipstatic.dir/zip_get_archive_comment.c.o
                      [ 12%] Building C object lib/CMakeFiles/zipstatic.dir/zip_get_archive_flag.c.o
                      [ 12%] Building C object lib/CMakeFiles/zipstatic.dir/zip_get_encryption_implementation.c.o
                      [ 12%] Building C object lib/CMakeFiles/zipstatic.dir/zip_get_file_comment.c.o
                      [ 13%] Building C object lib/CMakeFiles/zipstatic.dir/zip_get_name.c.o
                      [ 13%] Building C object lib/CMakeFiles/zipstatic.dir/zip_get_num_entries.c.o
                      [ 13%] Building C object lib/CMakeFiles/zipstatic.dir/zip_get_num_files.c.o
                      [ 13%] Building C object lib/CMakeFiles/zipstatic.dir/zip_hash.c.o
                      [ 13%] Building C object lib/CMakeFiles/zipstatic.dir/zip_io_util.c.o
                      [ 15%] Building C object lib/CMakeFiles/zipstatic.dir/zip_libzip_version.c.o
                      [ 15%] Building C object lib/CMakeFiles/zipstatic.dir/zip_memdup.c.o
                      [ 15%] Building C object lib/CMakeFiles/zipstatic.dir/zip_name_locate.c.o
                      [ 15%] Building C object lib/CMakeFiles/zipstatic.dir/zip_new.c.o
                      [ 15%] Building C object lib/CMakeFiles/zipstatic.dir/zip_open.c.o
                      [ 15%] Building C object lib/CMakeFiles/zipstatic.dir/zip_progress.c.o
                      [ 16%] Building C object lib/CMakeFiles/zipstatic.dir/zip_rename.c.o
                      [ 16%] Building C object lib/CMakeFiles/zipstatic.dir/zip_replace.c.o
                      [ 16%] Building C object lib/CMakeFiles/zipstatic.dir/zip_set_archive_comment.c.o
                      [ 16%] Building C object lib/CMakeFiles/zipstatic.dir/zip_set_archive_flag.c.o
                      [ 16%] Building C object lib/CMakeFiles/zipstatic.dir/zip_set_default_password.c.o
                      [ 18%] Building C object lib/CMakeFiles/zipstatic.dir/zip_set_file_comment.c.o
                      [ 18%] Building C object lib/CMakeFiles/zipstatic.dir/zip_set_file_compression.c.o
                      [ 18%] Building C object lib/CMakeFiles/zipstatic.dir/zip_set_name.c.o
                      [ 18%] Building C object lib/CMakeFiles/zipstatic.dir/zip_source_begin_write.c.o
                      [ 18%] Building C object lib/CMakeFiles/zipstatic.dir/zip_source_begin_write_cloning.c.o
                      [ 18%] Building C object lib/CMakeFiles/zipstatic.dir/zip_source_buffer.c.o
                      [ 20%] Building C object lib/CMakeFiles/zipstatic.dir/zip_source_call.c.o
                      [ 20%] Building C object lib/CMakeFiles/zipstatic.dir/zip_source_close.c.o
                      [ 20%] Building C object lib/CMakeFiles/zipstatic.dir/zip_source_commit_write.c.o
                      [ 20%] Building C object lib/CMakeFiles/zipstatic.dir/zip_source_compress.c.o
                      [ 20%] Building C object lib/CMakeFiles/zipstatic.dir/zip_source_crc.c.o
                      [ 21%] Building C object lib/CMakeFiles/zipstatic.dir/zip_source_error.c.o
                      [ 21%] Building C object lib/CMakeFiles/zipstatic.dir/zip_source_filep.c.o
                      [ 21%] Building C object lib/CMakeFiles/zipstatic.dir/zip_source_free.c.o
                      [ 21%] Building C object lib/CMakeFiles/zipstatic.dir/zip_source_function.c.o
                      [ 21%] Building C object lib/CMakeFiles/zipstatic.dir/zip_source_get_compression_flags.c.o
                      [ 23%] Building C object lib/CMakeFiles/zipstatic.dir/zip_source_is_deleted.c.o
                      [ 23%] Building C object lib/CMakeFiles/zipstatic.dir/zip_source_layered.c.o
                      [ 23%] Building C object lib/CMakeFiles/zipstatic.dir/zip_source_open.c.o
                      [ 23%] Building C object lib/CMakeFiles/zipstatic.dir/zip_source_pkware.c.o
                      [ 23%] Building C object lib/CMakeFiles/zipstatic.dir/zip_source_read.c.o
                      [ 23%] Building C object lib/CMakeFiles/zipstatic.dir/zip_source_remove.c.o
                      [ 24%] Building C object lib/CMakeFiles/zipstatic.dir/zip_source_rollback_write.c.o
                      [ 24%] Building C object lib/CMakeFiles/zipstatic.dir/zip_source_seek.c.o
                      [ 24%] Building C object lib/CMakeFiles/zipstatic.dir/zip_source_seek_write.c.o
                      [ 24%] Building C object lib/CMakeFiles/zipstatic.dir/zip_source_stat.c.o
                      [ 24%] Building C object lib/CMakeFiles/zipstatic.dir/zip_source_supports.c.o
                      [ 26%] Building C object lib/CMakeFiles/zipstatic.dir/zip_source_tell.c.o
                      [ 26%] Building C object lib/CMakeFiles/zipstatic.dir/zip_source_tell_write.c.o
                      [ 26%] Building C object lib/CMakeFiles/zipstatic.dir/zip_source_window.c.o
                      [ 26%] Building C object lib/CMakeFiles/zipstatic.dir/zip_source_write.c.o
                      [ 26%] Building C object lib/CMakeFiles/zipstatic.dir/zip_source_zip.c.o
                      [ 26%] Building C object lib/CMakeFiles/zipstatic.dir/zip_source_zip_new.c.o
                      [ 27%] Building C object lib/CMakeFiles/zipstatic.dir/zip_stat.c.o
                      [ 27%] Building C object lib/CMakeFiles/zipstatic.dir/zip_stat_index.c.o
                      [ 27%] Building C object lib/CMakeFiles/zipstatic.dir/zip_stat_init.c.o
                      [ 27%] Building C object lib/CMakeFiles/zipstatic.dir/zip_strerror.c.o
                      [ 27%] Building C object lib/CMakeFiles/zipstatic.dir/zip_string.c.o
                      [ 29%] Building C object lib/CMakeFiles/zipstatic.dir/zip_unchange.c.o
                      [ 29%] Building C object lib/CMakeFiles/zipstatic.dir/zip_unchange_all.c.o
                      [ 29%] Building C object lib/CMakeFiles/zipstatic.dir/zip_unchange_archive.c.o
                      [ 29%] Building C object lib/CMakeFiles/zipstatic.dir/zip_unchange_data.c.o
                      [ 29%] Building C object lib/CMakeFiles/zipstatic.dir/zip_utf-8.c.o
                      [ 29%] Building C object lib/CMakeFiles/zipstatic.dir/zip_algorithm_bzip2.c.o
                      [ 30%] Building C object lib/CMakeFiles/zipstatic.dir/zip_crypto_commoncrypto.c.o
                      [ 30%] Building C object lib/CMakeFiles/zipstatic.dir/zip_winzip_aes.c.o
                      [ 30%] Building C object lib/CMakeFiles/zipstatic.dir/zip_source_winzip_aes_decode.c.o
                      [ 30%] Building C object lib/CMakeFiles/zipstatic.dir/zip_source_winzip_aes_encode.c.o
                      [ 30%] Building C object lib/CMakeFiles/zipstatic.dir/zip_source_file.c.o
                      [ 32%] Linking C static library libzipstatic.a
                      [ 32%] Built target zipstatic
                      

                      And self tests passing well

                      $ make test
                      Running tests...
                      Test project /Users/alexandr/Projects/arboreus/arboreus_storage_mobile_libs/libzip/build
                              Start   1: add_dir.test
                        1/128 Test   #1: add_dir.test .....................................   Passed    0.07 sec
                              Start   2: add_from_buffer.test
                        2/128 Test   #2: add_from_buffer.test .............................   Passed    0.04 sec
                              Start   3: add_from_file.test
                        3/128 Test   #3: add_from_file.test ...............................   Passed    0.04 sec
                              Start   4: add_from_file_duplicate.test
                        4/128 Test   #4: add_from_file_duplicate.test .....................   Passed    0.04 sec
                              Start   5: add_from_file_twice_duplicate.test
                        5/128 Test   #5: add_from_file_twice_duplicate.test ...............   Passed    0.04 sec
                              Start   6: add_from_filep.test
                        6/128 Test   #6: add_from_filep.test ..............................   Passed    0.04 sec
                              Start   7: add_from_stdin.test
                        7/128 Test   #7: add_from_stdin.test ..............................   Passed    0.05 sec
                              Start   8: add_from_zip_closed.test
                        8/128 Test   #8: add_from_zip_closed.test .........................   Passed    0.04 sec
                              Start   9: add_from_zip_deflated.test
                        9/128 Test   #9: add_from_zip_deflated.test .......................   Passed    0.04 sec
                              Start  10: add_from_zip_deflated2.test
                       10/128 Test  #10: add_from_zip_deflated2.test ......................   Passed    0.05 sec
                              Start  11: add_from_zip_partial_deflated.test
                       11/128 Test  #11: add_from_zip_partial_deflated.test ...............   Passed    0.05 sec
                              Start  12: add_from_zip_partial_stored.test
                       12/128 Test  #12: add_from_zip_partial_stored.test .................   Passed    0.04 sec
                              Start  13: add_from_zip_stored.test
                       13/128 Test  #13: add_from_zip_stored.test .........................   Passed    0.05 sec
                              Start  14: add_stored.test
                       14/128 Test  #14: add_stored.test ..................................   Passed    0.04 sec
                              Start  15: add_stored_in_memory.test
                       15/128 Test  #15: add_stored_in_memory.test ........................   Passed    0.04 sec
                              Start  16: buffer-fragment-read.test
                       16/128 Test  #16: buffer-fragment-read.test ........................   Passed    0.04 sec
                              Start  17: buffer-fragment-write.test
                       17/128 Test  #17: buffer-fragment-write.test .......................   Passed    0.04 sec
                              Start  18: clone-buffer-add.test
                       18/128 Test  #18: clone-buffer-add.test ............................   Passed    0.04 sec
                              Start  19: clone-buffer-delete.test
                       19/128 Test  #19: clone-buffer-delete.test .........................   Passed    0.04 sec
                              Start  20: clone-buffer-replace.test
                       20/128 Test  #20: clone-buffer-replace.test ........................   Passed    0.04 sec
                              Start  21: clone-fs-add.test
                       21/128 Test  #21: clone-fs-add.test ................................   Passed    0.04 sec
                              Start  22: clone-fs-delete.test
                       22/128 Test  #22: clone-fs-delete.test .............................   Passed    0.04 sec
                              Start  23: clone-fs-replace.test
                       23/128 Test  #23: clone-fs-replace.test ............................   Passed    0.04 sec
                              Start  24: cm-default.test
                       24/128 Test  #24: cm-default.test ..................................   Passed    0.05 sec
                              Start  25: count_entries.test
                       25/128 Test  #25: count_entries.test ...............................   Passed    1.17 sec
                              Start  26: decrypt-correct-password-aes128.test
                       26/128 Test  #26: decrypt-correct-password-aes128.test .............   Passed    0.04 sec
                              Start  27: decrypt-correct-password-aes192.test
                       27/128 Test  #27: decrypt-correct-password-aes192.test .............   Passed    0.04 sec
                              Start  28: decrypt-correct-password-aes256.test
                       28/128 Test  #28: decrypt-correct-password-aes256.test .............   Passed    0.04 sec
                              Start  29: decrypt-correct-password-pkware.test
                       29/128 Test  #29: decrypt-correct-password-pkware.test .............   Passed    0.04 sec
                              Start  30: decrypt-no-password-aes256.test
                       30/128 Test  #30: decrypt-no-password-aes256.test ..................   Passed    0.04 sec
                              Start  31: decrypt-wrong-password-aes128.test
                       31/128 Test  #31: decrypt-wrong-password-aes128.test ...............   Passed    0.04 sec
                              Start  32: decrypt-wrong-password-aes192.test
                       32/128 Test  #32: decrypt-wrong-password-aes192.test ...............   Passed    0.04 sec
                              Start  33: decrypt-wrong-password-aes256.test
                       33/128 Test  #33: decrypt-wrong-password-aes256.test ...............   Passed    0.04 sec
                              Start  34: decrypt-wrong-password-pkware.test
                       34/128 Test  #34: decrypt-wrong-password-pkware.test ...............   Passed    0.04 sec
                              Start  35: delete_add_same.test
                       35/128 Test  #35: delete_add_same.test .............................   Passed    0.04 sec
                              Start  36: delete_invalid.test
                       36/128 Test  #36: delete_invalid.test ..............................   Passed    0.04 sec
                              Start  37: delete_last.test
                       37/128 Test  #37: delete_last.test .................................   Passed    0.04 sec
                              Start  38: delete_multiple_last.test
                       38/128 Test  #38: delete_multiple_last.test ........................   Passed    0.04 sec
                              Start  39: delete_multiple_partial.test
                       39/128 Test  #39: delete_multiple_partial.test .....................   Passed    0.04 sec
                              Start  40: delete_renamed_rename.test
                       40/128 Test  #40: delete_renamed_rename.test .......................   Passed    0.04 sec
                              Start  41: encrypt.test
                       41/128 Test  #41: encrypt.test .....................................   Passed    0.04 sec
                              Start  42: encryption-nonrandom-aes128.test
                       42/128 Test  #42: encryption-nonrandom-aes128.test .................***Skipped   0.04 sec
                              Start  43: encryption-nonrandom-aes192.test
                       43/128 Test  #43: encryption-nonrandom-aes192.test .................***Skipped   0.04 sec
                              Start  44: encryption-nonrandom-aes256.test
                       44/128 Test  #44: encryption-nonrandom-aes256.test .................***Skipped   0.04 sec
                              Start  45: encryption-remove.test
                       45/128 Test  #45: encryption-remove.test ...........................   Passed    0.04 sec
                              Start  46: extra_add.test
                       46/128 Test  #46: extra_add.test ...................................   Passed    0.04 sec
                              Start  47: extra_add_multiple.test
                       47/128 Test  #47: extra_add_multiple.test ..........................   Passed    0.04 sec
                              Start  48: extra_count.test
                       48/128 Test  #48: extra_count.test .................................   Passed    0.04 sec
                              Start  49: extra_count_by_id.test
                       49/128 Test  #49: extra_count_by_id.test ...........................   Passed    0.04 sec
                              Start  50: extra_count_ignore_zip64.test
                       50/128 Test  #50: extra_count_ignore_zip64.test ....................   Passed    0.04 sec
                              Start  51: extra_delete.test
                       51/128 Test  #51: extra_delete.test ................................   Passed    0.05 sec
                              Start  52: extra_delete_by_id.test
                       52/128 Test  #52: extra_delete_by_id.test ..........................   Passed    0.05 sec
                              Start  53: extra_field_align.test
                       53/128 Test  #53: extra_field_align.test ...........................   Passed    0.05 sec
                              Start  54: extra_get.test
                       54/128 Test  #54: extra_get.test ...................................   Passed    0.04 sec
                              Start  55: extra_get_by_id.test
                       55/128 Test  #55: extra_get_by_id.test .............................   Passed    0.04 sec
                              Start  56: extra_set.test
                       56/128 Test  #56: extra_set.test ...................................   Passed    0.04 sec
                              Start  57: extra_set_modify_c.test
                       57/128 Test  #57: extra_set_modify_c.test ..........................   Passed    0.04 sec
                              Start  58: extra_set_modify_l.test
                       58/128 Test  #58: extra_set_modify_l.test ..........................   Passed    0.04 sec
                              Start  59: fdopen_ok.test
                       59/128 Test  #59: fdopen_ok.test ...................................   Passed    0.04 sec
                              Start  60: file_comment_encmismatch.test
                       60/128 Test  #60: file_comment_encmismatch.test ....................   Passed    0.04 sec
                              Start  61: fopen_unchanged.test
                       61/128 Test  #61: fopen_unchanged.test .............................   Passed    0.04 sec
                              Start  62: fread.test
                       62/128 Test  #62: fread.test .......................................   Passed    0.05 sec
                              Start  63: fseek_deflated.test
                       63/128 Test  #63: fseek_deflated.test ..............................   Passed    0.04 sec
                              Start  64: fseek_fail.test
                       64/128 Test  #64: fseek_fail.test ..................................   Passed    0.04 sec
                              Start  65: fseek_ok.test
                       65/128 Test  #65: fseek_ok.test ....................................   Passed    0.04 sec
                              Start  66: get_comment.test
                       66/128 Test  #66: get_comment.test .................................   Passed    0.04 sec
                              Start  67: junk_at_end.test
                       67/128 Test  #67: junk_at_end.test .................................   Passed    0.04 sec
                              Start  68: junk_at_start.test
                       68/128 Test  #68: junk_at_start.test ...............................   Passed    0.04 sec
                              Start  69: name_locate.test
                       69/128 Test  #69: name_locate.test .................................   Passed    0.04 sec
                              Start  70: open_cons_extrabytes.test
                       70/128 Test  #70: open_cons_extrabytes.test ........................   Passed    0.04 sec
                              Start  71: open_empty.test
                       71/128 Test  #71: open_empty.test ..................................   Passed    0.04 sec
                              Start  72: open_empty_2.test
                       72/128 Test  #72: open_empty_2.test ................................   Passed    0.04 sec
                              Start  73: open_extrabytes.test
                       73/128 Test  #73: open_extrabytes.test .............................   Passed    0.04 sec
                              Start  74: open_file_count.test
                       74/128 Test  #74: open_file_count.test .............................   Passed    0.04 sec
                              Start  75: open_filename_duplicate.test
                       75/128 Test  #75: open_filename_duplicate.test .....................   Passed    0.04 sec
                              Start  76: open_filename_duplicate_consistency.test
                       76/128 Test  #76: open_filename_duplicate_consistency.test .........   Passed    0.04 sec
                              Start  77: open_filename_duplicate_empty.test
                       77/128 Test  #77: open_filename_duplicate_empty.test ...............   Passed    0.04 sec
                              Start  78: open_filename_duplicate_empty_consistency.test
                       78/128 Test  #78: open_filename_duplicate_empty_consistency.test ...   Passed    0.04 sec
                              Start  79: open_filename_empty.test
                       79/128 Test  #79: open_filename_empty.test .........................   Passed    0.04 sec
                              Start  80: open_incons.test
                       80/128 Test  #80: open_incons.test .................................   Passed    0.06 sec
                              Start  81: open_many_fail.test
                       81/128 Test  #81: open_many_fail.test ..............................   Passed    4.10 sec
                              Start  82: open_many_ok.test
                       82/128 Test  #82: open_many_ok.test ................................   Passed    5.57 sec
                              Start  83: open_multidisk.test
                       83/128 Test  #83: open_multidisk.test ..............................   Passed    0.04 sec
                              Start  84: open_new_but_exists.test
                       84/128 Test  #84: open_new_but_exists.test .........................   Passed    0.04 sec
                              Start  85: open_new_ok.test
                       85/128 Test  #85: open_new_ok.test .................................   Passed    0.04 sec
                              Start  86: open_nonarchive.test
                       86/128 Test  #86: open_nonarchive.test .............................   Passed    0.04 sec
                              Start  87: open_nosuchfile.test
                       87/128 Test  #87: open_nosuchfile.test .............................   Passed    0.04 sec
                              Start  88: open_ok.test
                       88/128 Test  #88: open_ok.test .....................................   Passed    0.04 sec
                              Start  89: open_too_short.test
                       89/128 Test  #89: open_too_short.test ..............................   Passed    0.04 sec
                              Start  90: open_truncate.test
                       90/128 Test  #90: open_truncate.test ...............................   Passed    0.04 sec
                              Start  91: open_zip64_3mf.test
                       91/128 Test  #91: open_zip64_3mf.test ..............................   Passed    0.05 sec
                              Start  92: open_zip64_ok.test
                       92/128 Test  #92: open_zip64_ok.test ...............................   Passed    0.05 sec
                              Start  93: preload.test
                       93/128 Test  #93: preload.test .....................................***Skipped   0.04 sec
                              Start  94: progress.test
                       94/128 Test  #94: progress.test ....................................   Passed    0.05 sec
                              Start  95: rename_ascii.test
                       95/128 Test  #95: rename_ascii.test ................................   Passed    0.05 sec
                              Start  96: rename_cp437.test
                       96/128 Test  #96: rename_cp437.test ................................   Passed    0.05 sec
                              Start  97: rename_deleted.test
                       97/128 Test  #97: rename_deleted.test ..............................   Passed    0.05 sec
                              Start  98: rename_fail.test
                       98/128 Test  #98: rename_fail.test .................................   Passed    0.05 sec
                              Start  99: rename_ok.test
                       99/128 Test  #99: rename_ok.test ...................................   Passed    0.05 sec
                              Start 100: rename_utf8.test
                      100/128 Test #100: rename_utf8.test .................................   Passed    0.04 sec
                              Start 101: rename_utf8_encmismatch.test
                      101/128 Test #101: rename_utf8_encmismatch.test .....................   Passed    0.04 sec
                              Start 102: set_comment_all.test
                      102/128 Test #102: set_comment_all.test .............................   Passed    0.05 sec
                              Start 103: set_comment_localonly.test
                      103/128 Test #103: set_comment_localonly.test .......................   Passed    0.05 sec
                              Start 104: set_comment_removeglobal.test
                      104/128 Test #104: set_comment_removeglobal.test ....................   Passed    0.05 sec
                              Start 105: set_comment_revert.test
                      105/128 Test #105: set_comment_revert.test ..........................   Passed    0.05 sec
                              Start 106: set_compression_bzip2_to_deflate.test
                      106/128 Test #106: set_compression_bzip2_to_deflate.test ............   Passed    0.05 sec
                              Start 107: set_compression_deflate_to_bzip2.test
                      107/128 Test #107: set_compression_deflate_to_bzip2.test ............   Passed    0.04 sec
                              Start 108: set_compression_deflate_to_deflate.test
                      108/128 Test #108: set_compression_deflate_to_deflate.test ..........   Passed    0.05 sec
                              Start 109: set_compression_deflate_to_store.test
                      109/128 Test #109: set_compression_deflate_to_store.test ............   Passed    0.05 sec
                              Start 110: set_compression_store_to_bzip2.test
                      110/128 Test #110: set_compression_store_to_bzip2.test ..............   Passed    0.05 sec
                              Start 111: set_compression_store_to_deflate.test
                      111/128 Test #111: set_compression_store_to_deflate.test ............   Passed    0.05 sec
                              Start 112: set_compression_store_to_store.test
                      112/128 Test #112: set_compression_store_to_store.test ..............   Passed    0.05 sec
                              Start 113: set_compression_unknown.test
                      113/128 Test #113: set_compression_unknown.test .....................   Passed    0.05 sec
                              Start 114: stat_index_cp437_guess.test
                      114/128 Test #114: stat_index_cp437_guess.test ......................   Passed    0.05 sec
                              Start 115: stat_index_cp437_raw.test
                      115/128 Test #115: stat_index_cp437_raw.test ........................   Passed    0.05 sec
                              Start 116: stat_index_cp437_strict.test
                      116/128 Test #116: stat_index_cp437_strict.test .....................   Passed    0.05 sec
                              Start 117: stat_index_fileorder.test
                      117/128 Test #117: stat_index_fileorder.test ........................   Passed    0.04 sec
                              Start 118: stat_index_streamed.test
                      118/128 Test #118: stat_index_streamed.test .........................   Passed    0.04 sec
                              Start 119: stat_index_streamed_zip64.test
                      119/128 Test #119: stat_index_streamed_zip64.test ...................   Passed    0.04 sec
                              Start 120: stat_index_utf8_guess.test
                      120/128 Test #120: stat_index_utf8_guess.test .......................   Passed    0.05 sec
                              Start 121: stat_index_utf8_raw.test
                      121/128 Test #121: stat_index_utf8_raw.test .........................   Passed    0.05 sec
                              Start 122: stat_index_utf8_strict.test
                      122/128 Test #122: stat_index_utf8_strict.test ......................   Passed    0.05 sec
                              Start 123: stat_index_utf8_unmarked_strict.test
                      123/128 Test #123: stat_index_utf8_unmarked_strict.test .............   Passed    0.05 sec
                              Start 124: stat_index_zip64.test
                      124/128 Test #124: stat_index_zip64.test ............................   Passed    0.90 sec
                              Start 125: utf-8-standardization.test
                      125/128 Test #125: utf-8-standardization.test .......................   Passed    0.04 sec
                              Start 126: zip-in-archive-comment.test
                      126/128 Test #126: zip-in-archive-comment.test ......................   Passed    0.05 sec
                              Start 127: zip64_creation.test
                      127/128 Test #127: zip64_creation.test ..............................   Passed   15.32 sec
                              Start 128: zip64_stored_creation.test
                      128/128 Test #128: zip64_stored_creation.test .......................   Passed    9.76 sec
                      
                      100% tests passed, 0 tests failed out of 128
                      
                      Total Test time (real) =  42.26 sec
                      
                      The following tests did not run:
                      	 42 - encryption-nonrandom-aes128.test (Skipped)
                      	 43 - encryption-nonrandom-aes192.test (Skipped)
                      	 44 - encryption-nonrandom-aes256.test (Skipped)
                      	 93 - preload.test (Skipped)
                      
                      1 Reply Last reply
                      0
                      • VRoninV VRonin

                        Did you build libzip for your compiler & architecture? Looking at the CI log looks like this library as well relies on zlib in a way or another

                        B Offline
                        B Offline
                        bogong
                        wrote on last edited by
                        #11

                        @VRonin But when I am trying to add to QT - fail. I've been trying to add like shared *.dylib (do not see the library) and I've been trying to add like static (the problem with function from another lib - zlib, the error mentioned in Qt logs - mean that somehow in static library do not included zlib functions, but self test is passing well)

                        1 Reply Last reply
                        0
                        • VRoninV VRonin

                          Did you build libzip for your compiler & architecture? Looking at the CI log looks like this library as well relies on zlib in a way or another

                          B Offline
                          B Offline
                          bogong
                          wrote on last edited by bogong
                          #12

                          @VRonin In following CMake logs - every required library found

                          $ cmake ..
                          -- The C compiler identification is AppleClang 10.0.0.10001145
                          -- Check for working C compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc
                          -- Check for working C compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc -- works
                          -- Detecting C compiler ABI info
                          -- Detecting C compiler ABI info - done
                          -- Detecting C compile features
                          -- Detecting C compile features - done
                          -- Looking for include file CommonCrypto/CommonCrypto.h
                          -- Looking for include file CommonCrypto/CommonCrypto.h - found
                          -- Found NETTLE: /usr/local/lib/libnettle.dylib
                          -- Could NOT find GnuTLS (missing: GNUTLS_LIBRARY GNUTLS_INCLUDE_DIR)
                          -- Found OpenSSL: /usr/lib/libcrypto.dylib (found version "1.0.2o")
                          -- Looking for _chmod
                          -- Looking for _chmod - not found
                          -- Looking for _close
                          -- Looking for _close - not found
                          -- Looking for _dup
                          -- Looking for _dup - not found
                          -- Looking for _fdopen
                          -- Looking for _fdopen - not found
                          -- Looking for _fileno
                          -- Looking for _fileno - not found
                          -- Looking for _open
                          -- Looking for _open - not found
                          -- Looking for _setmode
                          -- Looking for _setmode - not found
                          -- Looking for _snprintf
                          -- Looking for _snprintf - not found
                          -- Looking for _strdup
                          -- Looking for _strdup - not found
                          -- Looking for _stricmp
                          -- Looking for _stricmp - not found
                          -- Looking for _strtoi64
                          -- Looking for _strtoi64 - not found
                          -- Looking for _strtoui64
                          -- Looking for _strtoui64 - not found
                          -- Looking for _umask
                          -- Looking for _umask - not found
                          -- Looking for _unlink
                          -- Looking for _unlink - not found
                          -- Looking for clonefile
                          -- Looking for clonefile - found
                          -- Looking for explicit_bzero
                          -- Looking for explicit_bzero - not found
                          -- Looking for explicit_memset
                          -- Looking for explicit_memset - not found
                          -- Looking for fileno
                          -- Looking for fileno - found
                          -- Looking for fseeko
                          -- Looking for fseeko - found
                          -- Looking for ftello
                          -- Looking for ftello - found
                          -- Looking for getprogname
                          -- Looking for getprogname - found
                          -- Looking for open
                          -- Looking for open - found
                          -- Looking for mkstemp
                          -- Looking for mkstemp - found
                          -- Looking for setmode
                          -- Looking for setmode - found
                          -- Looking for snprintf
                          -- Looking for snprintf - found
                          -- Looking for strcasecmp
                          -- Looking for strcasecmp - found
                          -- Looking for strdup
                          -- Looking for strdup - found
                          -- Looking for stricmp
                          -- Looking for stricmp - not found
                          -- Looking for strtoll
                          -- Looking for strtoll - found
                          -- Looking for strtoull
                          -- Looking for strtoull - found
                          -- Looking for 3 include files sys/types.h, ..., fts.h
                          -- Looking for 3 include files sys/types.h, ..., fts.h - found
                          -- Looking for include file stdbool.h
                          -- Looking for include file stdbool.h - found
                          -- Looking for include file strings.h
                          -- Looking for include file strings.h - found
                          -- Looking for include file unistd.h
                          -- Looking for include file unistd.h - found
                          -- Looking for include file inttypes.h
                          -- Looking for include file inttypes.h - found
                          -- Looking for include file stdint.h
                          -- Looking for include file stdint.h - found
                          -- Looking for include file sys/types.h
                          -- Looking for include file sys/types.h - found
                          -- Looking for sys/types.h
                          -- Looking for sys/types.h - found
                          -- Looking for stdint.h
                          -- Looking for stdint.h - found
                          -- Looking for stddef.h
                          -- Looking for stddef.h - found
                          -- Check size of __int8
                          -- Check size of __int8 - failed
                          -- Check size of int8_t
                          -- Check size of int8_t - done
                          -- Check size of uint8_t
                          -- Check size of uint8_t - done
                          -- Check size of __int16
                          -- Check size of __int16 - failed
                          -- Check size of int16_t
                          -- Check size of int16_t - done
                          -- Check size of uint16_t
                          -- Check size of uint16_t - done
                          -- Check size of __int32
                          -- Check size of __int32 - failed
                          -- Check size of int32_t
                          -- Check size of int32_t - done
                          -- Check size of uint32_t
                          -- Check size of uint32_t - done
                          -- Check size of __int64
                          -- Check size of __int64 - failed
                          -- Check size of int64_t
                          -- Check size of int64_t - done
                          -- Check size of uint64_t
                          -- Check size of uint64_t - done
                          -- Check size of short
                          -- Check size of short - done
                          -- Check size of int
                          -- Check size of int - done
                          -- Check size of long
                          -- Check size of long - done
                          -- Check size of long long
                          -- Check size of long long - done
                          -- Check size of off_t
                          -- Check size of off_t - done
                          -- Check size of size_t
                          -- Check size of size_t - done
                          -- Check size of ssize_t
                          -- Check size of ssize_t - done
                          -- Performing Test HAVE_FICLONERANGE
                          -- Performing Test HAVE_FICLONERANGE - Failed
                          -- Check if the system is big endian
                          -- Searching 16 bit integer
                          -- Check size of unsigned short
                          -- Check size of unsigned short - done
                          -- Using unsigned short
                          -- Check if the system is big endian - little endian
                          -- Found ZLIB: /usr/lib/libz.dylib (found version "1.2.11")
                          -- Found BZip2: /usr/lib/libbz2.dylib (found version "1.0.6")
                          -- Looking for BZ2_bzCompressInit
                          -- Looking for BZ2_bzCompressInit - found
                          -- Looking for getopt
                          -- Looking for getopt - found
                          -- Configuring done
                          CMake Warning (dev) at lib/CMakeLists.txt:232 (ADD_LIBRARY):
                            Policy CMP0063 is not set: Honor visibility properties for all target
                            types.  Run "cmake --help-policy CMP0063" for policy details.  Use the
                            cmake_policy command to set the policy and suppress this warning.
                          
                            Target "zipstatic" of type "STATIC_LIBRARY" has the following visibility
                            properties set for C:
                          
                              C_VISIBILITY_PRESET
                          
                            For compatibility CMake is not honoring them for this target.
                          This warning is for project developers.  Use -Wno-dev to suppress it.
                          
                          -- Generating done
                          -- Build files have been written to: /Users/alexandr/Projects/arboreus/arboreus_storage_mobile_libs/libzip/build
                          
                          1 Reply Last reply
                          0
                          • B Offline
                            B Offline
                            bogong
                            wrote on last edited by bogong
                            #13

                            Solution found for MacOS and iOS.
                            It's might be working well for another platforms. I haven't tested it yet.

                            Every library that is using by libzip should be added manually to the QT project and if it's not by default in the system you need to build it like static. If there zlib - then add it manually, if there SSL - then add it manually, etc

                            The step-by-step guidance for building libzip published by me on Github

                            There are couple of strange things that I found (I don't know the cause of it):

                            • In the directory where located library appeared couple of symlinks on the real shared library file when I am attaching it to QT project via symlinks it's not working, only direct original file attaching to project working well (it's mean important for attaching zlib from system folder). See the screenshot

                            0_1551431264962_Screen Shot 2019-03-01 at 12.04.58.png

                            • The libzip library only working when you attaching it to QT Project like statical library (*.a), all of attempts of using like shared/dynamic libraray (*.dylib) have got failed, even it's installed like the operational system part.

                            Code from that works for me *.pro file:

                            macx {
                            
                            LIBS += -lz.1
                            LIBS += -L$$PWD/libs/libzip/ -lzipstatic
                            
                            INCLUDEPATH += $$PWD/libs/libzip
                            DEPENDPATH += $$PWD/libs/libzip
                            
                            PRE_TARGETDEPS += $$PWD/libs/libzip/libzipstatic.a
                            
                            }
                            
                            ios {
                            
                            LIBS += -lz.1
                            LIBS += -L$$PWD/libs/libzip/ -lzipstatic
                            
                            INCLUDEPATH += $$PWD/libs/libzip
                            DEPENDPATH += $$PWD/libs/libzip
                            
                            PRE_TARGETDEPS += $$PWD/libs/libzip/libzipstatic.a
                            
                            }
                            

                            SUPER-MEGA-HUGE (SMH) thanks to Thomas Klausner (one of authors of libzip). He has been helping me to solve this trouble.

                            1 Reply Last reply
                            1

                            • Login

                            • Login or register to search.
                            • First post
                              Last post
                            0
                            • Categories
                            • Recent
                            • Tags
                            • Popular
                            • Users
                            • Groups
                            • Search
                            • Get Qt Extensions
                            • Unsolved