libarchive-ruby-gvalmon 0.0.1
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 +15 -0
- data/COPYING.txt +339 -0
- data/README.rdoc +147 -0
- data/ext/archive.cpp +1801 -0
- data/ext/entry.cpp +369 -0
- data/ext/extconf.rb +49 -0
- data/ext/main.cpp +68 -0
- data/ext/main.hpp +79 -0
- metadata +62 -0
data/ext/entry.cpp
ADDED
@@ -0,0 +1,369 @@
|
|
1
|
+
/****************************************************************************
|
2
|
+
This file is part of libarchive-ruby.
|
3
|
+
|
4
|
+
libarchive-ruby is a Ruby binding for the C library libarchive.
|
5
|
+
|
6
|
+
Copyright (C) 2011 Hans Mackowiak
|
7
|
+
|
8
|
+
libarchive-ruby is free software; you can redistribute it and/or modify
|
9
|
+
it under the terms of the GNU General Public License as published by
|
10
|
+
the Free Software Foundation; either version 2 of the License, or
|
11
|
+
(at your option) any later version.
|
12
|
+
|
13
|
+
libarchive-ruby is distributed in the hope that it will be useful,
|
14
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
15
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
16
|
+
GNU General Public License for more details.
|
17
|
+
|
18
|
+
You should have received a copy of the GNU General Public License along
|
19
|
+
with libarchive-ruby; if not, write to the Free Software Foundation, Inc.,
|
20
|
+
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
21
|
+
****************************************************************************/
|
22
|
+
|
23
|
+
#include "main.hpp"
|
24
|
+
|
25
|
+
#define _self wrap<archive_entry*>(self)
|
26
|
+
|
27
|
+
VALUE rb_cArchiveEntry;
|
28
|
+
|
29
|
+
|
30
|
+
|
31
|
+
void rb_define_attr_method(VALUE klass,const std::string &name, VALUE get(VALUE),VALUE set(VALUE,VALUE))
|
32
|
+
{
|
33
|
+
rb_define_method(klass,name.c_str(),RUBY_METHOD_FUNC(get),0);
|
34
|
+
rb_define_method(klass,(name + "=").c_str(),RUBY_METHOD_FUNC(set),1);
|
35
|
+
}
|
36
|
+
|
37
|
+
|
38
|
+
#define macro_attr(attr,get,set) \
|
39
|
+
VALUE _get_##attr(VALUE self) { return get(archive_entry_##attr(_self)); } \
|
40
|
+
VALUE _set_##attr(VALUE self,VALUE val) { archive_entry_set_##attr(_self,set(val));return val; }
|
41
|
+
|
42
|
+
#define is_type(type,flag) \
|
43
|
+
VALUE _is_##type(VALUE self) { return archive_entry_filetype(_self) == flag ? Qtrue : Qfalse; }
|
44
|
+
|
45
|
+
|
46
|
+
|
47
|
+
namespace ArchiveEntry {
|
48
|
+
|
49
|
+
VALUE _alloc(VALUE self)
|
50
|
+
{
|
51
|
+
return wrap(archive_entry_new());
|
52
|
+
}
|
53
|
+
|
54
|
+
VALUE _initialize_copy(VALUE self,VALUE source)
|
55
|
+
{
|
56
|
+
rarchive_entry *file;
|
57
|
+
Data_Get_Struct( self, rarchive_entry, file);
|
58
|
+
file->entry = archive_entry_clone(wrap<archive_entry*>(source));
|
59
|
+
return self;
|
60
|
+
}
|
61
|
+
|
62
|
+
|
63
|
+
macro_attr(dev,INT2NUM,NUM2INT)
|
64
|
+
macro_attr(devminor,INT2NUM,NUM2INT)
|
65
|
+
macro_attr(devmajor,INT2NUM,NUM2INT)
|
66
|
+
|
67
|
+
macro_attr(rdev,INT2NUM,NUM2INT)
|
68
|
+
macro_attr(rdevminor,INT2NUM,NUM2INT)
|
69
|
+
macro_attr(rdevmajor,INT2NUM,NUM2INT)
|
70
|
+
|
71
|
+
macro_attr(uid,INT2NUM,NUM2INT)
|
72
|
+
macro_attr(gid,INT2NUM,NUM2INT)
|
73
|
+
|
74
|
+
macro_attr(uname,wrap,wrap<const char*>)
|
75
|
+
macro_attr(gname,wrap,wrap<const char*>)
|
76
|
+
|
77
|
+
macro_attr(pathname,wrap,wrap<const char*>)
|
78
|
+
macro_attr(symlink,wrap,wrap<const char*>)
|
79
|
+
macro_attr(hardlink,wrap,wrap<const char*>)
|
80
|
+
//macro_attr(sourcepath,wrap,wrap<const char*>)
|
81
|
+
|
82
|
+
is_type(file,AE_IFREG)
|
83
|
+
is_type(symlink,AE_IFLNK)
|
84
|
+
is_type(directory,AE_IFDIR)
|
85
|
+
is_type(chardev,AE_IFCHR)
|
86
|
+
is_type(blockdev,AE_IFBLK)
|
87
|
+
is_type(pipe,AE_IFIFO)
|
88
|
+
is_type(socket,AE_IFSOCK)
|
89
|
+
|
90
|
+
|
91
|
+
|
92
|
+
|
93
|
+
VALUE _get_atime(VALUE self)
|
94
|
+
{
|
95
|
+
if(archive_entry_atime_is_set(_self))
|
96
|
+
return rb_time_new(archive_entry_atime(_self),archive_entry_atime_nsec(_self));
|
97
|
+
else
|
98
|
+
return Qnil;
|
99
|
+
}
|
100
|
+
|
101
|
+
VALUE _get_ctime(VALUE self)
|
102
|
+
{
|
103
|
+
if(archive_entry_ctime_is_set(_self))
|
104
|
+
return rb_time_new(archive_entry_ctime(_self),archive_entry_ctime_nsec(_self));
|
105
|
+
else
|
106
|
+
return Qnil;
|
107
|
+
}
|
108
|
+
|
109
|
+
VALUE _get_mtime(VALUE self)
|
110
|
+
{
|
111
|
+
if(archive_entry_mtime_is_set(_self))
|
112
|
+
return rb_time_new(archive_entry_mtime(_self),archive_entry_mtime_nsec(_self));
|
113
|
+
else
|
114
|
+
return Qnil;
|
115
|
+
}
|
116
|
+
|
117
|
+
VALUE _get_birthtime(VALUE self)
|
118
|
+
{
|
119
|
+
if(archive_entry_birthtime_is_set(_self))
|
120
|
+
return rb_time_new(archive_entry_birthtime(_self),archive_entry_birthtime_nsec(_self));
|
121
|
+
else
|
122
|
+
return Qnil;
|
123
|
+
}
|
124
|
+
|
125
|
+
VALUE _set_atime(VALUE self,VALUE value)
|
126
|
+
{
|
127
|
+
if(NIL_P(value))
|
128
|
+
archive_entry_unset_atime(_self);
|
129
|
+
else
|
130
|
+
archive_entry_set_atime(_self,NUM2INT(rb_funcall(value,rb_intern("to_i"),0)),NUM2INT(rb_funcall(value,rb_intern("usec"),0)));
|
131
|
+
return value;
|
132
|
+
}
|
133
|
+
|
134
|
+
VALUE _set_ctime(VALUE self,VALUE value)
|
135
|
+
{
|
136
|
+
if(NIL_P(value))
|
137
|
+
archive_entry_unset_ctime(_self);
|
138
|
+
else
|
139
|
+
archive_entry_set_ctime(_self,NUM2INT(rb_funcall(value,rb_intern("to_i"),0)),NUM2INT(rb_funcall(value,rb_intern("usec"),0)));
|
140
|
+
return value;
|
141
|
+
}
|
142
|
+
|
143
|
+
VALUE _set_mtime(VALUE self,VALUE value)
|
144
|
+
{
|
145
|
+
if(NIL_P(value))
|
146
|
+
archive_entry_unset_mtime(_self);
|
147
|
+
else
|
148
|
+
archive_entry_set_mtime(_self,NUM2INT(rb_funcall(value,rb_intern("to_i"),0)),NUM2INT(rb_funcall(value,rb_intern("usec"),0)));
|
149
|
+
return value;
|
150
|
+
}
|
151
|
+
|
152
|
+
VALUE _set_birthtime(VALUE self,VALUE value)
|
153
|
+
{
|
154
|
+
if(NIL_P(value))
|
155
|
+
archive_entry_unset_birthtime(_self);
|
156
|
+
else
|
157
|
+
archive_entry_set_birthtime(_self,NUM2INT(rb_funcall(value,rb_intern("to_i"),0)),NUM2INT(rb_funcall(value,rb_intern("usec"),0)));
|
158
|
+
return value;
|
159
|
+
}
|
160
|
+
|
161
|
+
|
162
|
+
/*
|
163
|
+
* call-seq:
|
164
|
+
* entry <=> other -> -1,0,1 or nil
|
165
|
+
*
|
166
|
+
* compares two entries
|
167
|
+
*/
|
168
|
+
VALUE _compare(VALUE self,VALUE other)
|
169
|
+
{
|
170
|
+
if(rb_obj_is_kind_of(other,rb_cArchiveEntry) != Qtrue)
|
171
|
+
return Qnil;
|
172
|
+
else {
|
173
|
+
return rb_funcall(_get_mtime(self),rb_intern("<=>"),1,_get_mtime(other));
|
174
|
+
}
|
175
|
+
}
|
176
|
+
|
177
|
+
|
178
|
+
/*
|
179
|
+
* call-seq:
|
180
|
+
* entry.inspect -> String
|
181
|
+
*
|
182
|
+
* returns readable string.
|
183
|
+
*/
|
184
|
+
VALUE _inspect(VALUE self){
|
185
|
+
VALUE array[3];
|
186
|
+
array[0]=rb_str_new2("#<%s:%s>");
|
187
|
+
array[1]=rb_class_of(self);
|
188
|
+
array[2]=_get_pathname(self);
|
189
|
+
return rb_f_sprintf(3,array);
|
190
|
+
}
|
191
|
+
|
192
|
+
}
|
193
|
+
|
194
|
+
//__LA_DECL __LA_MODE_T archive_entry_filetype(struct archive_entry *);
|
195
|
+
|
196
|
+
|
197
|
+
|
198
|
+
/*
|
199
|
+
* call-seq:
|
200
|
+
* entry.sourcepath -> String or nil
|
201
|
+
*
|
202
|
+
* returns the hardlink
|
203
|
+
*/
|
204
|
+
VALUE ArchiveEntry_sourcepath(VALUE self)
|
205
|
+
{
|
206
|
+
return wrap(archive_entry_sourcepath(_self));
|
207
|
+
}
|
208
|
+
|
209
|
+
/*
|
210
|
+
* call-seq:
|
211
|
+
* entry.strmode -> String or nil
|
212
|
+
*
|
213
|
+
* returns the mode as string
|
214
|
+
*/
|
215
|
+
VALUE ArchiveEntry_strmode(VALUE self)
|
216
|
+
{
|
217
|
+
return wrap(archive_entry_strmode(_self));
|
218
|
+
}
|
219
|
+
|
220
|
+
//ACL added later with acl gem
|
221
|
+
|
222
|
+
VALUE ArchiveEntry_access_acl(VALUE self){
|
223
|
+
if(rb_const_defined(rb_cObject,rb_intern("ACL"))){
|
224
|
+
VALUE rb_cAcl = rb_const_get(rb_cObject,rb_intern("ACL"));
|
225
|
+
VALUE rb_cAclEntry = rb_const_get(rb_cObject,rb_intern("Entry"));
|
226
|
+
VALUE result = rb_class_new_instance(0,NULL,rb_cAcl);
|
227
|
+
archive_entry_acl_reset(_self,ARCHIVE_ENTRY_ACL_TYPE_ACCESS);
|
228
|
+
int type,permset,tag,qual;
|
229
|
+
const char* name;
|
230
|
+
while(archive_entry_acl_next(_self, ARCHIVE_ENTRY_ACL_TYPE_ACCESS,&type, &permset, &tag,&qual, &name) == 0){
|
231
|
+
VALUE entry;
|
232
|
+
VALUE temp[3];
|
233
|
+
switch(tag){
|
234
|
+
case ARCHIVE_ENTRY_ACL_USER:
|
235
|
+
case ARCHIVE_ENTRY_ACL_USER_OBJ:
|
236
|
+
temp[0] = ID2SYM(rb_intern("user"));
|
237
|
+
break;
|
238
|
+
case ARCHIVE_ENTRY_ACL_GROUP:
|
239
|
+
case ARCHIVE_ENTRY_ACL_GROUP_OBJ:
|
240
|
+
temp[0] = ID2SYM(rb_intern("group"));
|
241
|
+
break;
|
242
|
+
case ARCHIVE_ENTRY_ACL_MASK:
|
243
|
+
temp[0] = ID2SYM(rb_intern("mask"));
|
244
|
+
break;
|
245
|
+
case ARCHIVE_ENTRY_ACL_OTHER:
|
246
|
+
temp[0] = ID2SYM(rb_intern("other"));
|
247
|
+
break;
|
248
|
+
}
|
249
|
+
temp[1] = INT2NUM(permset);
|
250
|
+
switch(tag){
|
251
|
+
case ARCHIVE_ENTRY_ACL_USER:
|
252
|
+
case ARCHIVE_ENTRY_ACL_GROUP:
|
253
|
+
temp[2] = INT2NUM(qual);
|
254
|
+
entry=rb_class_new_instance(3,temp,rb_cAclEntry);
|
255
|
+
break;
|
256
|
+
default:
|
257
|
+
entry=rb_class_new_instance(2,temp,rb_cAclEntry);
|
258
|
+
break;
|
259
|
+
}
|
260
|
+
rb_funcall(result,rb_intern("<<"),1,entry);
|
261
|
+
}
|
262
|
+
return result;
|
263
|
+
}else
|
264
|
+
rb_raise(rb_eNotImpError,"this function require the libacl-ruby gem!");
|
265
|
+
return Qnil;
|
266
|
+
}
|
267
|
+
|
268
|
+
VALUE ArchiveEntry_acl_add(VALUE self){
|
269
|
+
archive_entry_acl_add_entry(_self,ARCHIVE_ENTRY_ACL_TYPE_ACCESS, ARCHIVE_ENTRY_ACL_READ, ARCHIVE_ENTRY_ACL_GROUP,
|
270
|
+
101, "abc");
|
271
|
+
return self;
|
272
|
+
}
|
273
|
+
|
274
|
+
|
275
|
+
|
276
|
+
/* Document-attr: atime
|
277
|
+
*
|
278
|
+
* Encapsulate the writing and reading of the configuration
|
279
|
+
* file. ...
|
280
|
+
*/
|
281
|
+
/* Document-attr: ctime
|
282
|
+
*
|
283
|
+
* Encapsulate the writing and reading of the configuration
|
284
|
+
* file. ...
|
285
|
+
*/
|
286
|
+
/* Document-attr: mtime
|
287
|
+
*
|
288
|
+
* Encapsulate the writing and reading of the configuration
|
289
|
+
* file. ...
|
290
|
+
*/
|
291
|
+
|
292
|
+
void Init_archive_entry(VALUE rb_cArchive){
|
293
|
+
#if 0
|
294
|
+
rb_cArchive = rb_define_class("Archive",rb_cObject);
|
295
|
+
|
296
|
+
rb_define_attr(rb_cArchiveEntry,"path",1,1);
|
297
|
+
rb_define_attr(rb_cArchiveEntry,"symlink",1,1);
|
298
|
+
rb_define_attr(rb_cArchiveEntry,"hardlink",1,1);
|
299
|
+
|
300
|
+
rb_define_attr(rb_cArchiveEntry,"uid",1,1);
|
301
|
+
rb_define_attr(rb_cArchiveEntry,"uname",1,1);
|
302
|
+
rb_define_attr(rb_cArchiveEntry,"gid",1,1);
|
303
|
+
rb_define_attr(rb_cArchiveEntry,"gname",1,1);
|
304
|
+
|
305
|
+
rb_define_attr(rb_cArchiveEntry,"atime",1,1);
|
306
|
+
rb_define_attr(rb_cArchiveEntry,"ctime",1,1);
|
307
|
+
rb_define_attr(rb_cArchiveEntry,"mtime",1,1);
|
308
|
+
rb_define_attr(rb_cArchiveEntry,"birthtime",1,1);
|
309
|
+
|
310
|
+
rb_define_attr(rb_cArchiveEntry,"dev",1,1);
|
311
|
+
rb_define_attr(rb_cArchiveEntry,"devmajor",1,1);
|
312
|
+
rb_define_attr(rb_cArchiveEntry,"devminor",1,1);
|
313
|
+
|
314
|
+
rb_define_attr(rb_cArchiveEntry,"rdev",1,1);
|
315
|
+
rb_define_attr(rb_cArchiveEntry,"rdevmajor",1,1);
|
316
|
+
rb_define_attr(rb_cArchiveEntry,"rdevminor",1,1);
|
317
|
+
|
318
|
+
|
319
|
+
#endif
|
320
|
+
|
321
|
+
using namespace ArchiveEntry;
|
322
|
+
rb_cArchiveEntry = rb_define_class_under(rb_cArchive,"Entry",rb_cObject);
|
323
|
+
rb_define_alloc_func(rb_cArchiveEntry,_alloc);
|
324
|
+
rb_define_private_method(rb_cArchiveEntry,"initialize_copy",RUBY_METHOD_FUNC(_initialize_copy),1);
|
325
|
+
rb_define_method(rb_cArchiveEntry,"inspect",RUBY_METHOD_FUNC(_inspect),0);
|
326
|
+
|
327
|
+
rb_define_attr_method(rb_cArchiveEntry,"path",_get_pathname,_set_pathname);
|
328
|
+
rb_define_attr_method(rb_cArchiveEntry,"symlink",_get_symlink,_set_symlink);
|
329
|
+
rb_define_attr_method(rb_cArchiveEntry,"hardlink",_get_hardlink,_set_hardlink);
|
330
|
+
|
331
|
+
rb_define_method(rb_cArchiveEntry,"sourcepath",RUBY_METHOD_FUNC(ArchiveEntry_sourcepath),0);
|
332
|
+
|
333
|
+
rb_define_attr_method(rb_cArchiveEntry,"uid",_get_uid,_set_uid);
|
334
|
+
rb_define_attr_method(rb_cArchiveEntry,"gid",_get_gid,_set_gid);
|
335
|
+
rb_define_attr_method(rb_cArchiveEntry,"uname",_get_uname,_set_uname);
|
336
|
+
rb_define_attr_method(rb_cArchiveEntry,"gname",_get_gname,_set_gname);
|
337
|
+
|
338
|
+
rb_define_attr_method(rb_cArchiveEntry,"atime",_get_atime,_set_atime);
|
339
|
+
rb_define_attr_method(rb_cArchiveEntry,"ctime",_get_ctime,_set_ctime);
|
340
|
+
rb_define_attr_method(rb_cArchiveEntry,"mtime",_get_mtime,_set_mtime);
|
341
|
+
rb_define_attr_method(rb_cArchiveEntry,"birthtime",_get_birthtime,_set_birthtime);
|
342
|
+
|
343
|
+
rb_define_attr_method(rb_cArchiveEntry,"dev",_get_dev,_set_dev);
|
344
|
+
rb_define_attr_method(rb_cArchiveEntry,"dev_major",_get_devmajor,_set_devmajor);
|
345
|
+
rb_define_attr_method(rb_cArchiveEntry,"dev_minor",_get_devminor,_set_devminor);
|
346
|
+
|
347
|
+
rb_define_attr_method(rb_cArchiveEntry,"rdev",_get_rdev,_set_rdev);
|
348
|
+
rb_define_attr_method(rb_cArchiveEntry,"rdev_major",_get_rdevmajor,_set_rdevmajor);
|
349
|
+
rb_define_attr_method(rb_cArchiveEntry,"rdev_minor",_get_rdevminor,_set_rdevminor);
|
350
|
+
|
351
|
+
rb_define_method(rb_cArchiveEntry,"file?",RUBY_METHOD_FUNC(_is_file),0);
|
352
|
+
rb_define_method(rb_cArchiveEntry,"directory?",RUBY_METHOD_FUNC(_is_directory),0);
|
353
|
+
rb_define_method(rb_cArchiveEntry,"chardev?",RUBY_METHOD_FUNC(_is_chardev),0);
|
354
|
+
rb_define_method(rb_cArchiveEntry,"blockdev?",RUBY_METHOD_FUNC(_is_blockdev),0);
|
355
|
+
rb_define_method(rb_cArchiveEntry,"symlink?",RUBY_METHOD_FUNC(_is_symlink),0);
|
356
|
+
rb_define_method(rb_cArchiveEntry,"pipe?",RUBY_METHOD_FUNC(_is_pipe),0);
|
357
|
+
rb_define_method(rb_cArchiveEntry,"socket?",RUBY_METHOD_FUNC(_is_socket),0);
|
358
|
+
|
359
|
+
|
360
|
+
rb_include_module(rb_cArchiveEntry,rb_mComparable);
|
361
|
+
rb_define_method(rb_cArchiveEntry,"<=>",RUBY_METHOD_FUNC(_compare),1);
|
362
|
+
|
363
|
+
rb_define_alias(rb_cArchiveEntry,"to_s","path");
|
364
|
+
//*
|
365
|
+
rb_define_method(rb_cArchiveEntry,"access_acl",RUBY_METHOD_FUNC(ArchiveEntry_access_acl),0);
|
366
|
+
//*/
|
367
|
+
|
368
|
+
|
369
|
+
}
|
data/ext/extconf.rb
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
#Encoding: UTF-8
|
2
|
+
=begin
|
3
|
+
This file is part of libarchive-ruby.
|
4
|
+
|
5
|
+
libarchive-ruby is a Ruby binding for the C library libarchive.
|
6
|
+
|
7
|
+
Copyright © 2011 Hans Mackowiak
|
8
|
+
|
9
|
+
libarchive-ruby is free software; you can redistribute it and/or modify
|
10
|
+
it under the terms of the GNU General Public License as published by
|
11
|
+
the Free Software Foundation; either version 2 of the License, or
|
12
|
+
(at your option) any later version.
|
13
|
+
|
14
|
+
libarchive-ruby is distributed in the hope that it will be useful,
|
15
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
16
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
17
|
+
GNU General Public License for more details.
|
18
|
+
|
19
|
+
You should have received a copy of the GNU General Public License along
|
20
|
+
with libarchive-ruby; if not, write to the Free Software Foundation, Inc.,
|
21
|
+
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
22
|
+
=end
|
23
|
+
|
24
|
+
require 'mkmf'
|
25
|
+
|
26
|
+
|
27
|
+
dir_config("archive")
|
28
|
+
|
29
|
+
pkg_config("libarchive")
|
30
|
+
unless(find_library("archive","main") && find_header("archive.h"))
|
31
|
+
abort("libarchive dev files")
|
32
|
+
end
|
33
|
+
CONFIG["warnflags"] = RbConfig::CONFIG["warnflags"] = " -Wall"
|
34
|
+
|
35
|
+
unless have_func("rb_string_value_cstr","ruby.h")
|
36
|
+
abort("missing VALUE to char* convert!")
|
37
|
+
end
|
38
|
+
unless have_macro("RETURN_ENUMERATOR","ruby.h")
|
39
|
+
abort("missing the return Enumerator macro.")
|
40
|
+
end
|
41
|
+
have_func("rb_proc_arity","ruby.h")
|
42
|
+
have_func("archive_read_support_format_raw","archive.h")
|
43
|
+
|
44
|
+
$CFLAGS += "-x c++ -Wall"
|
45
|
+
|
46
|
+
|
47
|
+
create_header
|
48
|
+
|
49
|
+
create_makefile("archive")
|
data/ext/main.cpp
ADDED
@@ -0,0 +1,68 @@
|
|
1
|
+
/****************************************************************************
|
2
|
+
This file is part of libarchive-ruby.
|
3
|
+
|
4
|
+
libarchive-ruby is a Ruby binding for the C library libarchive.
|
5
|
+
|
6
|
+
Copyright (C) 2011,2012,2013 Hans Mackowiak
|
7
|
+
|
8
|
+
libarchive-ruby is free software; you can redistribute it and/or modify
|
9
|
+
it under the terms of the GNU General Public License as published by
|
10
|
+
the Free Software Foundation; either version 2 of the License, or
|
11
|
+
(at your option) any later version.
|
12
|
+
|
13
|
+
libarchive-ruby is distributed in the hope that it will be useful,
|
14
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
15
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
16
|
+
GNU General Public License for more details.
|
17
|
+
|
18
|
+
You should have received a copy of the GNU General Public License along
|
19
|
+
with libarchive-ruby; if not, write to the Free Software Foundation, Inc.,
|
20
|
+
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
21
|
+
****************************************************************************/
|
22
|
+
|
23
|
+
#include "main.hpp"
|
24
|
+
|
25
|
+
template <>
|
26
|
+
VALUE wrap< rarchive >(rarchive *file )
|
27
|
+
{
|
28
|
+
return Data_Wrap_Struct(rb_cArchive, NULL, free, file);
|
29
|
+
}
|
30
|
+
|
31
|
+
|
32
|
+
template <>
|
33
|
+
rarchive* wrap< rarchive* >(const VALUE &vfile)
|
34
|
+
{
|
35
|
+
if ( ! rb_obj_is_kind_of(vfile, rb_cArchive) )
|
36
|
+
return NULL;
|
37
|
+
rarchive *file;
|
38
|
+
Data_Get_Struct( vfile, rarchive, file);
|
39
|
+
return file;
|
40
|
+
}
|
41
|
+
template <>
|
42
|
+
VALUE wrap< archive_entry >(struct archive_entry *entry )
|
43
|
+
{
|
44
|
+
rarchive_entry *temp = new rarchive_entry;
|
45
|
+
//archive_entry other = archive_entry_clone(entry);
|
46
|
+
temp->entry = archive_entry_clone(entry);
|
47
|
+
return Data_Wrap_Struct(rb_cArchiveEntry, NULL, free, temp);
|
48
|
+
}
|
49
|
+
|
50
|
+
template <>
|
51
|
+
archive_entry* wrap< archive_entry* >(const VALUE &vfile)
|
52
|
+
{
|
53
|
+
if ( ! rb_obj_is_kind_of(vfile, rb_cArchiveEntry) )
|
54
|
+
return NULL;
|
55
|
+
rarchive_entry *file;
|
56
|
+
Data_Get_Struct( vfile, rarchive_entry, file);
|
57
|
+
return file->entry;
|
58
|
+
}
|
59
|
+
template <>
|
60
|
+
VALUE wrap< const char >(const char *str )
|
61
|
+
{
|
62
|
+
return str == NULL? Qnil : rb_str_new2(str);
|
63
|
+
}
|
64
|
+
template <>
|
65
|
+
const char* wrap< const char* >(const VALUE &vfile)
|
66
|
+
{
|
67
|
+
return NIL_P(vfile) ? NULL : StringValueCStr((volatile VALUE&)vfile);
|
68
|
+
}
|