libarchive 0.1.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.
data/ext/configure.in ADDED
@@ -0,0 +1,11 @@
1
+ # -*- Autoconf -*-
2
+ # Process this file with autoconf to produce a configure script.
3
+
4
+ AC_PREREQ(2.61)
5
+ AC_INIT
6
+ AC_CONFIG_SRCDIR([archive_read_support_compression.c])
7
+ AC_CONFIG_HEADER([config.h])
8
+ AC_PROG_CC
9
+ AC_PROG_INSTALL
10
+ AC_SYS_LARGEFILE
11
+ AC_OUTPUT
data/ext/depend ADDED
@@ -0,0 +1,19 @@
1
+ archive_read_support_compression.o: archive_read_support_compression.c
2
+ archive_read_support_format.o: archive_read_support_format.c
3
+ archive_write_open_rb_str.o: archive_write_open_rb_str.c
4
+ archive_write_set_compression.o: archive_write_set_compression.c
5
+ libarchive.o: libarchive.c libarchive_internal.h \
6
+ archive_write_open_rb_str.h archive_read_support_compression.h \
7
+ archive_read_support_format.h archive_write_set_compression.h
8
+ libarchive_archive.o: libarchive_archive.c libarchive_internal.h \
9
+ archive_write_open_rb_str.h archive_read_support_compression.h \
10
+ archive_read_support_format.h archive_write_set_compression.h
11
+ libarchive_entry.o: libarchive_entry.c libarchive_internal.h \
12
+ archive_write_open_rb_str.h archive_read_support_compression.h \
13
+ archive_read_support_format.h archive_write_set_compression.h
14
+ libarchive_reader.o: libarchive_reader.c libarchive_internal.h \
15
+ archive_write_open_rb_str.h archive_read_support_compression.h \
16
+ archive_read_support_format.h archive_write_set_compression.h
17
+ libarchive_writer.o: libarchive_writer.c libarchive_internal.h \
18
+ archive_write_open_rb_str.h archive_read_support_compression.h \
19
+ archive_read_support_format.h archive_write_set_compression.h
data/ext/extconf.rb ADDED
@@ -0,0 +1,6 @@
1
+ require 'mkmf'
2
+
3
+ if system('/bin/sh configure') and have_header('config.h') and have_header('archive.h') and have_header('archive_entry.h')
4
+ $libs << " -larchive"
5
+ create_makefile('libarchive_ruby')
6
+ end
data/ext/install-sh ADDED
@@ -0,0 +1,250 @@
1
+ #! /bin/sh
2
+ #
3
+ # install - install a program, script, or datafile
4
+ # This comes from X11R5 (mit/util/scripts/install.sh).
5
+ #
6
+ # Copyright 1991 by the Massachusetts Institute of Technology
7
+ #
8
+ # Permission to use, copy, modify, distribute, and sell this software and its
9
+ # documentation for any purpose is hereby granted without fee, provided that
10
+ # the above copyright notice appear in all copies and that both that
11
+ # copyright notice and this permission notice appear in supporting
12
+ # documentation, and that the name of M.I.T. not be used in advertising or
13
+ # publicity pertaining to distribution of the software without specific,
14
+ # written prior permission. M.I.T. makes no representations about the
15
+ # suitability of this software for any purpose. It is provided "as is"
16
+ # without express or implied warranty.
17
+ #
18
+ # Calling this script install-sh is preferred over install.sh, to prevent
19
+ # `make' implicit rules from creating a file called install from it
20
+ # when there is no Makefile.
21
+ #
22
+ # This script is compatible with the BSD install script, but was written
23
+ # from scratch. It can only install one file at a time, a restriction
24
+ # shared with many OS's install programs.
25
+
26
+
27
+ # set DOITPROG to echo to test this script
28
+
29
+ # Don't use :- since 4.3BSD and earlier shells don't like it.
30
+ doit="${DOITPROG-}"
31
+
32
+
33
+ # put in absolute paths if you don't have them in your path; or use env. vars.
34
+
35
+ mvprog="${MVPROG-mv}"
36
+ cpprog="${CPPROG-cp}"
37
+ chmodprog="${CHMODPROG-chmod}"
38
+ chownprog="${CHOWNPROG-chown}"
39
+ chgrpprog="${CHGRPPROG-chgrp}"
40
+ stripprog="${STRIPPROG-strip}"
41
+ rmprog="${RMPROG-rm}"
42
+ mkdirprog="${MKDIRPROG-mkdir}"
43
+
44
+ transformbasename=""
45
+ transform_arg=""
46
+ instcmd="$mvprog"
47
+ chmodcmd="$chmodprog 0755"
48
+ chowncmd=""
49
+ chgrpcmd=""
50
+ stripcmd=""
51
+ rmcmd="$rmprog -f"
52
+ mvcmd="$mvprog"
53
+ src=""
54
+ dst=""
55
+ dir_arg=""
56
+
57
+ while [ x"$1" != x ]; do
58
+ case $1 in
59
+ -c) instcmd="$cpprog"
60
+ shift
61
+ continue;;
62
+
63
+ -d) dir_arg=true
64
+ shift
65
+ continue;;
66
+
67
+ -m) chmodcmd="$chmodprog $2"
68
+ shift
69
+ shift
70
+ continue;;
71
+
72
+ -o) chowncmd="$chownprog $2"
73
+ shift
74
+ shift
75
+ continue;;
76
+
77
+ -g) chgrpcmd="$chgrpprog $2"
78
+ shift
79
+ shift
80
+ continue;;
81
+
82
+ -s) stripcmd="$stripprog"
83
+ shift
84
+ continue;;
85
+
86
+ -t=*) transformarg=`echo $1 | sed 's/-t=//'`
87
+ shift
88
+ continue;;
89
+
90
+ -b=*) transformbasename=`echo $1 | sed 's/-b=//'`
91
+ shift
92
+ continue;;
93
+
94
+ *) if [ x"$src" = x ]
95
+ then
96
+ src=$1
97
+ else
98
+ # this colon is to work around a 386BSD /bin/sh bug
99
+ :
100
+ dst=$1
101
+ fi
102
+ shift
103
+ continue;;
104
+ esac
105
+ done
106
+
107
+ if [ x"$src" = x ]
108
+ then
109
+ echo "install: no input file specified"
110
+ exit 1
111
+ else
112
+ true
113
+ fi
114
+
115
+ if [ x"$dir_arg" != x ]; then
116
+ dst=$src
117
+ src=""
118
+
119
+ if [ -d $dst ]; then
120
+ instcmd=:
121
+ else
122
+ instcmd=mkdir
123
+ fi
124
+ else
125
+
126
+ # Waiting for this to be detected by the "$instcmd $src $dsttmp" command
127
+ # might cause directories to be created, which would be especially bad
128
+ # if $src (and thus $dsttmp) contains '*'.
129
+
130
+ if [ -f $src -o -d $src ]
131
+ then
132
+ true
133
+ else
134
+ echo "install: $src does not exist"
135
+ exit 1
136
+ fi
137
+
138
+ if [ x"$dst" = x ]
139
+ then
140
+ echo "install: no destination specified"
141
+ exit 1
142
+ else
143
+ true
144
+ fi
145
+
146
+ # If destination is a directory, append the input filename; if your system
147
+ # does not like double slashes in filenames, you may need to add some logic
148
+
149
+ if [ -d $dst ]
150
+ then
151
+ dst="$dst"/`basename $src`
152
+ else
153
+ true
154
+ fi
155
+ fi
156
+
157
+ ## this sed command emulates the dirname command
158
+ dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
159
+
160
+ # Make sure that the destination directory exists.
161
+ # this part is taken from Noah Friedman's mkinstalldirs script
162
+
163
+ # Skip lots of stat calls in the usual case.
164
+ if [ ! -d "$dstdir" ]; then
165
+ defaultIFS='
166
+ '
167
+ IFS="${IFS-${defaultIFS}}"
168
+
169
+ oIFS="${IFS}"
170
+ # Some sh's can't handle IFS=/ for some reason.
171
+ IFS='%'
172
+ set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
173
+ IFS="${oIFS}"
174
+
175
+ pathcomp=''
176
+
177
+ while [ $# -ne 0 ] ; do
178
+ pathcomp="${pathcomp}${1}"
179
+ shift
180
+
181
+ if [ ! -d "${pathcomp}" ] ;
182
+ then
183
+ $mkdirprog "${pathcomp}"
184
+ else
185
+ true
186
+ fi
187
+
188
+ pathcomp="${pathcomp}/"
189
+ done
190
+ fi
191
+
192
+ if [ x"$dir_arg" != x ]
193
+ then
194
+ $doit $instcmd $dst &&
195
+
196
+ if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi &&
197
+ if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi &&
198
+ if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi &&
199
+ if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi
200
+ else
201
+
202
+ # If we're going to rename the final executable, determine the name now.
203
+
204
+ if [ x"$transformarg" = x ]
205
+ then
206
+ dstfile=`basename $dst`
207
+ else
208
+ dstfile=`basename $dst $transformbasename |
209
+ sed $transformarg`$transformbasename
210
+ fi
211
+
212
+ # don't allow the sed command to completely eliminate the filename
213
+
214
+ if [ x"$dstfile" = x ]
215
+ then
216
+ dstfile=`basename $dst`
217
+ else
218
+ true
219
+ fi
220
+
221
+ # Make a temp file name in the proper directory.
222
+
223
+ dsttmp=$dstdir/#inst.$$#
224
+
225
+ # Move or copy the file name to the temp name
226
+
227
+ $doit $instcmd $src $dsttmp &&
228
+
229
+ trap "rm -f ${dsttmp}" 0 &&
230
+
231
+ # and set any options; do chmod last to preserve setuid bits
232
+
233
+ # If any of these fail, we abort the whole thing. If we want to
234
+ # ignore errors from any of these, just make sure not to ignore
235
+ # errors from the above "$doit $instcmd $src $dsttmp" command.
236
+
237
+ if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi &&
238
+ if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi &&
239
+ if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi &&
240
+ if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi &&
241
+
242
+ # Now rename the file to the real destination.
243
+
244
+ $doit $rmcmd -f $dstdir/$dstfile &&
245
+ $doit $mvcmd $dsttmp $dstdir/$dstfile
246
+
247
+ fi &&
248
+
249
+
250
+ exit 0
data/ext/libarchive.c ADDED
@@ -0,0 +1,89 @@
1
+ #include "libarchive_internal.h"
2
+
3
+ VALUE rb_mArchive;
4
+ VALUE rb_eArchiveError;
5
+
6
+ /* */
7
+ VALUE rb_libarchive_s_version_number(VALUE self) {
8
+ #if ARCHIVE_VERSION >= 2005000
9
+ return INT2NUM(archive_version_number());
10
+ #else
11
+ return INT2NUM(archive_version_stamp());
12
+ #endif
13
+ }
14
+
15
+ /* */
16
+ VALUE rb_libarchive_s_version_string(VALUE self) {
17
+ #if ARCHIVE_VERSION_NUMBER >= 2005000
18
+ return rb_str_new2(archive_version_string());
19
+ #else
20
+ return rb_str_new2(archive_version());
21
+ #endif
22
+ }
23
+
24
+ void DLLEXPORT Init_libarchive_ruby() {
25
+ rb_mArchive = rb_define_module("Archive");
26
+ rb_define_const(rb_mArchive, "VERSION", rb_str_new2(VERSION));
27
+
28
+ rb_define_const(rb_mArchive, "COMPRESSION_NONE", INT2NUM(ARCHIVE_COMPRESSION_NONE));
29
+ rb_define_const(rb_mArchive, "COMPRESSION_GZIP", INT2NUM(ARCHIVE_COMPRESSION_GZIP));
30
+ rb_define_const(rb_mArchive, "COMPRESSION_BZIP2", INT2NUM(ARCHIVE_COMPRESSION_BZIP2));
31
+ rb_define_const(rb_mArchive, "COMPRESSION_COMPRESS", INT2NUM(ARCHIVE_COMPRESSION_COMPRESS));
32
+ // XXX:
33
+ /*
34
+ rb_define_const(rb_mArchive, "COMPRESSION_PROGRAM", INT2NUM(ARCHIVE_COMPRESSION_PROGRAM));
35
+ rb_define_const(rb_mArchive, "COMPRESSION_LZMA", INT2NUM(ARCHIVE_COMPRESSION_LZMA));
36
+ */
37
+
38
+ rb_define_const(rb_mArchive, "FORMAT_BASE_MASK", INT2NUM(ARCHIVE_FORMAT_BASE_MASK));
39
+ rb_define_const(rb_mArchive, "FORMAT_CPIO", INT2NUM(ARCHIVE_FORMAT_CPIO));
40
+ rb_define_const(rb_mArchive, "FORMAT_CPIO_POSIX", INT2NUM(ARCHIVE_FORMAT_CPIO_POSIX));
41
+ rb_define_const(rb_mArchive, "FORMAT_CPIO_BIN_LE", INT2NUM(ARCHIVE_FORMAT_CPIO_BIN_LE));
42
+ rb_define_const(rb_mArchive, "FORMAT_CPIO_BIN_BE", INT2NUM(ARCHIVE_FORMAT_CPIO_BIN_BE));
43
+ rb_define_const(rb_mArchive, "FORMAT_CPIO_SVR4_NOCRC", INT2NUM(ARCHIVE_FORMAT_CPIO_SVR4_NOCRC));
44
+ rb_define_const(rb_mArchive, "FORMAT_CPIO_SVR4_CRC", INT2NUM(ARCHIVE_FORMAT_CPIO_SVR4_CRC));
45
+ rb_define_const(rb_mArchive, "FORMAT_SHAR", INT2NUM(ARCHIVE_FORMAT_SHAR));
46
+ rb_define_const(rb_mArchive, "FORMAT_SHAR_BASE", INT2NUM(ARCHIVE_FORMAT_SHAR_BASE));
47
+ rb_define_const(rb_mArchive, "FORMAT_SHAR_DUMP", INT2NUM(ARCHIVE_FORMAT_SHAR_DUMP));
48
+ rb_define_const(rb_mArchive, "FORMAT_TAR", INT2NUM(ARCHIVE_FORMAT_TAR));
49
+ rb_define_const(rb_mArchive, "FORMAT_TAR_USTAR", INT2NUM(ARCHIVE_FORMAT_TAR_USTAR));
50
+ rb_define_const(rb_mArchive, "FORMAT_TAR_PAX_INTERCHANGE", INT2NUM(ARCHIVE_FORMAT_TAR_PAX_INTERCHANGE));
51
+ rb_define_const(rb_mArchive, "FORMAT_TAR_PAX_RESTRICTED", INT2NUM(ARCHIVE_FORMAT_TAR_PAX_RESTRICTED));
52
+ rb_define_const(rb_mArchive, "FORMAT_TAR_GNUTAR", INT2NUM(ARCHIVE_FORMAT_TAR_GNUTAR));
53
+ rb_define_const(rb_mArchive, "FORMAT_ISO9660", INT2NUM(ARCHIVE_FORMAT_ISO9660));
54
+ rb_define_const(rb_mArchive, "FORMAT_ISO9660_ROCKRIDGE", INT2NUM(ARCHIVE_FORMAT_ISO9660_ROCKRIDGE));
55
+ rb_define_const(rb_mArchive, "FORMAT_ZIP", INT2NUM(ARCHIVE_FORMAT_ZIP));
56
+ rb_define_const(rb_mArchive, "FORMAT_EMPTY", INT2NUM(ARCHIVE_FORMAT_EMPTY));
57
+ rb_define_const(rb_mArchive, "FORMAT_AR", INT2NUM(ARCHIVE_FORMAT_AR));
58
+ rb_define_const(rb_mArchive, "FORMAT_AR_GNU", INT2NUM(ARCHIVE_FORMAT_AR_GNU));
59
+ rb_define_const(rb_mArchive, "FORMAT_AR_BSD", INT2NUM(ARCHIVE_FORMAT_AR_BSD));
60
+ #ifdef ARCHIVE_FORMAT_MTREE
61
+ rb_define_const(rb_mArchive, "FORMAT_MTREE", INT2NUM(ARCHIVE_FORMAT_MTREE));
62
+ #endif
63
+
64
+ rb_define_const(rb_mArchive, "EXTRACT_OWNER", INT2NUM(ARCHIVE_EXTRACT_OWNER));
65
+ rb_define_const(rb_mArchive, "EXTRACT_PERM", INT2NUM(ARCHIVE_EXTRACT_PERM));
66
+ rb_define_const(rb_mArchive, "EXTRACT_TIME", INT2NUM(ARCHIVE_EXTRACT_TIME));
67
+ rb_define_const(rb_mArchive, "EXTRACT_NO_OVERWRITE", INT2NUM(ARCHIVE_EXTRACT_NO_OVERWRITE));
68
+ rb_define_const(rb_mArchive, "EXTRACT_UNLINK", INT2NUM(ARCHIVE_EXTRACT_UNLINK));
69
+ rb_define_const(rb_mArchive, "EXTRACT_ACL", INT2NUM(ARCHIVE_EXTRACT_ACL));
70
+ rb_define_const(rb_mArchive, "EXTRACT_FFLAGS", INT2NUM(ARCHIVE_EXTRACT_FFLAGS));
71
+ rb_define_const(rb_mArchive, "EXTRACT_XATTR", INT2NUM(ARCHIVE_EXTRACT_XATTR));
72
+ rb_define_const(rb_mArchive, "EXTRACT_SECURE_SYMLINKS", INT2NUM(ARCHIVE_EXTRACT_SECURE_SYMLINKS));
73
+ rb_define_const(rb_mArchive, "EXTRACT_SECURE_NODOTDOT", INT2NUM(ARCHIVE_EXTRACT_SECURE_NODOTDOT));
74
+ rb_define_const(rb_mArchive, "EXTRACT_NO_AUTODIR", INT2NUM(ARCHIVE_EXTRACT_NO_AUTODIR));
75
+ rb_define_const(rb_mArchive, "EXTRACT_NO_OVERWRITE_NEWER", INT2NUM(ARCHIVE_EXTRACT_NO_OVERWRITE_NEWER));
76
+ #ifdef ARCHIVE_EXTRACT_SPARSE
77
+ rb_define_const(rb_mArchive, "EXTRACT_SPARSE", INT2NUM(ARCHIVE_EXTRACT_SPARSE));
78
+ #endif
79
+
80
+ rb_define_module_function(rb_mArchive, "version_number", rb_libarchive_s_version_number, 0);
81
+ rb_define_module_function(rb_mArchive, "version_string", rb_libarchive_s_version_string, 0);
82
+
83
+ rb_eArchiveError = rb_define_class_under(rb_mArchive, "Error", rb_eStandardError);
84
+
85
+ Init_libarchive_reader();
86
+ Init_libarchive_writer();
87
+ Init_libarchive_archive();
88
+ Init_libarchive_entry();
89
+ }
@@ -0,0 +1,84 @@
1
+ #include "libarchive_internal.h"
2
+
3
+ extern VALUE rb_cArchiveReader;
4
+ extern VALUE rb_cArchiveWriter;
5
+ extern VALUE rb_eArchiveError;
6
+
7
+ static void rb_libarchive_archive_free(struct rb_libarchive_archive_container *p) {
8
+ xfree(p);
9
+ }
10
+
11
+ static void rb_libarchive_archive_mark(struct rb_libarchive_archive_container *p) {
12
+ rb_gc_mark(p->memory);
13
+ }
14
+
15
+ VALUE rb_libarchive_archive_alloc(VALUE klass) {
16
+ struct rb_libarchive_archive_container *p = ALLOC(struct rb_libarchive_archive_container);
17
+ p->ar = NULL;
18
+ p->eof = 0;
19
+ p->memory = Qnil;
20
+ return Data_Wrap_Struct(klass, rb_libarchive_archive_mark, rb_libarchive_archive_free, p);
21
+ }
22
+
23
+ /* */
24
+ static VALUE rb_libarchive_archive_position_compressed(VALUE self) {
25
+ struct rb_libarchive_archive_container *p;
26
+ Data_Get_Struct(self, struct rb_libarchive_archive_container, p);
27
+ Check_Archive(p);
28
+ return LL2NUM(archive_position_compressed(p->ar));
29
+ }
30
+
31
+ /* */
32
+ static VALUE rb_libarchive_archive_position_uncompressed(VALUE self) {
33
+ struct rb_libarchive_archive_container *p;
34
+ Data_Get_Struct(self, struct rb_libarchive_archive_container, p);
35
+ Check_Archive(p);
36
+ return LL2NUM(archive_position_uncompressed(p->ar));
37
+ }
38
+
39
+ /* */
40
+ static VALUE rb_libarchive_archive_compression_name(VALUE self) {
41
+ struct rb_libarchive_archive_container *p;
42
+ Data_Get_Struct(self, struct rb_libarchive_archive_container, p);
43
+ Check_Archive(p);
44
+ return rb_str_new2(archive_compression_name(p->ar));
45
+ }
46
+
47
+ /* */
48
+ static VALUE rb_libarchive_archive_compression(VALUE self) {
49
+ struct rb_libarchive_archive_container *p;
50
+ Data_Get_Struct(self, struct rb_libarchive_archive_container, p);
51
+ Check_Archive(p);
52
+ return INT2NUM(archive_compression(p->ar));
53
+ }
54
+
55
+ /* */
56
+ static VALUE rb_libarchive_archive_format_name(VALUE self) {
57
+ struct rb_libarchive_archive_container *p;
58
+ Data_Get_Struct(self, struct rb_libarchive_archive_container, p);
59
+ Check_Archive(p);
60
+ return rb_str_new2(archive_format_name(p->ar));
61
+ }
62
+
63
+ /* */
64
+ static VALUE rb_libarchive_archive_format(VALUE self) {
65
+ struct rb_libarchive_archive_container *p;
66
+ Data_Get_Struct(self, struct rb_libarchive_archive_container, p);
67
+ Check_Archive(p);
68
+ return NUM2INT(archive_format(p->ar));
69
+ }
70
+
71
+ void Init_libarchive_archive() {
72
+ rb_define_method(rb_cArchiveReader, "position_compressed", rb_libarchive_archive_position_compressed, 0);
73
+ rb_define_method(rb_cArchiveWriter, "position_compressed", rb_libarchive_archive_position_compressed, 0);
74
+ rb_define_method(rb_cArchiveReader, "position_uncompressed", rb_libarchive_archive_position_uncompressed, 0);
75
+ rb_define_method(rb_cArchiveWriter, "position_uncompressed", rb_libarchive_archive_position_uncompressed, 0);
76
+ rb_define_method(rb_cArchiveReader, "compression_name", rb_libarchive_archive_compression_name, 0);
77
+ rb_define_method(rb_cArchiveWriter, "compression_name", rb_libarchive_archive_compression_name, 0);
78
+ rb_define_method(rb_cArchiveReader, "compression", rb_libarchive_archive_compression, 0);
79
+ rb_define_method(rb_cArchiveWriter, "compression", rb_libarchive_archive_compression, 0);
80
+ rb_define_method(rb_cArchiveReader, "format_name", rb_libarchive_archive_format_name, 0);
81
+ rb_define_method(rb_cArchiveWriter, "format_name", rb_libarchive_archive_format_name, 0);
82
+ rb_define_method(rb_cArchiveReader, "format", rb_libarchive_archive_format, 0);
83
+ rb_define_method(rb_cArchiveWriter, "format", rb_libarchive_archive_format, 0);
84
+ }