libarchive-ruby-swig 0.5.1 → 0.5.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/ext/libarchive-ruby-swig/extconf.rb +1 -1
- data/lib/libarchive_doc.rb +465 -0
- data/lib/libarchive_rs.rb +48 -4
- metadata +7 -6
@@ -21,7 +21,7 @@ if find_executable('g++')
|
|
21
21
|
end
|
22
22
|
|
23
23
|
if swig = find_executable('swig')
|
24
|
-
`#{swig} -c++ -ruby -features autodoc libarchive.i`
|
24
|
+
`#{swig} -c++ -ruby -features autodoc=0 libarchive.i`
|
25
25
|
$distcleanfiles << 'libarchive_wrap.cxx'
|
26
26
|
else
|
27
27
|
$stderr.write "You need SWIG to compile this extension.\n"
|
@@ -0,0 +1,465 @@
|
|
1
|
+
#
|
2
|
+
# This file is part of "libarchive-ruby-swig", a simple SWIG wrapper around
|
3
|
+
# libarchive.
|
4
|
+
#
|
5
|
+
# Copyright 2011, Tobias Koch <tobias.koch@gmail.com>
|
6
|
+
#
|
7
|
+
# libarchive-ruby-swig is licensed under a simplified BSD License. A copy of the
|
8
|
+
# license text can be found in the file LICENSE.txt distributed with the source.
|
9
|
+
#
|
10
|
+
|
11
|
+
#
|
12
|
+
module Archive
|
13
|
+
|
14
|
+
##
|
15
|
+
#
|
16
|
+
# Thrown on problems with opening or processing an archive.
|
17
|
+
#
|
18
|
+
class Error < StandardError
|
19
|
+
end
|
20
|
+
|
21
|
+
##
|
22
|
+
#
|
23
|
+
# This class is not meant to be used directly. It exists for the sole purpose
|
24
|
+
# of initializing the <code>Archive::ENTRY_*</code> constants in a
|
25
|
+
# platform-independent way.
|
26
|
+
#
|
27
|
+
class Stat
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
def self.new()
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
class Entry
|
36
|
+
|
37
|
+
##
|
38
|
+
#
|
39
|
+
# Is Entry a regular file?
|
40
|
+
#
|
41
|
+
def is_file
|
42
|
+
end
|
43
|
+
|
44
|
+
##
|
45
|
+
#
|
46
|
+
# Is Entry a directory?
|
47
|
+
#
|
48
|
+
def is_directory
|
49
|
+
end
|
50
|
+
|
51
|
+
##
|
52
|
+
#
|
53
|
+
# Is Entry a symbolic link?
|
54
|
+
#
|
55
|
+
def is_symbolic_link
|
56
|
+
end
|
57
|
+
|
58
|
+
##
|
59
|
+
#
|
60
|
+
# Is Entry a block device?
|
61
|
+
#
|
62
|
+
def is_block_special
|
63
|
+
end
|
64
|
+
|
65
|
+
##
|
66
|
+
#
|
67
|
+
# Is Entry a char device?
|
68
|
+
#
|
69
|
+
def is_character_special
|
70
|
+
end
|
71
|
+
|
72
|
+
##
|
73
|
+
#
|
74
|
+
# Is Entry a fifo?
|
75
|
+
#
|
76
|
+
def is_fifo
|
77
|
+
end
|
78
|
+
|
79
|
+
##
|
80
|
+
#
|
81
|
+
# Is Entry a socket?
|
82
|
+
#
|
83
|
+
def is_socket
|
84
|
+
end
|
85
|
+
|
86
|
+
##
|
87
|
+
#
|
88
|
+
# Use one of the <code>Archive::ENTRY_*</code> to specify the filetype of
|
89
|
+
# the Entry.
|
90
|
+
#
|
91
|
+
def filetype=(filetype)
|
92
|
+
end
|
93
|
+
|
94
|
+
##
|
95
|
+
#
|
96
|
+
# Device major number of device on which this Entry resided. This field
|
97
|
+
# will not be available in most cases and is, in any case,
|
98
|
+
# platform-specific.
|
99
|
+
#
|
100
|
+
def devmajor
|
101
|
+
return numeric_result
|
102
|
+
end
|
103
|
+
|
104
|
+
##
|
105
|
+
#
|
106
|
+
# Sets the device major number of the device on which this Entry resides. This
|
107
|
+
# field will not be availabla in most cases and is, in any case,
|
108
|
+
# platform-specific.
|
109
|
+
#
|
110
|
+
def devmajor=(devmajor)
|
111
|
+
end
|
112
|
+
|
113
|
+
##
|
114
|
+
#
|
115
|
+
# Device minor number of device on which this Entry resided. This field
|
116
|
+
# will not be available in most cases and is, in any case,
|
117
|
+
# platform-specific.
|
118
|
+
#
|
119
|
+
def devminor
|
120
|
+
return numeric_result
|
121
|
+
end
|
122
|
+
|
123
|
+
##
|
124
|
+
#
|
125
|
+
# Sets the device minor number of the device on which this Entry resides. This
|
126
|
+
# field will not be availabla in most cases and is, in any case,
|
127
|
+
# platform-specific.
|
128
|
+
#
|
129
|
+
def devminor=(devminor)
|
130
|
+
end
|
131
|
+
|
132
|
+
##
|
133
|
+
#
|
134
|
+
# Returns the atime of the saved Entry as a timestamp since epoch.
|
135
|
+
#
|
136
|
+
def atime
|
137
|
+
end
|
138
|
+
|
139
|
+
##
|
140
|
+
#
|
141
|
+
# Sets the atime of the saved Entry from a timestamp.
|
142
|
+
#
|
143
|
+
def atime(atime)
|
144
|
+
end
|
145
|
+
|
146
|
+
##
|
147
|
+
#
|
148
|
+
# Resets the Entry.
|
149
|
+
#
|
150
|
+
def clear
|
151
|
+
end
|
152
|
+
|
153
|
+
##
|
154
|
+
#
|
155
|
+
# Returns an exact clone of Entry.
|
156
|
+
#
|
157
|
+
Entry *clone();
|
158
|
+
|
159
|
+
##
|
160
|
+
#
|
161
|
+
# Device id of the device on which entry resided. This is usually unused
|
162
|
+
# and, in any case, platform-specific.
|
163
|
+
#
|
164
|
+
def dev
|
165
|
+
end
|
166
|
+
|
167
|
+
##
|
168
|
+
#
|
169
|
+
# Sets the device id of the device on which entry resided. This is usually
|
170
|
+
# unused and, in any case, platform-specific.
|
171
|
+
#
|
172
|
+
def dev=(dev)
|
173
|
+
end
|
174
|
+
|
175
|
+
##
|
176
|
+
#
|
177
|
+
# Group id of the Entry.
|
178
|
+
#
|
179
|
+
def gid
|
180
|
+
end
|
181
|
+
|
182
|
+
##
|
183
|
+
#
|
184
|
+
# Sets the group id of the Entry.
|
185
|
+
#
|
186
|
+
def gid=(gid)
|
187
|
+
end
|
188
|
+
|
189
|
+
##
|
190
|
+
#
|
191
|
+
# Group name of the Entry.
|
192
|
+
#
|
193
|
+
def gname
|
194
|
+
end
|
195
|
+
|
196
|
+
##
|
197
|
+
#
|
198
|
+
# Sets the group name of the Entry.
|
199
|
+
#
|
200
|
+
def gname=(gname)
|
201
|
+
end
|
202
|
+
|
203
|
+
##
|
204
|
+
#
|
205
|
+
# Path of file this entry was hardlinked to.
|
206
|
+
#
|
207
|
+
def hardlink
|
208
|
+
end
|
209
|
+
|
210
|
+
##
|
211
|
+
#
|
212
|
+
# Sets the path to the file this entry is hard-linked to.
|
213
|
+
#
|
214
|
+
def hardlink=
|
215
|
+
end
|
216
|
+
|
217
|
+
##
|
218
|
+
#
|
219
|
+
# Inode of Entry.
|
220
|
+
#
|
221
|
+
def ino
|
222
|
+
end
|
223
|
+
|
224
|
+
##
|
225
|
+
#
|
226
|
+
# Sets the inode of Entry.
|
227
|
+
#
|
228
|
+
def ino=(ino)
|
229
|
+
end
|
230
|
+
|
231
|
+
##
|
232
|
+
#
|
233
|
+
# Permission bits and filetype of entry
|
234
|
+
#
|
235
|
+
def mode
|
236
|
+
end
|
237
|
+
|
238
|
+
##
|
239
|
+
#
|
240
|
+
# Sets the permission bits (and/or filetype) of Entry.
|
241
|
+
#
|
242
|
+
def mode=(mode)
|
243
|
+
end
|
244
|
+
|
245
|
+
##
|
246
|
+
#
|
247
|
+
# Returns the mtime of the saved Entry as a timestamp since epoch.
|
248
|
+
#
|
249
|
+
def mtime
|
250
|
+
end
|
251
|
+
|
252
|
+
##
|
253
|
+
#
|
254
|
+
# Sets the mtime of the saved Entry from a timestamp.
|
255
|
+
#
|
256
|
+
def mtime=(mtime)
|
257
|
+
end
|
258
|
+
|
259
|
+
##
|
260
|
+
#
|
261
|
+
# Number of hard links to this Entry.
|
262
|
+
#
|
263
|
+
def nlink
|
264
|
+
end
|
265
|
+
|
266
|
+
##
|
267
|
+
#
|
268
|
+
# Sets the number of hard links to this Entry.
|
269
|
+
#
|
270
|
+
def nlink=(num_links)
|
271
|
+
end
|
272
|
+
|
273
|
+
##
|
274
|
+
#
|
275
|
+
# Returns the pathname of this Entry.
|
276
|
+
#
|
277
|
+
def pathname
|
278
|
+
end
|
279
|
+
|
280
|
+
##
|
281
|
+
#
|
282
|
+
# Sets the pathname of this Entry.
|
283
|
+
#
|
284
|
+
def pathname=(pathname)
|
285
|
+
end
|
286
|
+
|
287
|
+
##
|
288
|
+
#
|
289
|
+
# The dev major number of the device this Entry represents.
|
290
|
+
#
|
291
|
+
def rdevmajor
|
292
|
+
end
|
293
|
+
|
294
|
+
##
|
295
|
+
#
|
296
|
+
# Sets the dev major number of the device this Entry represents.
|
297
|
+
#
|
298
|
+
def rdevmajor=(devmajor)
|
299
|
+
end
|
300
|
+
|
301
|
+
##
|
302
|
+
#
|
303
|
+
# The dev minor number of the device this Entry represents.
|
304
|
+
#
|
305
|
+
def rdevminor
|
306
|
+
end
|
307
|
+
|
308
|
+
##
|
309
|
+
#
|
310
|
+
# Sets the dev minor number of the device this Entry represents.
|
311
|
+
#
|
312
|
+
def rdevminor=(devminor)
|
313
|
+
end
|
314
|
+
|
315
|
+
##
|
316
|
+
#
|
317
|
+
# Size of the Entry. In case Entry is a symlink, returns the size of
|
318
|
+
# symlink's target name.
|
319
|
+
#
|
320
|
+
def size
|
321
|
+
end
|
322
|
+
|
323
|
+
##
|
324
|
+
#
|
325
|
+
# Sets the size of the Entry. In case Entry is a symlink, this should
|
326
|
+
# be the length of the string set with <code>symlink=</code>.
|
327
|
+
#
|
328
|
+
def size=()
|
329
|
+
end
|
330
|
+
|
331
|
+
##
|
332
|
+
#
|
333
|
+
# Returns the rarget of a symlink Entry.
|
334
|
+
#
|
335
|
+
def symlink
|
336
|
+
end
|
337
|
+
|
338
|
+
##
|
339
|
+
#
|
340
|
+
# Sets the target of a symlink Entry.
|
341
|
+
#
|
342
|
+
def symlink=(symlink)
|
343
|
+
end
|
344
|
+
|
345
|
+
##
|
346
|
+
#
|
347
|
+
# The user id of this Entry.
|
348
|
+
#
|
349
|
+
def uid
|
350
|
+
end
|
351
|
+
|
352
|
+
##
|
353
|
+
#
|
354
|
+
# Sets the user id of this Entry.
|
355
|
+
#
|
356
|
+
def uid=(uid)
|
357
|
+
end
|
358
|
+
|
359
|
+
##
|
360
|
+
#
|
361
|
+
# The owner name of this entry.
|
362
|
+
#
|
363
|
+
def uname
|
364
|
+
end
|
365
|
+
|
366
|
+
##
|
367
|
+
#
|
368
|
+
# Sets the owner name of this Entry.
|
369
|
+
#
|
370
|
+
def uname=(uname)
|
371
|
+
end
|
372
|
+
|
373
|
+
private
|
374
|
+
|
375
|
+
def self.new()
|
376
|
+
end
|
377
|
+
end
|
378
|
+
|
379
|
+
class Reader
|
380
|
+
|
381
|
+
##
|
382
|
+
#
|
383
|
+
# Use <code>Archive::read_open_filename</code> instead.
|
384
|
+
#
|
385
|
+
def self.read_open_filename(filename, cmd = nil)
|
386
|
+
end
|
387
|
+
|
388
|
+
##
|
389
|
+
#
|
390
|
+
# Use <code>Archive::read_open_memory</code> instead.
|
391
|
+
#
|
392
|
+
def self.read_open_memory(string, cmd = nil)
|
393
|
+
end
|
394
|
+
|
395
|
+
##
|
396
|
+
#
|
397
|
+
# Releases all resources associated with the Reader object.
|
398
|
+
#
|
399
|
+
def close()
|
400
|
+
end
|
401
|
+
|
402
|
+
##
|
403
|
+
#
|
404
|
+
# Returns the next Entry meta data object in the Archive.
|
405
|
+
#
|
406
|
+
def next_header()
|
407
|
+
end
|
408
|
+
|
409
|
+
private
|
410
|
+
|
411
|
+
def read_data_helper(len)
|
412
|
+
end
|
413
|
+
|
414
|
+
def self.new()
|
415
|
+
end
|
416
|
+
|
417
|
+
end
|
418
|
+
|
419
|
+
class Writer
|
420
|
+
|
421
|
+
##
|
422
|
+
#
|
423
|
+
# Use Archive::write_open_filename instead.
|
424
|
+
#
|
425
|
+
#
|
426
|
+
def self.write_open_filename(filename, compression, format)
|
427
|
+
end
|
428
|
+
|
429
|
+
##
|
430
|
+
#
|
431
|
+
# Releases all resources associated with the Writer object.
|
432
|
+
#
|
433
|
+
def close()
|
434
|
+
end
|
435
|
+
|
436
|
+
##
|
437
|
+
#
|
438
|
+
# Creates a new Entry. An Entry holds the meta data for an item stored in
|
439
|
+
# an Archive, such as filetype, mode, owner, etc. It is typically populated
|
440
|
+
# by a call to <code>copy_stat</code>. It is written before the actual data.
|
441
|
+
#
|
442
|
+
def new_entry()
|
443
|
+
end
|
444
|
+
|
445
|
+
##
|
446
|
+
#
|
447
|
+
# Write Entry meta data to Archive.
|
448
|
+
#
|
449
|
+
def write_header(entry)
|
450
|
+
end
|
451
|
+
|
452
|
+
private
|
453
|
+
|
454
|
+
def self.new()
|
455
|
+
end
|
456
|
+
|
457
|
+
def new_entry_helper()
|
458
|
+
end
|
459
|
+
|
460
|
+
def write_data_helper()
|
461
|
+
end
|
462
|
+
|
463
|
+
end
|
464
|
+
|
465
|
+
end
|
data/lib/libarchive_rs.rb
CHANGED
@@ -20,9 +20,6 @@ module Archive
|
|
20
20
|
ENTRY_BLOCK_SPECIAL = Stat.type_block_special
|
21
21
|
ENTRY_CHARACTER_SPECIAL = Stat.type_character_special
|
22
22
|
|
23
|
-
class Error < StandardError
|
24
|
-
end
|
25
|
-
|
26
23
|
class Entry
|
27
24
|
alias :file? :is_file
|
28
25
|
alias :directory? :is_directory
|
@@ -52,6 +49,11 @@ module Archive
|
|
52
49
|
alias :uid= :set_uid
|
53
50
|
alias :uname= :set_uname
|
54
51
|
|
52
|
+
##
|
53
|
+
#
|
54
|
+
# Populates an Entry by doing a stat on given path and copying all
|
55
|
+
# attributes.
|
56
|
+
#
|
55
57
|
def copy_stat(path)
|
56
58
|
copy_stat_helper(path)
|
57
59
|
self.set_symlink(File.readlink(path)) if self.symbolic_link?
|
@@ -61,7 +63,13 @@ module Archive
|
|
61
63
|
end
|
62
64
|
|
63
65
|
class Reader
|
64
|
-
|
66
|
+
|
67
|
+
##
|
68
|
+
#
|
69
|
+
# Reads size bytes from the Archive. If a block is given, chunks of size
|
70
|
+
# bytes are repeatedly passed to the block until the complete data stored
|
71
|
+
# for the Entry has been read.
|
72
|
+
#
|
65
73
|
def read_data(size)
|
66
74
|
if block_given?
|
67
75
|
while result = self.read_data_helper(size)
|
@@ -77,6 +85,12 @@ module Archive
|
|
77
85
|
|
78
86
|
class Writer
|
79
87
|
|
88
|
+
##
|
89
|
+
#
|
90
|
+
# Returns a new Entry instance. An Entry holds the meta data for an item
|
91
|
+
# stored in an Archive, such as filetype, mode, owner, etc. It is written
|
92
|
+
# before the actual data.
|
93
|
+
#
|
80
94
|
def new_entry()
|
81
95
|
entry = self.new_entry_helper
|
82
96
|
if block_given?
|
@@ -86,6 +100,11 @@ module Archive
|
|
86
100
|
end
|
87
101
|
end
|
88
102
|
|
103
|
+
##
|
104
|
+
#
|
105
|
+
# Write data to Archive. If a block is given, data returned from the block
|
106
|
+
# is stored until the block returns nil.
|
107
|
+
#
|
89
108
|
def write_data(data = nil)
|
90
109
|
if block_given?
|
91
110
|
while result = yield
|
@@ -99,6 +118,14 @@ module Archive
|
|
99
118
|
private_class_method :new
|
100
119
|
end
|
101
120
|
|
121
|
+
##
|
122
|
+
#
|
123
|
+
# Open filename for reading. Libarchive automatically determines archive
|
124
|
+
# format and compression scheme. Optionally, you can specify an auxiliary
|
125
|
+
# command to be used for decompression.
|
126
|
+
#
|
127
|
+
# Returns a Reader instance.
|
128
|
+
#
|
102
129
|
def self.read_open_filename(filename, cmd = nil)
|
103
130
|
unless cmd.nil?
|
104
131
|
cmd = locate_cmd(cmd)
|
@@ -114,6 +141,14 @@ module Archive
|
|
114
141
|
end
|
115
142
|
end
|
116
143
|
|
144
|
+
##
|
145
|
+
#
|
146
|
+
# Read archive from string. Libarchive automatically determines archive
|
147
|
+
# format and compression scheme. Optionally, you can specify an auxiliary
|
148
|
+
# command to be used for decompression.
|
149
|
+
#
|
150
|
+
# Returns a Reader instance.
|
151
|
+
#
|
117
152
|
def self.read_open_memory(string, cmd = nil)
|
118
153
|
unless cmd.nil?
|
119
154
|
cmd = locate_cmd(cmd)
|
@@ -129,6 +164,15 @@ module Archive
|
|
129
164
|
end
|
130
165
|
end
|
131
166
|
|
167
|
+
##
|
168
|
+
#
|
169
|
+
# Open filename for writing. Specify the compression format by passing one
|
170
|
+
# of the <code>Archive::COMPRESSION_*</code> constants or optionally specify
|
171
|
+
# an auxiliary program to use for compression. Use one of the
|
172
|
+
# <code>Archive::FORMAT_*</code> constants to specify the archive format.
|
173
|
+
#
|
174
|
+
# Returns a Writer instance.
|
175
|
+
#
|
132
176
|
def self.write_open_filename(filename, compression, format)
|
133
177
|
if compression.is_a? String
|
134
178
|
compresion = locate_cmd(compression)
|
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:
|
5
|
-
prerelease:
|
4
|
+
hash: 15
|
5
|
+
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 5
|
9
|
-
-
|
10
|
-
version: 0.5.
|
9
|
+
- 2
|
10
|
+
version: 0.5.2
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Tobias Koch
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-02-
|
18
|
+
date: 2011-02-12 00:00:00 +02:00
|
19
19
|
default_executable:
|
20
20
|
dependencies: []
|
21
21
|
|
@@ -29,6 +29,7 @@ extra_rdoc_files: []
|
|
29
29
|
|
30
30
|
files:
|
31
31
|
- lib/libarchive_rs.rb
|
32
|
+
- lib/libarchive_doc.rb
|
32
33
|
- ext/libarchive-ruby-swig/stat.cpp
|
33
34
|
- ext/libarchive-ruby-swig/stat.h
|
34
35
|
- ext/libarchive-ruby-swig/entry.cpp
|
@@ -70,7 +71,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
70
71
|
requirements: []
|
71
72
|
|
72
73
|
rubyforge_project: Libarchive/Ruby/SWIG
|
73
|
-
rubygems_version: 1.
|
74
|
+
rubygems_version: 1.5.2
|
74
75
|
signing_key:
|
75
76
|
specification_version: 3
|
76
77
|
summary: Ruby bindings to libarchive
|