diff options
Diffstat (limited to 'tar.c')
-rw-r--r-- | tar.c | 5 |
1 files changed, 4 insertions, 1 deletions
@@ -824,12 +824,15 @@ writeTarHeader(struct TarBallInfo *tbInfo, const char *fileName, struct stat *st | |||
824 | 824 | ||
825 | /* WARNING/NOTICE: I break Hard Links */ | 825 | /* WARNING/NOTICE: I break Hard Links */ |
826 | if (S_ISLNK(statbuf->st_mode)) { | 826 | if (S_ISLNK(statbuf->st_mode)) { |
827 | int link_size=0; | ||
827 | char buffer[BUFSIZ]; | 828 | char buffer[BUFSIZ]; |
828 | header.typeflag = SYMTYPE; | 829 | header.typeflag = SYMTYPE; |
829 | if ( readlink(fileName, buffer, sizeof(buffer) - 1) < 0) { | 830 | link_size = readlink(fileName, buffer, sizeof(buffer) - 1); |
831 | if ( link_size < 0) { | ||
830 | errorMsg("Error reading symlink '%s': %s\n", header.name, strerror(errno)); | 832 | errorMsg("Error reading symlink '%s': %s\n", header.name, strerror(errno)); |
831 | return ( FALSE); | 833 | return ( FALSE); |
832 | } | 834 | } |
835 | buffer[link_size] = '\0'; | ||
833 | strncpy(header.linkname, buffer, sizeof(header.linkname)); | 836 | strncpy(header.linkname, buffer, sizeof(header.linkname)); |
834 | } else if (S_ISDIR(statbuf->st_mode)) { | 837 | } else if (S_ISDIR(statbuf->st_mode)) { |
835 | header.typeflag = DIRTYPE; | 838 | header.typeflag = DIRTYPE; |