libarchive-ruby-swig 0.3.1 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
@@ -19,7 +19,8 @@
|
|
19
19
|
Reader::Reader(struct archive *ar)
|
20
20
|
: _ar(ar),
|
21
21
|
_buf((char*) malloc(1024)),
|
22
|
-
_buf_size(1024)
|
22
|
+
_buf_size(1024),
|
23
|
+
_archive_content(0)
|
23
24
|
{}
|
24
25
|
|
25
26
|
|
@@ -38,10 +39,15 @@ void Reader::close()
|
|
38
39
|
archive_read_finish(_ar);
|
39
40
|
_ar = 0;
|
40
41
|
}
|
42
|
+
|
43
|
+
if(_archive_content) {
|
44
|
+
free(_archive_content);
|
45
|
+
_archive_content = 0;
|
46
|
+
}
|
41
47
|
}
|
42
48
|
|
43
49
|
|
44
|
-
Reader *Reader::read_open_filename(const char *
|
50
|
+
Reader *Reader::read_open_filename(const char *filename)
|
45
51
|
{
|
46
52
|
struct archive *ar = archive_read_new();
|
47
53
|
|
@@ -65,6 +71,35 @@ Reader *Reader::read_open_filename(const char * filename)
|
|
65
71
|
}
|
66
72
|
|
67
73
|
|
74
|
+
Reader *Reader::read_open_memory(const char *string, int length)
|
75
|
+
{
|
76
|
+
struct archive *ar = archive_read_new();
|
77
|
+
char *archive_content = (char*) malloc(length);
|
78
|
+
memcpy((void*) archive_content, (void*) string, length);
|
79
|
+
|
80
|
+
try {
|
81
|
+
if(archive_read_support_compression_all(ar) != ARCHIVE_OK)
|
82
|
+
throw 0;
|
83
|
+
|
84
|
+
if(archive_read_support_format_all(ar) != ARCHIVE_OK)
|
85
|
+
throw 0;
|
86
|
+
|
87
|
+
if(archive_read_open_memory(ar, (void*) archive_content, length) != ARCHIVE_OK)
|
88
|
+
throw 0;
|
89
|
+
|
90
|
+
} catch(...) {
|
91
|
+
std::string error_msg = archive_error_string(ar);
|
92
|
+
archive_read_finish(ar);
|
93
|
+
free(archive_content);
|
94
|
+
throw Error(error_msg);
|
95
|
+
}
|
96
|
+
|
97
|
+
Reader *reader_obj = new Reader(ar);
|
98
|
+
reader_obj->_archive_content = archive_content;
|
99
|
+
return reader_obj;
|
100
|
+
}
|
101
|
+
|
102
|
+
|
68
103
|
Entry *Reader::next_header()
|
69
104
|
{
|
70
105
|
Entry * result = 0;
|
@@ -40,10 +40,13 @@ class Reader
|
|
40
40
|
|
41
41
|
#ifdef SWIG
|
42
42
|
%newobject read_open_filename(const char *filename);
|
43
|
+
%newobject read_open_memory(const char *string, int length);
|
43
44
|
%newobject next_header();
|
44
45
|
#endif
|
45
46
|
|
46
47
|
static Reader *read_open_filename(const char *filename);
|
48
|
+
static Reader *read_open_memory(const char *string, int length);
|
49
|
+
|
47
50
|
Entry *next_header();
|
48
51
|
VALUE read_data_helper(int len);
|
49
52
|
|
@@ -54,6 +57,7 @@ class Reader
|
|
54
57
|
private:
|
55
58
|
struct archive *_ar;
|
56
59
|
char *_buf;
|
60
|
+
char *_archive_content;
|
57
61
|
int _buf_size;
|
58
62
|
};
|
59
63
|
|
data/lib/libarchive_rs.rb
CHANGED
@@ -102,6 +102,17 @@ module Archive
|
|
102
102
|
end
|
103
103
|
end
|
104
104
|
|
105
|
+
def self.read_open_memory(string)
|
106
|
+
ar = Reader.read_open_memory(string)
|
107
|
+
|
108
|
+
if block_given?
|
109
|
+
yield ar
|
110
|
+
ar.close()
|
111
|
+
else
|
112
|
+
return ar
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
105
116
|
def self.write_open_filename(filename, compression, format)
|
106
117
|
if compression.is_a? String
|
107
118
|
if compression.index('/').nil?
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: libarchive-ruby-swig
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 15
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 0.
|
8
|
+
- 4
|
9
|
+
- 0
|
10
|
+
version: 0.4.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Tobias Koch
|