ffi-libarchive 0.1.1 → 0.1.2
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.
- data/History.txt +4 -0
- data/bin/ffi-libarchive-ruby +0 -0
- data/lib/ffi-libarchive/archive.rb +3 -9
- data/lib/ffi-libarchive/entry.rb +2 -2
- data/lib/ffi-libarchive/reader.rb +4 -4
- data/lib/ffi-libarchive/stat.rb +7 -0
- data/lib/ffi-libarchive/writer.rb +12 -11
- data/version.txt +1 -1
- metadata +3 -7
- data/.bnsignore +0 -20
- data/test.tgz +0 -0
data/History.txt
CHANGED
data/bin/ffi-libarchive-ruby
CHANGED
File without changes
|
@@ -2,14 +2,6 @@ require 'ffi'
|
|
2
2
|
|
3
3
|
module Archive
|
4
4
|
|
5
|
-
module LibC
|
6
|
-
extend FFI::Library
|
7
|
-
ffi_lib FFI::Library::LIBC
|
8
|
-
|
9
|
-
attach_variable :errno, :int
|
10
|
-
attach_function :strerror, [:int], :string
|
11
|
-
end
|
12
|
-
|
13
5
|
module C
|
14
6
|
def self.attach_function_maybe *args
|
15
7
|
attach_function(*args)
|
@@ -43,7 +35,9 @@ module Archive
|
|
43
35
|
callback :archive_open_callback, [:pointer, :pointer], :int
|
44
36
|
callback :archive_write_callback, [:pointer, :pointer, :pointer, :size_t], :int
|
45
37
|
callback :archive_close_callback, [:pointer, :pointer], :int
|
46
|
-
|
38
|
+
# TODO: the following function is the real definition but uses multiple callbacks. This implies that it will not work with Rubinius (currently), but luckily we only need the write-callback actually.
|
39
|
+
#attach_function :archive_write_open, [:pointer, :pointer, :archive_open_callback, :archive_write_callback, :archive_close_callback], :int
|
40
|
+
attach_function :archive_write_open, [:pointer, :pointer, :pointer, :archive_write_callback, :pointer], :int
|
47
41
|
# TODO: catch errors if not defined
|
48
42
|
attach_function :archive_write_set_compression_none, [:pointer], :int
|
49
43
|
attach_function_maybe :archive_write_set_compression_gzip, [:pointer], :int
|
data/lib/ffi-libarchive/entry.rb
CHANGED
@@ -185,7 +185,7 @@ module Archive
|
|
185
185
|
end
|
186
186
|
|
187
187
|
stat = Archive::Stat::ffi_libarchive_create_lstat(filename)
|
188
|
-
raise Error, "Copy stat failed: #{
|
188
|
+
raise Error, "Copy stat failed: #{Archive::Stat::ffi_error}" if stat.null?
|
189
189
|
result = C::archive_entry_copy_stat(entry, stat)
|
190
190
|
ensure
|
191
191
|
Archive::Stat::ffi_libarchive_free_stat(stat)
|
@@ -210,7 +210,7 @@ module Archive
|
|
210
210
|
end
|
211
211
|
|
212
212
|
stat = Archive::Stat::ffi_libarchive_create_stat(filename)
|
213
|
-
raise Error, "Copy stat failed: #{
|
213
|
+
raise Error, "Copy stat failed: #{Archive::Stat::ffi_error}" if stat.null?
|
214
214
|
result = C::archive_entry_copy_stat(entry, stat)
|
215
215
|
ensure
|
216
216
|
Archive::Stat::ffi_libarchive_free_stat(stat)
|
@@ -46,9 +46,9 @@ module Archive
|
|
46
46
|
raise Error, @archive if C::archive_read_open_filename(archive, params[:file_name], 1024) != C::OK
|
47
47
|
elsif params[:memory]
|
48
48
|
str = params[:memory]
|
49
|
-
@data = FFI::MemoryPointer.new
|
50
|
-
@data.
|
51
|
-
raise Error, @archive if C::archive_read_open_memory(archive, @data,
|
49
|
+
@data = FFI::MemoryPointer.new(str.size + 1)
|
50
|
+
@data.write_string str, str.size
|
51
|
+
raise Error, @archive if C::archive_read_open_memory(archive, @data, str.size) != C::OK
|
52
52
|
end
|
53
53
|
rescue
|
54
54
|
close
|
@@ -101,7 +101,7 @@ module Archive
|
|
101
101
|
block = data.method :concat
|
102
102
|
end
|
103
103
|
|
104
|
-
buffer = FFI::
|
104
|
+
buffer = FFI::MemoryPointer.new(size)
|
105
105
|
len = 0
|
106
106
|
while (n = C::archive_read_data(archive, buffer, size)) > 0
|
107
107
|
case n
|
data/lib/ffi-libarchive/stat.rb
CHANGED
@@ -7,6 +7,8 @@ module Archive
|
|
7
7
|
builder.include 'stdlib.h'
|
8
8
|
builder.include 'sys/types.h'
|
9
9
|
builder.include 'sys/stat.h'
|
10
|
+
builder.include 'string.h'
|
11
|
+
builder.include 'errno.h'
|
10
12
|
builder.c %q{
|
11
13
|
void* ffi_libarchive_create_stat(const char* filename) {
|
12
14
|
struct stat* s = malloc(sizeof(struct stat));
|
@@ -26,6 +28,11 @@ module Archive
|
|
26
28
|
free((struct stat*)s);
|
27
29
|
}
|
28
30
|
}
|
31
|
+
builder.c %q{
|
32
|
+
const char* ffi_error() {
|
33
|
+
return strerror(errno);
|
34
|
+
}
|
35
|
+
}
|
29
36
|
end
|
30
37
|
end
|
31
38
|
end
|
@@ -58,9 +58,12 @@ module Archive
|
|
58
58
|
if params[:file_name]
|
59
59
|
raise Error, @archive if C::archive_write_open_filename(archive, params[:file_name]) != C::OK
|
60
60
|
elsif params[:memory]
|
61
|
+
if C::archive_write_get_bytes_in_last_block(@archive) == -1
|
62
|
+
C::archive_write_set_bytes_in_last_block(archive, 1)
|
63
|
+
end
|
61
64
|
@data = write_callback params[:memory]
|
62
65
|
raise Error, @archive if C::archive_write_open(archive, nil,
|
63
|
-
|
66
|
+
nil,
|
64
67
|
@data,
|
65
68
|
nil) != C::OK
|
66
69
|
end
|
@@ -69,14 +72,6 @@ module Archive
|
|
69
72
|
raise
|
70
73
|
end
|
71
74
|
|
72
|
-
def open_callback archive, client
|
73
|
-
if C::archive_write_get_bytes_in_last_block(archive) == -1
|
74
|
-
C::archive_write_set_bytes_in_last_block(archive, 1)
|
75
|
-
end
|
76
|
-
C::OK
|
77
|
-
end
|
78
|
-
private :open_callback
|
79
|
-
|
80
75
|
def write_callback data
|
81
76
|
Proc.new { |ar, client, buffer, length|
|
82
77
|
data.concat buffer.get_bytes(0,length)
|
@@ -104,8 +99,14 @@ module Archive
|
|
104
99
|
|
105
100
|
entry = Entry.new
|
106
101
|
data = yield entry
|
107
|
-
|
108
|
-
|
102
|
+
if data
|
103
|
+
entry.size = data.size
|
104
|
+
write_header entry
|
105
|
+
write_data data
|
106
|
+
else
|
107
|
+
write_header entry
|
108
|
+
end
|
109
|
+
nil
|
109
110
|
ensure
|
110
111
|
entry.close
|
111
112
|
end
|
data/version.txt
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.2
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: ffi-libarchive
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.1.
|
5
|
+
version: 0.1.2
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Frank Fischer
|
@@ -10,8 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-04-
|
14
|
-
default_executable:
|
13
|
+
date: 2011-04-12 00:00:00 Z
|
15
14
|
dependencies:
|
16
15
|
- !ruby/object:Gem::Dependency
|
17
16
|
name: ffi
|
@@ -45,7 +44,6 @@ extra_rdoc_files:
|
|
45
44
|
- History.txt
|
46
45
|
- bin/ffi-libarchive-ruby
|
47
46
|
files:
|
48
|
-
- .bnsignore
|
49
47
|
- History.txt
|
50
48
|
- README.md
|
51
49
|
- Rakefile
|
@@ -56,13 +54,11 @@ files:
|
|
56
54
|
- lib/ffi-libarchive/reader.rb
|
57
55
|
- lib/ffi-libarchive/stat.rb
|
58
56
|
- lib/ffi-libarchive/writer.rb
|
59
|
-
- test.tgz
|
60
57
|
- test/data/test.tar.gz
|
61
58
|
- test/sets/ts_read.rb
|
62
59
|
- test/sets/ts_write.rb
|
63
60
|
- test/test_ffi-libarchive.rb
|
64
61
|
- version.txt
|
65
|
-
has_rdoc: true
|
66
62
|
homepage: http://darcsden.com/lyro/ffi-libarchive
|
67
63
|
licenses: []
|
68
64
|
|
@@ -87,7 +83,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
87
83
|
requirements: []
|
88
84
|
|
89
85
|
rubyforge_project: ffi-libarchive
|
90
|
-
rubygems_version: 1.
|
86
|
+
rubygems_version: 1.7.2
|
91
87
|
signing_key:
|
92
88
|
specification_version: 3
|
93
89
|
summary: An ffi binding to libarchive.
|
data/.bnsignore
DELETED
@@ -1,20 +0,0 @@
|
|
1
|
-
# The list of files that should be ignored by Mr Bones.
|
2
|
-
# Lines that start with '#' are comments.
|
3
|
-
#
|
4
|
-
# A .gitignore file can be used instead by setting it as the ignore
|
5
|
-
# file in your Rakefile:
|
6
|
-
#
|
7
|
-
# Bones {
|
8
|
-
# ignore_file '.gitignore'
|
9
|
-
# }
|
10
|
-
#
|
11
|
-
# For a project with a C extension, the following would be a good set of
|
12
|
-
# exclude patterns (uncomment them if you want to use them):
|
13
|
-
# *.[oa]
|
14
|
-
# *~
|
15
|
-
_darcs
|
16
|
-
announcement.txt
|
17
|
-
coverage
|
18
|
-
doc
|
19
|
-
pkg
|
20
|
-
*.rbc
|
data/test.tgz
DELETED
Binary file
|