libarchive 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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
+ }