Skip to content

Commit

Permalink
add os.Truncate(name, size) (see #4209)
Browse files Browse the repository at this point in the history
  • Loading branch information
archie2x authored and deadprogram committed Aug 11, 2024
1 parent 2e76cd3 commit d6e73b4
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 13 deletions.
22 changes: 14 additions & 8 deletions src/os/file_unix.go
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,19 @@ func NewFile(fd uintptr, name string) *File {
return &File{&file{handle: unixFileHandle(fd), name: name}}
}

// Truncate changes the size of the named file.
// If the file is a symbolic link, it changes the size of the link's target.
// If there is an error, it will be of type *PathError.
func Truncate(name string, size int64) error {
e := ignoringEINTR(func() error {
return syscall.Truncate(name, size)
})
if e != nil {
return &PathError{Op: "truncate", Path: name, Err: e}
}
return nil
}

func Pipe() (r *File, w *File, err error) {
var p [2]int
err = handleSyscallError(syscall.Pipe2(p[:], syscall.O_CLOEXEC))
Expand Down Expand Up @@ -134,14 +147,7 @@ func (f *File) Truncate(size int64) (err error) {
return ErrClosed
}

e := ignoringEINTR(func() error {
return syscall.Truncate(f.name, size)
})

if e != nil {
return &PathError{Op: "truncate", Path: f.name, Err: e}
}
return
return Truncate(f.name, size)
}

// ReadAt reads up to len(b) bytes from the File starting at the given absolute offset.
Expand Down
15 changes: 10 additions & 5 deletions src/os/file_windows.go
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,12 @@ func (f *unixFileHandle) Truncate(size int64) error {
return ErrNotImplemented
}

// Truncate changes the size of the named file.
// If the file is a symbolic link, it changes the size of the link's target.
func Truncate(name string, size int64) error {
return &PathError{Op: "truncate", Path: name, Err: ErrNotImplemented}
}

func tempDir() string {
n := uint32(syscall.MAX_PATH)
for {
Expand Down Expand Up @@ -110,14 +116,13 @@ func (f unixFileHandle) Sync() error {
return ErrNotImplemented
}

// Truncate changes the size of the named file.
// If the file is a symbolic link, it changes the size of the link's target.
func (f *File) Truncate(size int64) error {
var err error
if f.handle == nil {
err = ErrClosed
} else {
err = ErrNotImplemented
return &PathError{Op: "truncate", Path: f.name, Err: ErrClosed}
}
return &PathError{Op: "truncate", Path: f.name, Err: err}
return Truncate(f.name, size)
}

// isWindowsNulName reports whether name is os.DevNull ('NUL') on Windows.
Expand Down

0 comments on commit d6e73b4

Please sign in to comment.