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) }