seven_zip_ruby 1.2.5 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/ext/seven_zip_ruby/seven_zip_archive.cpp +25 -7
- data/lib/seven_zip_ruby.rb +18 -11
- data/lib/seven_zip_ruby/seven_zip_reader.rb +2 -2
- data/lib/seven_zip_ruby/version.rb +1 -1
- data/seven_zip_ruby.gemspec +1 -1
- metadata +7 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 5825d6fc6003666a0e46c7f7d04b02166df43dedfcce9c1321c585bdb572aa83
|
4
|
+
data.tar.gz: a1c55155547c4f190d5265adb38306d433b620c15b7dfd503e995577560b3708
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 143dfc6e36e05dc5697b90129f135beb67752425564fa761d973d4635b10c62ec2719ad2daab5076afc85301dd365c0c0e8ed5b35e9fa4934d3bc8672816ba14
|
7
|
+
data.tar.gz: 164fb272a9179e26ac2d0ee1f56c189047254ccd85e93ffc6bd1f4f6e56b399611f8dd3d655d6e816a35fd09615803354b54f4dbffee3bdd6bf58dc3f841727f
|
@@ -2,6 +2,7 @@
|
|
2
2
|
#include <array>
|
3
3
|
#include <vector>
|
4
4
|
#include <cassert>
|
5
|
+
#include <string>
|
5
6
|
|
6
7
|
#ifndef _WIN32
|
7
8
|
#include <dlfcn.h>
|
@@ -1536,7 +1537,7 @@ STDMETHODIMP InStream::Read(void *data, UInt32 size, UInt32 *processedSize)
|
|
1536
1537
|
bool ret = m_archive->runRubyAction([&](){
|
1537
1538
|
VALUE str = rb_funcall(m_stream, INTERN("read"), 1, ULONG2NUM(size));
|
1538
1539
|
if (!NIL_P(str) && data){
|
1539
|
-
|
1540
|
+
memcpy(data, RSTRING_PTR(str), RSTRING_LEN(str));
|
1540
1541
|
}
|
1541
1542
|
|
1542
1543
|
if (processedSize){
|
@@ -1766,13 +1767,33 @@ extern "C" void Init_seven_zip_archive(void)
|
|
1766
1767
|
using namespace SevenZip;
|
1767
1768
|
using namespace RubyCppUtil;
|
1768
1769
|
|
1770
|
+
VALUE mod = rb_define_module("SevenZipRuby");
|
1771
|
+
gSevenZipModule = mod;
|
1772
|
+
|
1773
|
+
VALUE external_lib_dir = rb_const_get(mod, INTERN("EXTERNAL_LIB_DIR"));
|
1774
|
+
std::string external_lib_dir_str(RSTRING_PTR(external_lib_dir), RSTRING_LEN(external_lib_dir));
|
1775
|
+
|
1769
1776
|
#ifdef _WIN32
|
1770
|
-
|
1777
|
+
const int len = MultiByteToWideChar(CP_UTF8, 0, external_lib_dir_str.c_str(), external_lib_dir_str.length(),
|
1778
|
+
NULL, 0);
|
1779
|
+
if (len == 0) {
|
1780
|
+
rb_warning("MultiByteToWideChar error.");
|
1781
|
+
return;
|
1782
|
+
}
|
1783
|
+
std::vector<wchar_t> external_lib_dir_vec(len);
|
1784
|
+
MultiByteToWideChar(CP_UTF8, 0, external_lib_dir_str.c_str(), external_lib_dir_str.length(),
|
1785
|
+
&external_lib_dir_vec[0], external_lib_dir_vec.size());
|
1786
|
+
const std::wstring external_lib_dir_wstr(&external_lib_dir_vec[0], len);
|
1787
|
+
|
1788
|
+
const std::wstring dll_path = external_lib_dir_wstr + L"/7z.dll";
|
1789
|
+
gSevenZipHandle = LoadLibraryW(dll_path.c_str());
|
1771
1790
|
if (!gSevenZipHandle){
|
1772
|
-
|
1791
|
+
const std::wstring dll_path2 = external_lib_dir_wstr + L"/7z64.dll";
|
1792
|
+
gSevenZipHandle = LoadLibraryW(dll_path2.c_str());
|
1773
1793
|
}
|
1774
1794
|
#else
|
1775
|
-
|
1795
|
+
std::string dll_path = external_lib_dir_str + "/7z.so";
|
1796
|
+
gSevenZipHandle = dlopen(dll_path.c_str(), RTLD_NOW);
|
1776
1797
|
#endif
|
1777
1798
|
if (!gSevenZipHandle){
|
1778
1799
|
rb_warning("7z library is not found.");
|
@@ -1790,9 +1811,6 @@ extern "C" void Init_seven_zip_archive(void)
|
|
1790
1811
|
}
|
1791
1812
|
|
1792
1813
|
|
1793
|
-
VALUE mod = rb_define_module("SevenZipRuby");
|
1794
|
-
gSevenZipModule = mod;
|
1795
|
-
|
1796
1814
|
VALUE cls;
|
1797
1815
|
|
1798
1816
|
// arg_count is needed by MSVC 2010...
|
data/lib/seven_zip_ruby.rb
CHANGED
@@ -2,19 +2,26 @@
|
|
2
2
|
|
3
3
|
require("seven_zip_ruby/version")
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
5
|
+
module SevenZipRuby
|
6
|
+
def self.find_external_lib_dir
|
7
|
+
external_lib = (RUBY_PLATFORM.downcase.match(/mswin|mingw/) ? "7z.dll" : "7z.so")
|
8
|
+
dir = $LOAD_PATH.find do |i|
|
9
|
+
path = File.expand_path(File.join(i, "seven_zip_ruby", external_lib))
|
10
|
+
next File.file?(path)
|
11
|
+
end
|
12
|
+
raise "Failed to find 7z.dll or 7z.so" unless dir
|
10
13
|
|
11
|
-
|
12
|
-
begin
|
13
|
-
version = RUBY_VERSION.match(/\d+\.\d+/)
|
14
|
-
require("seven_zip_ruby/#{version}/seven_zip_archive")
|
15
|
-
rescue LoadError
|
16
|
-
require("seven_zip_ruby/seven_zip_archive")
|
14
|
+
return File.join(dir, "seven_zip_ruby")
|
17
15
|
end
|
16
|
+
|
17
|
+
EXTERNAL_LIB_DIR = self.find_external_lib_dir.encode(Encoding::UTF_8)
|
18
|
+
end
|
19
|
+
|
20
|
+
begin
|
21
|
+
version = RUBY_VERSION.match(/\d+\.\d+/)
|
22
|
+
require("seven_zip_ruby/#{version}/seven_zip_archive")
|
23
|
+
rescue LoadError
|
24
|
+
require("seven_zip_ruby/seven_zip_archive")
|
18
25
|
end
|
19
26
|
raise "Failed to initialize SevenZipRuby" unless (defined?(SevenZipRuby::SevenZipReader))
|
20
27
|
|
@@ -477,7 +477,7 @@ module SevenZipRuby
|
|
477
477
|
path = arg_path.expand_path(base_dir)
|
478
478
|
path.mkpath
|
479
479
|
set_file_attribute(path.to_s, arg.attrib) if (arg.attrib)
|
480
|
-
path.utime(arg.atime || path.atime, arg.mtime || path.mtime)
|
480
|
+
path.utime(arg.atime || path.atime, arg.mtime || path.mtime) rescue nil
|
481
481
|
end
|
482
482
|
next ret
|
483
483
|
|
@@ -488,7 +488,7 @@ module SevenZipRuby
|
|
488
488
|
unless (arg[:info].anti?)
|
489
489
|
path = Pathname(arg[:info].path).expand_path(base_dir)
|
490
490
|
set_file_attribute(path.to_s, arg[:info].attrib) if (arg[:info].attrib)
|
491
|
-
path.utime(arg[:info].atime || path.atime, arg[:info].mtime || path.mtime)
|
491
|
+
path.utime(arg[:info].atime || path.atime, arg[:info].mtime || path.mtime) rescue nil
|
492
492
|
end
|
493
493
|
end
|
494
494
|
end
|
data/seven_zip_ruby.gemspec
CHANGED
@@ -20,7 +20,7 @@ Gem::Specification.new do |spec|
|
|
20
20
|
|
21
21
|
spec.required_ruby_version = '>= 2.0.0'
|
22
22
|
|
23
|
-
spec.add_development_dependency "bundler"
|
23
|
+
spec.add_development_dependency "bundler"
|
24
24
|
spec.add_development_dependency "rake"
|
25
25
|
spec.add_development_dependency "rspec"
|
26
26
|
if (RUBY_ENGINE == "rbx")
|
metadata
CHANGED
@@ -1,29 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: seven_zip_ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Masamitsu MURASE
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-08-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '0'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -812,8 +812,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
812
812
|
- !ruby/object:Gem::Version
|
813
813
|
version: '0'
|
814
814
|
requirements: []
|
815
|
-
|
816
|
-
rubygems_version: 2.6.8
|
815
|
+
rubygems_version: 3.1.2
|
817
816
|
signing_key:
|
818
817
|
specification_version: 4
|
819
818
|
summary: This is a ruby gem library to read and write 7zip files.
|