diff --git a/archive/tar/common.go b/archive/tar/common.go index 36f4e23..5141bf9 100644 --- a/archive/tar/common.go +++ b/archive/tar/common.go @@ -59,6 +59,7 @@ type Header struct { AccessTime time.Time // access time ChangeTime time.Time // status change time Xattrs map[string]string + Winheaders map[string]string } // File name constants from the tar spec. @@ -192,6 +193,7 @@ const ( paxUid = "uid" paxUname = "uname" paxXattr = "SCHILY.xattr." + paxWindows = "MSWINDOWS." paxNone = "" ) diff --git a/archive/tar/reader.go b/archive/tar/reader.go index c8cb69a..6aee36c 100644 --- a/archive/tar/reader.go +++ b/archive/tar/reader.go @@ -314,6 +314,11 @@ func mergePAX(hdr *Header, headers map[string]string) error { hdr.Xattrs = make(map[string]string) } hdr.Xattrs[k[len(paxXattr):]] = v + } else if strings.HasPrefix(k, paxWindows) { + if hdr.Winheaders == nil { + hdr.Winheaders = make(map[string]string) + } + hdr.Winheaders[k[len(paxWindows):]] = v } } } diff --git a/archive/tar/writer.go b/archive/tar/writer.go index 0426381..05027a3 100644 --- a/archive/tar/writer.go +++ b/archive/tar/writer.go @@ -268,6 +268,9 @@ func (tw *Writer) writeHeader(hdr *Header, allowPax bool) error { for k, v := range hdr.Xattrs { paxHeaders[paxXattr+k] = v } + for k, v := range hdr.Winheaders { + paxHeaders[paxWindows+k] = v + } } if len(paxHeaders) > 0 {