summaryrefslogtreecommitdiff
path: root/community/libtar
diff options
context:
space:
mode:
authorParabola <dev@list.parabolagnulinux.org>2011-04-05 14:26:38 +0000
committerParabola <dev@list.parabolagnulinux.org>2011-04-05 14:26:38 +0000
commit415856bdd4f48ab4f2732996f0bae58595092bbe (patch)
treeede2018b591f6dfb477fe9341ba17b9bc000fab9 /community/libtar
Tue Apr 5 14:26:38 UTC 2011
Diffstat (limited to 'community/libtar')
-rw-r--r--community/libtar/PKGBUILD27
-rw-r--r--community/libtar/libtar-1.2.11.patch108
2 files changed, 135 insertions, 0 deletions
diff --git a/community/libtar/PKGBUILD b/community/libtar/PKGBUILD
new file mode 100644
index 000000000..62f5394b9
--- /dev/null
+++ b/community/libtar/PKGBUILD
@@ -0,0 +1,27 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer : Biru Ionut <ionut@archlinux.ro>
+# Contributor: Eric Belanger <eric@archlinux.org>
+# Contributor: Aurelien Foret <orelien@chez.com>
+
+pkgname=libtar
+pkgver=1.2.11
+pkgrel=2
+pkgdesc="C library for manipulating POSIX tar files"
+arch=('i686' 'x86_64')
+url="http://www.feep.net/libtar/"
+license=('BSD')
+depends=('zlib')
+source=(ftp://ftp.feep.net/pub/software/$pkgname/$pkgname-$pkgver.tar.gz \
+ libtar-$pkgver.patch)
+md5sums=('604238e8734ce6e25347a58c4f1a1d7e' 'baef7da841c186e1830566296859c35b')
+sha1sums=('9611f23024b0e89aad1cfea301122186b3c160f8' '100c37378faea118c6664cd8958caa91f34633d0')
+
+build() {
+ cd "$srcdir/$pkgname-$pkgver"
+ export CFLAGS+=" -fPIC"
+ patch -Np1 -i ../libtar-$pkgver.patch
+ ./configure --prefix=/usr --mandir=/usr/share/man
+ make
+ make DESTDIR="$pkgdir" install
+ install -D -m644 COPYRIGHT "$pkgdir/usr/share/licenses/$pkgname/COPYRIGHT"
+}
diff --git a/community/libtar/libtar-1.2.11.patch b/community/libtar/libtar-1.2.11.patch
new file mode 100644
index 000000000..347203dc3
--- /dev/null
+++ b/community/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
+ {