This commit is contained in:
Kovid Goyal
2025-04-20 23:18:49 +05:30
parent 5a6c2d9f3b
commit 50b830faa5

View File

@@ -29,13 +29,13 @@ func ExtractAllFromTar(tr *tar.Reader, dest_path string, optss ...TarExtractOpti
return return
} }
mode := func(hdr *tar.Header) fs.FileMode { mode := func(hdr int64) fs.FileMode {
return fs.FileMode(hdr.Mode) & (fs.ModePerm | fs.ModeSetgid | fs.ModeSetuid | fs.ModeSticky) return fs.FileMode(hdr) & (fs.ModePerm | fs.ModeSetgid | fs.ModeSetuid | fs.ModeSticky)
} }
set_metadata := func(chmod func(mode fs.FileMode) error, hdr *tar.Header) (err error) { set_metadata := func(chmod func(mode fs.FileMode) error, hdr_mode int64) (err error) {
if !opts.DontPreservePermissions && chmod != nil { if !opts.DontPreservePermissions && chmod != nil {
perms := mode(hdr) perms := mode(hdr_mode)
if err = chmod(perms); err != nil { if err = chmod(perms); err != nil {
return err return err
} }
@@ -76,7 +76,7 @@ func ExtractAllFromTar(tr *tar.Reader, dest_path string, optss ...TarExtractOpti
if err != nil { if err != nil {
return return
} }
if err = set_metadata(func(m fs.FileMode) error { return os.Chmod(dest, m) }, hdr); err != nil { if err = set_metadata(func(m fs.FileMode) error { return os.Chmod(dest, m) }, hdr.Mode); err != nil {
return return
} }
case tar.TypeReg: case tar.TypeReg:
@@ -87,7 +87,7 @@ func ExtractAllFromTar(tr *tar.Reader, dest_path string, optss ...TarExtractOpti
if d, err = os.Create(dest); err != nil { if d, err = os.Create(dest); err != nil {
return return
} }
err = set_metadata(d.Chmod, hdr) err = set_metadata(d.Chmod, hdr.Mode)
if err == nil { if err == nil {
_, err = io.Copy(d, tr) _, err = io.Copy(d, tr)
} }
@@ -110,7 +110,7 @@ func ExtractAllFromTar(tr *tar.Reader, dest_path string, optss ...TarExtractOpti
if err = os.Link(link_target, dest); err != nil { if err = os.Link(link_target, dest); err != nil {
return return
} }
if err = set_metadata(func(m fs.FileMode) error { return os.Chmod(dest, m) }, hdr); err != nil { if err = set_metadata(func(m fs.FileMode) error { return os.Chmod(dest, m) }, hdr.Mode); err != nil {
return return
} }
case tar.TypeSymlink: case tar.TypeSymlink:
@@ -128,7 +128,7 @@ func ExtractAllFromTar(tr *tar.Reader, dest_path string, optss ...TarExtractOpti
if err = os.Symlink(link_target, dest); err != nil { if err = os.Symlink(link_target, dest); err != nil {
return return
} }
if err = set_metadata(nil, hdr); err != nil { if err = set_metadata(nil, hdr.Mode); err != nil {
return return
} }
} }