From fcf9876e4d2f8ddf4fe37bc4f930fb0c36ee7f0b Mon Sep 17 00:00:00 2001 From: technicianted Date: Thu, 28 Nov 2019 23:27:02 +0000 Subject: [PATCH] Fixed issue when reading symlink --- archiver.go | 3 +++ tar.go | 3 ++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/archiver.go b/archiver.go index ecf315e0..728d9f99 100644 --- a/archiver.go +++ b/archiver.go @@ -105,6 +105,9 @@ type Extractor interface { type File struct { os.FileInfo + // OriginalPath is the original full path to file + OriginalPath string + // The original header info; depends on // type of archive -- could be nil, too. Header interface{} diff --git a/tar.go b/tar.go index 6dda50a0..e18e8b02 100644 --- a/tar.go +++ b/tar.go @@ -295,6 +295,7 @@ func (t *Tar) writeWalk(source, topLevelFolder, destination string) error { FileInfo: info, CustomName: nameInArchive, }, + OriginalPath: fpath, ReadCloser: file, }) if err != nil { @@ -340,7 +341,7 @@ func (t *Tar) Write(f File) error { var linkTarget string if isSymlink(f) { var err error - linkTarget, err = os.Readlink(f.Name()) + linkTarget, err = os.Readlink(f.OriginalPath) if err != nil { return fmt.Errorf("%s: readlink: %v", f.Name(), err) }