aboutsummaryrefslogtreecommitdiff
path: root/patches/0011-pax-Fix-GNU-long-name-handling-with-short-read.patch
diff options
context:
space:
mode:
Diffstat (limited to 'patches/0011-pax-Fix-GNU-long-name-handling-with-short-read.patch')
-rw-r--r--patches/0011-pax-Fix-GNU-long-name-handling-with-short-read.patch176
1 files changed, 0 insertions, 176 deletions
diff --git a/patches/0011-pax-Fix-GNU-long-name-handling-with-short-read.patch b/patches/0011-pax-Fix-GNU-long-name-handling-with-short-read.patch
deleted file mode 100644
index b88aa2b..0000000
--- a/patches/0011-pax-Fix-GNU-long-name-handling-with-short-read.patch
+++ /dev/null
@@ -1,176 +0,0 @@
-From ec3fd37495e977af375a98a472d19ae0ccbcd874 Mon Sep 17 00:00:00 2001
-From: Michael Forney <mforney@mforney.org>
-Date: Sat, 3 Dec 2016 20:49:24 -0800
-Subject: [PATCH] pax: Fix GNU long name handling with short read
-
----
- bin/pax/ar_subs.c | 66 +++++++++++++++++++++++++++++++++------------
- bin/pax/buf_subs.c | 4 +--
- bin/pax/file_subs.c | 25 +----------------
- 3 files changed, 51 insertions(+), 44 deletions(-)
-
-diff --git a/bin/pax/ar_subs.c b/bin/pax/ar_subs.c
-index e5b0a4ee5d1..f0a55abe2f7 100644
---- a/bin/pax/ar_subs.c
-+++ b/bin/pax/ar_subs.c
-@@ -37,6 +37,7 @@
- #include <sys/types.h>
- #include <sys/stat.h>
- #include <sys/time.h>
-+#include <err.h>
- #include <errno.h>
- #include <fcntl.h>
- #include <signal.h>
-@@ -51,6 +52,7 @@
- static void wr_archive(ARCHD *, int is_app);
- static int get_arc(void);
- static int next_head(ARCHD *);
-+static int rd_gnu_string(ARCHD *);
- extern sigset_t s_mask;
-
- /*
-@@ -93,16 +95,8 @@ list(void)
- * step through the archive until the format says it is done
- */
- while (next_head(arcn) == 0) {
-- if (arcn->type == PAX_GLL || arcn->type == PAX_GLF) {
-- /*
-- * we need to read, to get the real filename
-- */
-- off_t cnt;
-- if (!rd_wrfile(arcn, arcn->type == PAX_GLF
-- ? -1 : -2, &cnt))
-- (void)rd_skip(cnt + arcn->pad);
-+ if (rd_gnu_string(arcn))
- continue;
-- }
-
- /*
- * check for pattern, and user specified options match.
-@@ -208,15 +202,8 @@ extract(void)
- * says it is done
- */
- while (next_head(arcn) == 0) {
-- if (arcn->type == PAX_GLL || arcn->type == PAX_GLF) {
-- /*
-- * we need to read, to get the real filename
-- */
-- if (!rd_wrfile(arcn, arcn->type == PAX_GLF
-- ? -1 : -2, &cnt))
-- (void)rd_skip(cnt + arcn->pad);
-+ if (rd_gnu_string(arcn))
- continue;
-- }
-
- /*
- * check for pattern, and user specified options match. When
-@@ -1243,3 +1230,48 @@ get_arc(void)
- paxwarn(1, "Sorry, unable to determine archive format.");
- return(-1);
- }
-+
-+/*
-+ * rd_gnu_string()
-+ * Read the file contents into an allocated string if it is a GNU tar
-+ * long link/file.
-+ * Return:
-+ * 1 if gnu string read, 0 otherwise
-+ */
-+
-+static int
-+rd_gnu_string(ARCHD *arcn)
-+{
-+ char **strp;
-+
-+ switch (arcn->type) {
-+ case PAX_GLF:
-+ strp = &gnu_name_string;
-+ break;
-+ case PAX_GLL:
-+ strp = &gnu_link_string;
-+ break;
-+ default:
-+ strp = NULL;
-+ break;
-+ }
-+ if (!strp)
-+ return 0;
-+ /*
-+ * we need to read, to get the real filename
-+ */
-+ if (*strp)
-+ err(1, "WARNING! Major Internal Error! GNU hack Failing!");
-+ *strp = malloc(arcn->sb.st_size + 1);
-+ if (*strp == NULL) {
-+ paxwarn(1, "Out of memory");
-+ (void)rd_skip(arcn->skip + arcn->pad);
-+ } else if (rd_wrbuf(*strp, arcn->sb.st_size) < arcn->sb.st_size) {
-+ free(*strp);
-+ *strp = NULL;
-+ } else {
-+ (*strp)[arcn->sb.st_size] = '\0';
-+ (void)rd_skip(arcn->pad);
-+ }
-+ return 1;
-+}
-diff --git a/bin/pax/buf_subs.c b/bin/pax/buf_subs.c
-index 68534dcbe25..e84f9e0d3d6 100644
---- a/bin/pax/buf_subs.c
-+++ b/bin/pax/buf_subs.c
-@@ -673,9 +673,7 @@ rd_wrfile(ARCHD *arcn, int ofd, off_t *left)
- * pass the blocksize of the file being written to the write routine,
- * if the size is zero, use the default MINFBSZ
- */
-- if (ofd < 0)
-- sz = PAXPATHLEN + 1; /* GNU tar long link/file */
-- else if (fstat(ofd, &sb) == 0) {
-+ if (fstat(ofd, &sb) == 0) {
- if (sb.st_blksize > 0)
- sz = (int)sb.st_blksize;
- } else
-diff --git a/bin/pax/file_subs.c b/bin/pax/file_subs.c
-index 89b4872988b..8aa3d249923 100644
---- a/bin/pax/file_subs.c
-+++ b/bin/pax/file_subs.c
-@@ -919,7 +919,6 @@ file_write(int fd, char *str, int cnt, int *rem, int *isempt, int sz,
- char *end;
- int wcnt;
- char *st = str;
-- char **strp;
-
- /*
- * while we have data to process
-@@ -978,29 +977,7 @@ file_write(int fd, char *str, int cnt, int *rem, int *isempt, int sz,
- /*
- * have non-zero data in this file system block, have to write
- */
-- switch (fd) {
-- case -1:
-- strp = &gnu_name_string;
-- break;
-- case -2:
-- strp = &gnu_link_string;
-- break;
-- default:
-- strp = NULL;
-- break;
-- }
-- if (strp) {
-- if (*strp)
-- err(1, "WARNING! Major Internal Error! GNU hack Failing!");
-- *strp = malloc(wcnt + 1);
-- if (*strp == NULL) {
-- paxwarn(1, "Out of memory");
-- return(-1);
-- }
-- memcpy(*strp, st, wcnt);
-- (*strp)[wcnt] = '\0';
-- break;
-- } else if (write(fd, st, wcnt) != wcnt) {
-+ if (write(fd, st, wcnt) != wcnt) {
- syswarn(1, errno, "Failed write to file %s", name);
- return(-1);
- }
---
-2.26.2
-