aboutsummaryrefslogtreecommitdiff
path: root/tar.c
diff options
context:
space:
mode:
Diffstat (limited to 'tar.c')
-rw-r--r--tar.c26
1 files changed, 2 insertions, 24 deletions
diff --git a/tar.c b/tar.c
index 4eda4c61a..9b3cb7d81 100644
--- a/tar.c
+++ b/tar.c
@@ -493,18 +493,6 @@ readTarHeader(struct TarHeader *rawHeader, struct TarInfo *header)
493 chksum = getOctal(rawHeader->chksum, sizeof(rawHeader->chksum)); 493 chksum = getOctal(rawHeader->chksum, sizeof(rawHeader->chksum));
494 header->type = rawHeader->typeflag; 494 header->type = rawHeader->typeflag;
495 header->linkname = rawHeader->linkname; 495 header->linkname = rawHeader->linkname;
496 /* Check for and relativify any absolute paths */
497 if ( *(header->linkname) == '/' ) {
498 static int alreadyWarned=FALSE;
499
500 while (*(header->linkname) == '/')
501 ++*(header->linkname);
502
503 if (alreadyWarned == FALSE) {
504 errorMsg("tar: Removing leading '/' from link names\n");
505 alreadyWarned = TRUE;
506 }
507 }
508 header->devmajor = getOctal(rawHeader->devmajor, sizeof(rawHeader->devmajor)); 496 header->devmajor = getOctal(rawHeader->devmajor, sizeof(rawHeader->devmajor));
509 header->devminor = getOctal(rawHeader->devminor, sizeof(rawHeader->devminor)); 497 header->devminor = getOctal(rawHeader->devminor, sizeof(rawHeader->devminor));
510 498
@@ -826,7 +814,7 @@ writeTarHeader(struct TarBallInfo *tbInfo, const char *fileName, struct stat *st
826 if (! *header.uname) 814 if (! *header.uname)
827 strcpy(header.uname, "root"); 815 strcpy(header.uname, "root");
828 816
829 // FIXME (or most likely not): I break Hard Links 817 /* WARNING/NOTICE: I break Hard Links */
830 if (S_ISLNK(statbuf->st_mode)) { 818 if (S_ISLNK(statbuf->st_mode)) {
831 char buffer[BUFSIZ]; 819 char buffer[BUFSIZ];
832 header.typeflag = SYMTYPE; 820 header.typeflag = SYMTYPE;
@@ -834,17 +822,7 @@ writeTarHeader(struct TarBallInfo *tbInfo, const char *fileName, struct stat *st
834 errorMsg("Error reading symlink '%s': %s\n", header.name, strerror(errno)); 822 errorMsg("Error reading symlink '%s': %s\n", header.name, strerror(errno));
835 return ( FALSE); 823 return ( FALSE);
836 } 824 }
837 if (*buffer=='/') { 825 strncpy(header.linkname, buffer, sizeof(header.linkname));
838 static int alreadyWarned=FALSE;
839 if (alreadyWarned==FALSE) {
840 errorMsg("tar: Removing leading '/' from link names\n");
841 alreadyWarned=TRUE;
842 }
843 strncpy(header.linkname, buffer+1, sizeof(header.linkname));
844 }
845 else {
846 strncpy(header.linkname, buffer, sizeof(header.linkname));
847 }
848 } else if (S_ISDIR(statbuf->st_mode)) { 826 } else if (S_ISDIR(statbuf->st_mode)) {
849 header.typeflag = DIRTYPE; 827 header.typeflag = DIRTYPE;
850 strncat(header.name, "/", sizeof(header.name)); 828 strncat(header.name, "/", sizeof(header.name));