tarruby 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/README.txt +99 -0
- data/ext/extconf.rb +19 -0
- data/ext/libtar/COPYRIGHT +35 -0
- data/ext/libtar/ChangeLog +243 -0
- data/ext/libtar/ChangeLog-1.0.x +141 -0
- data/ext/libtar/INSTALL +183 -0
- data/ext/libtar/Makefile.in +51 -0
- data/ext/libtar/README +121 -0
- data/ext/libtar/TODO +10 -0
- data/ext/libtar/autoconf/ac_path_generic.m4 +136 -0
- data/ext/libtar/autoconf/aclocal.m4 +199 -0
- data/ext/libtar/autoconf/encap.m4 +133 -0
- data/ext/libtar/autoconf/install-sh +251 -0
- data/ext/libtar/autom4te.cache/output.0 +8102 -0
- data/ext/libtar/autom4te.cache/requests +112 -0
- data/ext/libtar/autom4te.cache/traces.0 +382 -0
- data/ext/libtar/compat/ChangeLog +31 -0
- data/ext/libtar/compat/README +12 -0
- data/ext/libtar/compat/TODO +4 -0
- data/ext/libtar/compat/basename.c +91 -0
- data/ext/libtar/compat/compat.h +260 -0
- data/ext/libtar/compat/dirname.c +96 -0
- data/ext/libtar/compat/fnmatch.c +237 -0
- data/ext/libtar/compat/gethostbyname_r.c +41 -0
- data/ext/libtar/compat/gethostname.c +36 -0
- data/ext/libtar/compat/getservbyname_r.c +41 -0
- data/ext/libtar/compat/glob.c +898 -0
- data/ext/libtar/compat/inet_aton.c +27 -0
- data/ext/libtar/compat/module.ac +591 -0
- data/ext/libtar/compat/snprintf.c +788 -0
- data/ext/libtar/compat/strdup.c +62 -0
- data/ext/libtar/compat/strlcat.c +72 -0
- data/ext/libtar/compat/strlcpy.c +68 -0
- data/ext/libtar/compat/strmode.c +199 -0
- data/ext/libtar/compat/strrstr.c +40 -0
- data/ext/libtar/compat/strsep.c +87 -0
- data/ext/libtar/config.h.in +187 -0
- data/ext/libtar/configure +8102 -0
- data/ext/libtar/configure.ac +114 -0
- data/ext/libtar/doc/Makefile.in +152 -0
- data/ext/libtar/doc/tar_append_file.3 +50 -0
- data/ext/libtar/doc/tar_block_read.3 +24 -0
- data/ext/libtar/doc/tar_extract_all.3 +43 -0
- data/ext/libtar/doc/tar_extract_file.3 +84 -0
- data/ext/libtar/doc/tar_open.3 +97 -0
- data/ext/libtar/doc/th_get_pathname.3 +63 -0
- data/ext/libtar/doc/th_print_long_ls.3 +22 -0
- data/ext/libtar/doc/th_read.3 +34 -0
- data/ext/libtar/doc/th_set_from_stat.3 +45 -0
- data/ext/libtar/lib/Makefile.in +92 -0
- data/ext/libtar/lib/append.c +272 -0
- data/ext/libtar/lib/block.c +384 -0
- data/ext/libtar/lib/decode.c +130 -0
- data/ext/libtar/lib/encode.c +237 -0
- data/ext/libtar/lib/extract.c +656 -0
- data/ext/libtar/lib/handle.c +150 -0
- data/ext/libtar/lib/internal.h +46 -0
- data/ext/libtar/lib/libtar.h +311 -0
- data/ext/libtar/lib/output.c +146 -0
- data/ext/libtar/lib/util.c +153 -0
- data/ext/libtar/lib/wrapper.c +175 -0
- data/ext/libtar/libtar/Makefile.in +73 -0
- data/ext/libtar/libtar/libtar.c +363 -0
- data/ext/libtar/listhash/ChangeLog +15 -0
- data/ext/libtar/listhash/TODO +21 -0
- data/ext/libtar/listhash/hash.c.in +344 -0
- data/ext/libtar/listhash/hash_new.3.in +74 -0
- data/ext/libtar/listhash/list.c.in +458 -0
- data/ext/libtar/listhash/list_new.3.in +86 -0
- data/ext/libtar/listhash/listhash.h.in +196 -0
- data/ext/libtar/listhash/module.ac +21 -0
- data/ext/libtar/win32/config.h +190 -0
- data/ext/libtar/win32/dirent.c +115 -0
- data/ext/libtar/win32/dirent.h +24 -0
- data/ext/libtar/win32/grp.h +4 -0
- data/ext/libtar/win32/listhash/libtar_hash.c +344 -0
- data/ext/libtar/win32/listhash/libtar_list.c +458 -0
- data/ext/libtar/win32/listhash/libtar_listhash.h +196 -0
- data/ext/libtar/win32/pwd.h +4 -0
- data/ext/libtar/win32/sys/param.h +8 -0
- data/ext/libtar/win32/tar.h +35 -0
- data/ext/libtar/win32/utime.h +6 -0
- data/ext/libtar/win32/win32/types.h +10 -0
- data/ext/tarruby.c +648 -0
- metadata +150 -0
@@ -0,0 +1,153 @@
|
|
1
|
+
/*
|
2
|
+
** Copyright 1998-2003 University of Illinois Board of Trustees
|
3
|
+
** Copyright 1998-2003 Mark D. Roth
|
4
|
+
** All rights reserved.
|
5
|
+
**
|
6
|
+
** util.c - miscellaneous utility code for libtar
|
7
|
+
**
|
8
|
+
** Mark D. Roth <roth@uiuc.edu>
|
9
|
+
** Campus Information Technologies and Educational Services
|
10
|
+
** University of Illinois at Urbana-Champaign
|
11
|
+
*/
|
12
|
+
|
13
|
+
#include <internal.h>
|
14
|
+
|
15
|
+
#include <stdio.h>
|
16
|
+
#include <sys/param.h>
|
17
|
+
#include <errno.h>
|
18
|
+
|
19
|
+
#ifdef STDC_HEADERS
|
20
|
+
# include <string.h>
|
21
|
+
#endif
|
22
|
+
|
23
|
+
|
24
|
+
/* hashing function for pathnames */
|
25
|
+
int
|
26
|
+
path_hashfunc(char *key, int numbuckets)
|
27
|
+
{
|
28
|
+
char buf[MAXPATHLEN];
|
29
|
+
char *p;
|
30
|
+
|
31
|
+
strcpy(buf, key);
|
32
|
+
p = basename(buf);
|
33
|
+
|
34
|
+
return (((unsigned int)p[0]) % numbuckets);
|
35
|
+
}
|
36
|
+
|
37
|
+
|
38
|
+
/* matching function for dev_t's */
|
39
|
+
int
|
40
|
+
dev_match(dev_t *dev1, dev_t *dev2)
|
41
|
+
{
|
42
|
+
return !memcmp(dev1, dev2, sizeof(dev_t));
|
43
|
+
}
|
44
|
+
|
45
|
+
|
46
|
+
/* matching function for ino_t's */
|
47
|
+
int
|
48
|
+
ino_match(ino_t *ino1, ino_t *ino2)
|
49
|
+
{
|
50
|
+
return !memcmp(ino1, ino2, sizeof(ino_t));
|
51
|
+
}
|
52
|
+
|
53
|
+
|
54
|
+
/* hashing function for dev_t's */
|
55
|
+
int
|
56
|
+
dev_hash(dev_t *dev)
|
57
|
+
{
|
58
|
+
return *dev % 16;
|
59
|
+
}
|
60
|
+
|
61
|
+
|
62
|
+
/* hashing function for ino_t's */
|
63
|
+
int
|
64
|
+
ino_hash(ino_t *inode)
|
65
|
+
{
|
66
|
+
return *inode % 256;
|
67
|
+
}
|
68
|
+
|
69
|
+
|
70
|
+
/*
|
71
|
+
** mkdirhier() - create all directories in a given path
|
72
|
+
** returns:
|
73
|
+
** 0 success
|
74
|
+
** 1 all directories already exist
|
75
|
+
** -1 (and sets errno) error
|
76
|
+
*/
|
77
|
+
int
|
78
|
+
mkdirhier(char *path)
|
79
|
+
{
|
80
|
+
char src[MAXPATHLEN], dst[MAXPATHLEN] = "";
|
81
|
+
char *dirp, *nextp = src;
|
82
|
+
int retval = 1;
|
83
|
+
|
84
|
+
if (strlcpy(src, path, sizeof(src)) > sizeof(src))
|
85
|
+
{
|
86
|
+
errno = ENAMETOOLONG;
|
87
|
+
return -1;
|
88
|
+
}
|
89
|
+
|
90
|
+
if (path[0] == '/')
|
91
|
+
strcpy(dst, "/");
|
92
|
+
|
93
|
+
while ((dirp = strsep(&nextp, "/")) != NULL)
|
94
|
+
{
|
95
|
+
if (*dirp == '\0')
|
96
|
+
continue;
|
97
|
+
|
98
|
+
if (dst[0] != '\0')
|
99
|
+
strcat(dst, "/");
|
100
|
+
strcat(dst, dirp);
|
101
|
+
|
102
|
+
if (mkdir(dst, 0777) == -1)
|
103
|
+
{
|
104
|
+
if (errno != EEXIST)
|
105
|
+
return -1;
|
106
|
+
}
|
107
|
+
else
|
108
|
+
retval = 0;
|
109
|
+
}
|
110
|
+
|
111
|
+
return retval;
|
112
|
+
}
|
113
|
+
|
114
|
+
|
115
|
+
/* calculate header checksum */
|
116
|
+
int
|
117
|
+
th_crc_calc(TAR *t)
|
118
|
+
{
|
119
|
+
int i, sum = 0;
|
120
|
+
|
121
|
+
for (i = 0; i < T_BLOCKSIZE; i++)
|
122
|
+
sum += ((unsigned char *)(&(t->th_buf)))[i];
|
123
|
+
for (i = 0; i < 8; i++)
|
124
|
+
sum += (' ' - (unsigned char)t->th_buf.chksum[i]);
|
125
|
+
|
126
|
+
return sum;
|
127
|
+
}
|
128
|
+
|
129
|
+
|
130
|
+
/* string-octal to integer conversion */
|
131
|
+
int
|
132
|
+
oct_to_int(char *oct)
|
133
|
+
{
|
134
|
+
int i;
|
135
|
+
|
136
|
+
sscanf(oct, "%o", &i);
|
137
|
+
|
138
|
+
return i;
|
139
|
+
}
|
140
|
+
|
141
|
+
|
142
|
+
/* integer to string-octal conversion, no NULL */
|
143
|
+
void
|
144
|
+
int_to_oct_nonull(int num, char *oct, size_t octlen)
|
145
|
+
{
|
146
|
+
// modified by SUGAWARA Genki <sgwr_dts@yahoo.co.jp>
|
147
|
+
//snprintf(oct, octlen, "%*lo", octlen - 1, (unsigned long)num);
|
148
|
+
//oct[octlen - 1] = ' ';
|
149
|
+
snprintf(oct, octlen, "%0*lo", octlen - 1, (unsigned long)num);
|
150
|
+
oct[octlen - 1] = 0;
|
151
|
+
}
|
152
|
+
|
153
|
+
|
@@ -0,0 +1,175 @@
|
|
1
|
+
/*
|
2
|
+
** Copyright 1998-2003 University of Illinois Board of Trustees
|
3
|
+
** Copyright 1998-2003 Mark D. Roth
|
4
|
+
** All rights reserved.
|
5
|
+
**
|
6
|
+
** wrapper.c - libtar high-level wrapper code
|
7
|
+
**
|
8
|
+
** Mark D. Roth <roth@uiuc.edu>
|
9
|
+
** Campus Information Technologies and Educational Services
|
10
|
+
** University of Illinois at Urbana-Champaign
|
11
|
+
*/
|
12
|
+
|
13
|
+
#include <internal.h>
|
14
|
+
|
15
|
+
#include <stdio.h>
|
16
|
+
#include <sys/param.h>
|
17
|
+
#include <dirent.h>
|
18
|
+
#include <errno.h>
|
19
|
+
|
20
|
+
#ifdef STDC_HEADERS
|
21
|
+
# include <string.h>
|
22
|
+
#endif
|
23
|
+
|
24
|
+
|
25
|
+
int
|
26
|
+
tar_extract_glob(TAR *t, char *globname, char *prefix)
|
27
|
+
{
|
28
|
+
char *filename;
|
29
|
+
char buf[MAXPATHLEN];
|
30
|
+
int i;
|
31
|
+
|
32
|
+
while ((i = th_read(t)) == 0)
|
33
|
+
{
|
34
|
+
filename = th_get_pathname(t);
|
35
|
+
if (fnmatch(globname, filename, FNM_PATHNAME | FNM_PERIOD))
|
36
|
+
{
|
37
|
+
if (TH_ISREG(t) && tar_skip_regfile(t)){
|
38
|
+
free(filename);
|
39
|
+
return -1;
|
40
|
+
}
|
41
|
+
continue;
|
42
|
+
}
|
43
|
+
if (t->options & TAR_VERBOSE)
|
44
|
+
th_print_long_ls(t);
|
45
|
+
if (prefix != NULL)
|
46
|
+
snprintf(buf, sizeof(buf), "%s/%s", prefix, filename);
|
47
|
+
else
|
48
|
+
strlcpy(buf, filename, sizeof(buf));
|
49
|
+
// modified by SUGAWARA Genki <sgwr_dts@yahoo.co.jp>
|
50
|
+
//if (tar_extract_file(t, filename) != 0)
|
51
|
+
if (tar_extract_file(t, buf) != 0) {
|
52
|
+
free(filename);
|
53
|
+
return -1;
|
54
|
+
}
|
55
|
+
free(filename);
|
56
|
+
}
|
57
|
+
|
58
|
+
return (i == 1 ? 0 : -1);
|
59
|
+
}
|
60
|
+
|
61
|
+
|
62
|
+
int
|
63
|
+
tar_extract_all(TAR *t, char *prefix)
|
64
|
+
{
|
65
|
+
char *filename;
|
66
|
+
char buf[MAXPATHLEN];
|
67
|
+
int i;
|
68
|
+
|
69
|
+
#ifdef DEBUG
|
70
|
+
printf("==> tar_extract_all(TAR *t, \"%s\")\n",
|
71
|
+
(prefix ? prefix : "(null)"));
|
72
|
+
#endif
|
73
|
+
|
74
|
+
while ((i = th_read(t)) == 0)
|
75
|
+
{
|
76
|
+
#ifdef DEBUG
|
77
|
+
puts(" tar_extract_all(): calling th_get_pathname()");
|
78
|
+
#endif
|
79
|
+
filename = th_get_pathname(t);
|
80
|
+
if (t->options & TAR_VERBOSE)
|
81
|
+
th_print_long_ls(t);
|
82
|
+
if (prefix != NULL)
|
83
|
+
snprintf(buf, sizeof(buf), "%s/%s", prefix, filename);
|
84
|
+
else
|
85
|
+
strlcpy(buf, filename, sizeof(buf));
|
86
|
+
#ifdef DEBUG
|
87
|
+
printf(" tar_extract_all(): calling tar_extract_file(t, "
|
88
|
+
"\"%s\")\n", buf);
|
89
|
+
#endif
|
90
|
+
if (tar_extract_file(t, buf) != 0){
|
91
|
+
free(filename);
|
92
|
+
return -1;
|
93
|
+
}
|
94
|
+
free(filename);
|
95
|
+
}
|
96
|
+
|
97
|
+
return (i == 1 ? 0 : -1);
|
98
|
+
}
|
99
|
+
|
100
|
+
|
101
|
+
int
|
102
|
+
tar_append_tree(TAR *t, char *realdir, char *savedir)
|
103
|
+
{
|
104
|
+
char realpath[MAXPATHLEN];
|
105
|
+
char savepath[MAXPATHLEN];
|
106
|
+
struct dirent *dent;
|
107
|
+
DIR *dp;
|
108
|
+
struct stat s;
|
109
|
+
#ifdef _WIN32 // modified by SUGAWARA Genki <sgwr_dts@yahoo.co.jp>
|
110
|
+
int errorp = 0;
|
111
|
+
#endif
|
112
|
+
|
113
|
+
#ifdef DEBUG
|
114
|
+
printf("==> tar_append_tree(0x%lx, \"%s\", \"%s\")\n",
|
115
|
+
t, realdir, (savedir ? savedir : "[NULL]"));
|
116
|
+
#endif
|
117
|
+
|
118
|
+
if (tar_append_file(t, realdir, savedir) != 0)
|
119
|
+
return -1;
|
120
|
+
|
121
|
+
#ifdef DEBUG
|
122
|
+
puts(" tar_append_tree(): done with tar_append_file()...");
|
123
|
+
#endif
|
124
|
+
|
125
|
+
#ifndef _WIN32 // modified by SUGAWARA Genki <sgwr_dts@yahoo.co.jp>
|
126
|
+
dp = opendir(realdir);
|
127
|
+
#else
|
128
|
+
dp = opendir0(realdir, &errorp);
|
129
|
+
#endif
|
130
|
+
if (dp == NULL)
|
131
|
+
{
|
132
|
+
#ifndef _WIN32 // modified by SUGAWARA Genki <sgwr_dts@yahoo.co.jp>
|
133
|
+
if (errno == ENOTDIR)
|
134
|
+
return 0;
|
135
|
+
#else
|
136
|
+
if (errorp == ENOTDIR) {
|
137
|
+
return 0;
|
138
|
+
}
|
139
|
+
#endif
|
140
|
+
return -1;
|
141
|
+
}
|
142
|
+
while ((dent = readdir(dp)) != NULL)
|
143
|
+
{
|
144
|
+
if (strcmp(dent->d_name, ".") == 0 ||
|
145
|
+
strcmp(dent->d_name, "..") == 0)
|
146
|
+
continue;
|
147
|
+
|
148
|
+
snprintf(realpath, MAXPATHLEN, "%s/%s", realdir,
|
149
|
+
dent->d_name);
|
150
|
+
if (savedir)
|
151
|
+
snprintf(savepath, MAXPATHLEN, "%s/%s", savedir,
|
152
|
+
dent->d_name);
|
153
|
+
|
154
|
+
if (lstat(realpath, &s) != 0)
|
155
|
+
return -1;
|
156
|
+
|
157
|
+
if (S_ISDIR(s.st_mode))
|
158
|
+
{
|
159
|
+
if (tar_append_tree(t, realpath,
|
160
|
+
(savedir ? savepath : NULL)) != 0)
|
161
|
+
return -1;
|
162
|
+
continue;
|
163
|
+
}
|
164
|
+
|
165
|
+
if (tar_append_file(t, realpath,
|
166
|
+
(savedir ? savepath : NULL)) != 0)
|
167
|
+
return -1;
|
168
|
+
}
|
169
|
+
|
170
|
+
closedir(dp);
|
171
|
+
|
172
|
+
return 0;
|
173
|
+
}
|
174
|
+
|
175
|
+
|
@@ -0,0 +1,73 @@
|
|
1
|
+
# @configure_input@
|
2
|
+
|
3
|
+
### Path settings
|
4
|
+
srcdir = @srcdir@
|
5
|
+
top_srcdir = @top_srcdir@
|
6
|
+
prefix = @prefix@
|
7
|
+
exec_prefix = @exec_prefix@
|
8
|
+
bindir = @bindir@
|
9
|
+
libdir = @libdir@
|
10
|
+
includedir = @includedir@
|
11
|
+
|
12
|
+
PACKAGE_NAME = @PACKAGE_NAME@
|
13
|
+
PACKAGE_VERSION = @PACKAGE_VERSION@
|
14
|
+
|
15
|
+
@ENCAP_DEFS@
|
16
|
+
|
17
|
+
### Installation programs and flags
|
18
|
+
INSTALL = @INSTALL@
|
19
|
+
INSTALL_PROGRAM = @INSTALL_PROGRAM@ -s
|
20
|
+
INSTALL_DATA = @INSTALL_DATA@
|
21
|
+
LN_S = @LN_S@
|
22
|
+
MKDIR = @MKDIR@
|
23
|
+
|
24
|
+
### Compiler and link options
|
25
|
+
CC = @CC@
|
26
|
+
CPPFLAGS = -I.. \
|
27
|
+
-I../lib \
|
28
|
+
-I../listhash \
|
29
|
+
-I${top_srcdir}/lib \
|
30
|
+
-I${top_srcdir}/compat \
|
31
|
+
@CPPFLAGS@
|
32
|
+
CFLAGS = @CFLAGS@
|
33
|
+
LDFLAGS = @LDFLAGS@
|
34
|
+
LIBS = @LIBS@
|
35
|
+
LIBOBJS = @LIBOBJS@
|
36
|
+
RANLIB = @RANLIB@
|
37
|
+
@SET_MAKE@
|
38
|
+
VPATH = @srcdir@
|
39
|
+
|
40
|
+
|
41
|
+
### Makefile rules - no user-servicable parts below
|
42
|
+
|
43
|
+
LIBTAR_OBJS = libtar.o
|
44
|
+
LIBTAR_HDRS = ../config.h \
|
45
|
+
${top_srcdir}/compat/compat.h \
|
46
|
+
${top_srcdir}/lib/libtar.h \
|
47
|
+
../listhash/libtar_listhash.h
|
48
|
+
LIBTAR_LIBS = ../lib/libtar.a
|
49
|
+
ALL = libtar
|
50
|
+
|
51
|
+
|
52
|
+
all: ${ALL}
|
53
|
+
|
54
|
+
.PHONY: clean distclean install
|
55
|
+
|
56
|
+
libtar: ${LIBTAR_OBJS} ${LIBTAR_LIBS} ${LIBTAR_HDRS}
|
57
|
+
${CC} ${CFLAGS} ${LDFLAGS} -o libtar libtar.o ${LIBTAR_LIBS} ${LIBS}
|
58
|
+
|
59
|
+
${LIBTAR_OBJS}: ${LIBTAR_HDRS}
|
60
|
+
|
61
|
+
.c.o:
|
62
|
+
${CC} ${CFLAGS} ${CPPFLAGS} -c -o $@ $<
|
63
|
+
|
64
|
+
clean:
|
65
|
+
rm -f *~ *.o ${ALL} core
|
66
|
+
|
67
|
+
distclean: clean
|
68
|
+
rm -f Makefile
|
69
|
+
|
70
|
+
install: ${ALL}
|
71
|
+
${MKDIR} ${DESTDIR}${bindir}
|
72
|
+
${INSTALL_PROGRAM} libtar ${DESTDIR}${bindir}
|
73
|
+
|