diff options
Diffstat (limited to 'tar.c')
-rw-r--r-- | tar.c | 26 |
1 files changed, 2 insertions, 24 deletions
@@ -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)); |