aboutsummaryrefslogtreecommitdiff
path: root/archival
diff options
context:
space:
mode:
Diffstat (limited to 'archival')
-rw-r--r--archival/tar.c12
1 files changed, 3 insertions, 9 deletions
diff --git a/archival/tar.c b/archival/tar.c
index c168564ca..4bf8004ea 100644
--- a/archival/tar.c
+++ b/archival/tar.c
@@ -921,16 +921,10 @@ writeTarHeader(struct TarBallInfo *tbInfo, const char *header_name,
header.typeflag = LNKTYPE;
strncpy(header.linkname, tbInfo->hlInfo->name, sizeof(header.linkname));
} else if (S_ISLNK(statbuf->st_mode)) {
- int link_size=0;
- char buffer[BUFSIZ];
+ char *lpath = xreadlink(real_name);
header.typeflag = SYMTYPE;
- link_size = readlink(real_name, buffer, sizeof(buffer) - 1);
- if ( link_size < 0) {
- perror_msg("Error reading symlink '%s'", header.name);
- return ( FALSE);
- }
- buffer[link_size] = '\0';
- strncpy(header.linkname, buffer, sizeof(header.linkname));
+ strncpy(header.linkname, lpath, sizeof(header.linkname));
+ free(lpath);
} else if (S_ISDIR(statbuf->st_mode)) {
header.typeflag = DIRTYPE;
strncat(header.name, "/", sizeof(header.name));