From 93ca0b892af46b9e1e275bb963e6a316f31747dd Mon Sep 17 00:00:00 2001 From: John Starks Date: Mon, 11 Apr 2016 15:45:43 -0700 Subject: [PATCH 1/2] Backuptar: replace slash with backslash on link target --- backuptar/tar.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backuptar/tar.go b/backuptar/tar.go index 96069b0..ad6fb9f 100644 --- a/backuptar/tar.go +++ b/backuptar/tar.go @@ -284,7 +284,7 @@ func WriteBackupStreamFromTarFile(w io.Writer, t *tar.Reader, hdr *tar.Header) ( if hdr.Typeflag == tar.TypeSymlink { _, isMountPoint := hdr.Winheaders[hdrMountPoint] rp := winio.ReparsePoint{ - Target: hdr.Linkname, + Target: filepath.FromSlash(hdr.Linkname), IsMountPoint: isMountPoint, } reparse := winio.EncodeReparsePoint(&rp) From 6606cf93e258603fc76806c0e2bb349c9103049b Mon Sep 17 00:00:00 2001 From: John Starks Date: Mon, 11 Apr 2016 17:20:42 -0700 Subject: [PATCH 2/2] Handle long paths correctly in reparse points --- reparse.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reparse.go b/reparse.go index 9425711..fc1ee4d 100644 --- a/reparse.go +++ b/reparse.go @@ -80,7 +80,7 @@ func EncodeReparsePoint(rp *ReparsePoint) []byte { var ntTarget string relative := false if strings.HasPrefix(rp.Target, `\\?\`) { - ntTarget = rp.Target + ntTarget = `\??\` + rp.Target[4:] } else if strings.HasPrefix(rp.Target, `\\`) { ntTarget = `\??\UNC\` + rp.Target[2:] } else if len(rp.Target) >= 2 && isDriveLetter(rp.Target[0]) && rp.Target[1] == ':' {