diff --git a/src/os/file_posix.go b/src/os/file_posix.go index c3635ddd28..24ea554b62 100644 --- a/src/os/file_posix.go +++ b/src/os/file_posix.go @@ -7,12 +7,57 @@ package os import ( + "runtime" "syscall" "time" ) func sigpipe() // implemented in package runtime +// Close closes the File, rendering it unusable for I/O. +// On files that support SetDeadline, any pending I/O operations will +// be canceled and return immediately with an error. +// Close will return an error if it has already been called. +func (f *File) Close() error { + if f == nil { + return ErrInvalid + } + return f.file.close() +} + +// read reads up to len(b) bytes from the File. +// It returns the number of bytes read and an error, if any. +func (f *File) read(b []byte) (n int, err error) { + n, err = f.pfd.Read(b) + runtime.KeepAlive(f) + return n, err +} + +// pread reads len(b) bytes from the File starting at byte offset off. +// It returns the number of bytes read and the error, if any. +// EOF is signaled by a zero count with err set to nil. +func (f *File) pread(b []byte, off int64) (n int, err error) { + n, err = f.pfd.Pread(b, off) + runtime.KeepAlive(f) + return n, err +} + +// write writes len(b) bytes to the File. +// It returns the number of bytes written and an error, if any. +func (f *File) write(b []byte) (n int, err error) { + n, err = f.pfd.Write(b) + runtime.KeepAlive(f) + return n, err +} + +// pwrite writes len(b) bytes to the File starting at byte offset off. +// It returns the number of bytes written and an error, if any. +func (f *File) pwrite(b []byte, off int64) (n int, err error) { + n, err = f.pfd.Pwrite(b, off) + runtime.KeepAlive(f) + return n, err +} + // syscallMode returns the syscall-specific mode bits from Go's portable mode bits. func syscallMode(i FileMode) (o uint32) { o |= uint32(i.Perm()) diff --git a/src/os/file_unix.go b/src/os/file_unix.go index 32e4442e5d..b93e2bd56a 100644 --- a/src/os/file_unix.go +++ b/src/os/file_unix.go @@ -226,17 +226,6 @@ func openFileNolog(name string, flag int, perm FileMode) (*File, error) { return newFile(uintptr(r), name, kindOpenFile), nil } -// Close closes the File, rendering it unusable for I/O. -// On files that support SetDeadline, any pending I/O operations will -// be canceled and return immediately with an error. -// Close will return an error if it has already been called. -func (f *File) Close() error { - if f == nil { - return ErrInvalid - } - return f.file.close() -} - func (file *file) close() error { if file == nil { return syscall.EINVAL @@ -257,39 +246,6 @@ func (file *file) close() error { return err } -// read reads up to len(b) bytes from the File. -// It returns the number of bytes read and an error, if any. -func (f *File) read(b []byte) (n int, err error) { - n, err = f.pfd.Read(b) - runtime.KeepAlive(f) - return n, err -} - -// pread reads len(b) bytes from the File starting at byte offset off. -// It returns the number of bytes read and the error, if any. -// EOF is signaled by a zero count with err set to nil. -func (f *File) pread(b []byte, off int64) (n int, err error) { - n, err = f.pfd.Pread(b, off) - runtime.KeepAlive(f) - return n, err -} - -// write writes len(b) bytes to the File. -// It returns the number of bytes written and an error, if any. -func (f *File) write(b []byte) (n int, err error) { - n, err = f.pfd.Write(b) - runtime.KeepAlive(f) - return n, err -} - -// pwrite writes len(b) bytes to the File starting at byte offset off. -// It returns the number of bytes written and an error, if any. -func (f *File) pwrite(b []byte, off int64) (n int, err error) { - n, err = f.pfd.Pwrite(b, off) - runtime.KeepAlive(f) - return n, err -} - // seek sets the offset for the next Read or Write on file to offset, interpreted // according to whence: 0 means relative to the origin of the file, 1 means // relative to the current offset, and 2 means relative to the end. diff --git a/src/os/file_windows.go b/src/os/file_windows.go index 96f934d039..0d8c0fd20d 100644 --- a/src/os/file_windows.go +++ b/src/os/file_windows.go @@ -182,17 +182,6 @@ func openFileNolog(name string, flag int, perm FileMode) (*File, error) { return nil, &PathError{"open", name, errf} } -// Close closes the File, rendering it unusable for I/O. -// On files that support SetDeadline, any pending I/O operations will -// be canceled and return immediately with an error. -// Close will return an error if it has already been called. -func (file *File) Close() error { - if file == nil { - return ErrInvalid - } - return file.file.close() -} - func (file *file) close() error { if file == nil { return syscall.EINVAL @@ -214,39 +203,6 @@ func (file *file) close() error { return err } -// read reads up to len(b) bytes from the File. -// It returns the number of bytes read and an error, if any. -func (f *File) read(b []byte) (n int, err error) { - n, err = f.pfd.Read(b) - runtime.KeepAlive(f) - return n, err -} - -// pread reads len(b) bytes from the File starting at byte offset off. -// It returns the number of bytes read and the error, if any. -// EOF is signaled by a zero count with err set to 0. -func (f *File) pread(b []byte, off int64) (n int, err error) { - n, err = f.pfd.Pread(b, off) - runtime.KeepAlive(f) - return n, err -} - -// write writes len(b) bytes to the File. -// It returns the number of bytes written and an error, if any. -func (f *File) write(b []byte) (n int, err error) { - n, err = f.pfd.Write(b) - runtime.KeepAlive(f) - return n, err -} - -// pwrite writes len(b) bytes to the File starting at byte offset off. -// It returns the number of bytes written and an error, if any. -func (f *File) pwrite(b []byte, off int64) (n int, err error) { - n, err = f.pfd.Pwrite(b, off) - runtime.KeepAlive(f) - return n, err -} - // seek sets the offset for the next Read or Write on file to offset, interpreted // according to whence: 0 means relative to the origin of the file, 1 means // relative to the current offset, and 2 means relative to the end.