os/file: add file.Chmod

Signed-off-by: leongross <leon.gross@9elements.com>
This commit is contained in:
leongross
2025-02-14 17:15:41 +01:00
committed by Ron Evans
parent c1b267a208
commit 2d17dec7bf
4 changed files with 34 additions and 0 deletions
+11
View File
@@ -307,6 +307,17 @@ func (f *File) Sync() (err error) {
return
}
// Chmod changes the mode of the file to mode. If there is an error, it will be
// of type *PathError.
func (f *File) Chmod(mode FileMode) (err error) {
if f.handle == nil {
err = ErrClosed
} else {
err = f.chmod(mode)
}
return
}
// LinkError records an error during a link or symlink or rename system call and
// the paths that caused it.
type LinkError struct {
+4
View File
@@ -149,3 +149,7 @@ func (f *File) Truncate(size int64) (err error) {
return Truncate(f.name, size)
}
func (f *File) chmod(mode FileMode) error {
return ErrUnsupported
}
+15
View File
@@ -151,6 +151,21 @@ func (f *File) Truncate(size int64) (err error) {
return Truncate(f.name, size)
}
func (f *File) chmod(mode FileMode) error {
if f.handle == nil {
return ErrClosed
}
longName := fixLongPath(f.name)
e := ignoringEINTR(func() error {
return syscall.Chmod(longName, syscallMode(mode))
})
if e != nil {
return &PathError{Op: "chmod", Path: f.name, Err: e}
}
return nil
}
// ReadAt reads up to len(b) bytes from the File starting at the given absolute offset.
// It returns the number of bytes read and any error encountered, possibly io.EOF.
// At end of file, Pread returns 0, io.EOF.
+4
View File
@@ -142,3 +142,7 @@ func isWindowsNulName(name string) bool {
}
return true
}
func (f *File) chmod(mode FileMode) error {
return ErrNotImplemented
}