diff options
Diffstat (limited to 'extra/libtar/libtar-1.2.11.patch')
-rw-r--r-- | extra/libtar/libtar-1.2.11.patch | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/extra/libtar/libtar-1.2.11.patch b/extra/libtar/libtar-1.2.11.patch new file mode 100644 index 000000000..347203dc3 --- /dev/null +++ b/extra/libtar/libtar-1.2.11.patch @@ -0,0 +1,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 + { |