+++ /dev/null
-diff -ru libtar-1.2.11/lib/decode.c libtar-1.2.11-new/lib/decode.c
---- libtar-1.2.11/lib/decode.c 2004-08-18 22:12:06.888107160 +0200
-+++ libtar-1.2.11-new/lib/decode.c 2004-08-18 22:05:27.569812768 +0200
-@@ -42,6 +42,17 @@
- return filename;
- }
-
-+char*
-+th_get_linkname(TAR* t)
-+{
-+ static char filename[MAXPATHLEN];
-+
-+ if (t->th_buf.gnu_longlink)
-+ return t->th_buf.gnu_longlink;
-+
-+ snprintf(filename, sizeof(filename), "%.100s", t->th_buf.linkname);
-+ return filename;
-+}
-
- uid_t
- th_get_uid(TAR *t)
-diff -ru libtar-1.2.11/lib/libtar.h libtar-1.2.11-new/lib/libtar.h
---- libtar-1.2.11/lib/libtar.h 2003-01-07 02:40:59.000000000 +0100
-+++ libtar-1.2.11-new/lib/libtar.h 2004-08-18 21:59:12.344855632 +0200
-@@ -184,9 +184,7 @@
- #define th_get_mtime(t) oct_to_int((t)->th_buf.mtime)
- #define th_get_devmajor(t) oct_to_int((t)->th_buf.devmajor)
- #define th_get_devminor(t) oct_to_int((t)->th_buf.devminor)
--#define th_get_linkname(t) ((t)->th_buf.gnu_longlink \
-- ? (t)->th_buf.gnu_longlink \
-- : (t)->th_buf.linkname)
-+char *th_get_linkname(TAR *t);
- char *th_get_pathname(TAR *t);
- mode_t th_get_mode(TAR *t);
- uid_t th_get_uid(TAR *t);
+++ /dev/null
-diff -ru libtar-1.2.11/lib/decode.c libtar-1.2.11-new/lib/decode.c
---- libtar-1.2.11/lib/decode.c 2003-01-07 02:40:59.000000000 +0100
-+++ libtar-1.2.11-new/lib/decode.c 2003-10-03 15:02:44.000000000 +0200
-@@ -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;
- }
-
-
+++ /dev/null
-diff -ru libtar-1.2.11/lib/extract.c libtar-1.2.11-new/lib/extract.c
---- libtar-1.2.11/lib/extract.c 2003-03-03 00:58:07.000000000 +0100
-+++ libtar-1.2.11-new/lib/extract.c 2003-10-03 15:07:46.000000000 +0200
-@@ -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);