This commit is contained in:
Kovid Goyal 2025-04-20 23:18:49 +05:30
parent 5a6c2d9f3b
commit 50b830faa5
No known key found for this signature in database
GPG key ID: 06BC317B515ACE7C

View file

@ -29,13 +29,13 @@ func ExtractAllFromTar(tr *tar.Reader, dest_path string, optss ...TarExtractOpti
return
}
mode := func(hdr *tar.Header) fs.FileMode {
return fs.FileMode(hdr.Mode) & (fs.ModePerm | fs.ModeSetgid | fs.ModeSetuid | fs.ModeSticky)
mode := func(hdr int64) fs.FileMode {
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 {
perms := mode(hdr)
perms := mode(hdr_mode)
if err = chmod(perms); err != nil {
return err
}
@ -76,7 +76,7 @@ func ExtractAllFromTar(tr *tar.Reader, dest_path string, optss ...TarExtractOpti
if err != nil {
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
}
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 {
return
}
err = set_metadata(d.Chmod, hdr)
err = set_metadata(d.Chmod, hdr.Mode)
if err == nil {
_, 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 {
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
}
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 {
return
}
if err = set_metadata(nil, hdr); err != nil {
if err = set_metadata(nil, hdr.Mode); err != nil {
return
}
}