summaryrefslogtreecommitdiff
path: root/community/libtar/libtar-1.2.11.patch
blob: 347203dc3f29381cd32ca1b5543f39605496fa1f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
diff -Naur libtar-1.2.11-orig/lib/decode.c libtar-1.2.11/lib/decode.c
--- libtar-1.2.11-orig/lib/decode.c	2003-01-06 17:40:59.000000000 -0800
+++ libtar-1.2.11/lib/decode.c	2004-08-13 12:26:34.000000000 -0700
@@ -26,7 +26,7 @@
 char *
 th_get_pathname(TAR *t)
 {
-	char filename[MAXPATHLEN];
+	static char filename[MAXPATHLEN];
 
 	if (t->th_buf.gnu_longname)
 		return t->th_buf.gnu_longname;
@@ -35,11 +35,11 @@
 	{
 		snprintf(filename, sizeof(filename), "%.155s/%.100s",
 			 t->th_buf.prefix, t->th_buf.name);
-		return strdup(filename);
+		return filename;
 	}
 
 	snprintf(filename, sizeof(filename), "%.100s", t->th_buf.name);
-	return strdup(filename);
+	return filename;
 }
 
 
diff -Naur libtar-1.2.11-orig/lib/extract.c libtar-1.2.11/lib/extract.c
--- libtar-1.2.11-orig/lib/extract.c	2003-03-02 15:58:07.000000000 -0800
+++ libtar-1.2.11/lib/extract.c	2004-08-13 12:26:34.000000000 -0700
@@ -28,14 +28,6 @@
 #endif
 
 
-struct linkname
-{
-	char ln_save[MAXPATHLEN];
-	char ln_real[MAXPATHLEN];
-};
-typedef struct linkname linkname_t;
-
-
 static int
 tar_set_file_perms(TAR *t, char *realname)
 {
@@ -98,7 +90,9 @@
 tar_extract_file(TAR *t, char *realname)
 {
 	int i;
-	linkname_t *lnp;
+	char *lnp;
+	int pathname_len;
+	int realname_len;
 
 	if (t->options & TAR_NOOVERWRITE)
 	{
@@ -137,11 +131,13 @@
 	if (i != 0)
 		return i;
 
-	lnp = (linkname_t *)calloc(1, sizeof(linkname_t));
+	pathname_len = strlen(th_get_pathname(t)) + 1;
+	realname_len = strlen(realname) + 1;
+	lnp = (char *)calloc(1, pathname_len + realname_len);
 	if (lnp == NULL)
 		return -1;
-	strlcpy(lnp->ln_save, th_get_pathname(t), sizeof(lnp->ln_save));
-	strlcpy(lnp->ln_real, realname, sizeof(lnp->ln_real));
+	strcpy(&lnp[0], th_get_pathname(t));
+	strcpy(&lnp[pathname_len], realname);
 #ifdef DEBUG
 	printf("tar_extract_file(): calling libtar_hash_add(): key=\"%s\", "
 	       "value=\"%s\"\n", th_get_pathname(t), realname);
@@ -288,7 +284,7 @@
 {
 	char *filename;
 	char *linktgt = NULL;
-	linkname_t *lnp;
+	char *lnp;
 	libtar_hashptr_t hp;
 
 	if (!TH_ISLNK(t))
@@ -304,8 +300,8 @@
 	if (libtar_hash_getkey(t->h, &hp, th_get_linkname(t),
 			       (libtar_matchfunc_t)libtar_str_match) != 0)
 	{
-		lnp = (linkname_t *)libtar_hashptr_data(&hp);
-		linktgt = lnp->ln_real;
+		lnp = (char *)libtar_hashptr_data(&hp);
+		linktgt = &lnp[strlen(lnp) + 1];
 	}
 	else
 		linktgt = th_get_linkname(t);
diff -Naur libtar-1.2.11-orig/lib/libtar.h libtar-1.2.11/lib/libtar.h
--- libtar-1.2.11-orig/lib/libtar.h	2003-01-06 17:40:59.000000000 -0800
+++ libtar-1.2.11/lib/libtar.h	2004-08-13 12:26:52.000000000 -0700
@@ -63,9 +63,9 @@
 /***** handle.c ************************************************************/
 
 typedef int (*openfunc_t)(const char *, int, ...);
-typedef int (*closefunc_t)(int);
-typedef ssize_t (*readfunc_t)(int, void *, size_t);
-typedef ssize_t (*writefunc_t)(int, const void *, size_t);
+typedef int (*closefunc_t)(long);
+typedef ssize_t (*readfunc_t)(long, void *, size_t);
+typedef ssize_t (*writefunc_t)(long, const void *, size_t);
 
 typedef struct
 {