runtime: add several os package stubs
Этот коммит содержится в:
родитель
66d8899aa7
коммит
847681457f
2 изменённых файлов: 163 добавлений и 4 удалений
161
src/os/file.go
161
src/os/file.go
|
@ -11,7 +11,8 @@ import (
|
||||||
|
|
||||||
// Portable analogs of some common system call errors.
|
// Portable analogs of some common system call errors.
|
||||||
var (
|
var (
|
||||||
ErrUnsupported = errors.New("operation not supported")
|
errUnsupported = errors.New("operation not supported")
|
||||||
|
notImplemented = errors.New("os: not implemented")
|
||||||
)
|
)
|
||||||
|
|
||||||
// Stdin, Stdout, and Stderr are open Files pointing to the standard input,
|
// Stdin, Stdout, and Stderr are open Files pointing to the standard input,
|
||||||
|
@ -28,6 +29,21 @@ type File struct {
|
||||||
name string
|
name string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Readdir is a stub, not yet implemented
|
||||||
|
func (f *File) Readdir(n int) ([]FileInfo, error) {
|
||||||
|
return nil, notImplemented
|
||||||
|
}
|
||||||
|
|
||||||
|
// Readdirnames is a stub, not yet implemented
|
||||||
|
func (f *File) Readdirnames(n int) (names []string, err error) {
|
||||||
|
return nil, notImplemented
|
||||||
|
}
|
||||||
|
|
||||||
|
// Stat is a stub, not yet implemented
|
||||||
|
func (f *File) Stat() (FileInfo, error) {
|
||||||
|
return nil, notImplemented
|
||||||
|
}
|
||||||
|
|
||||||
// NewFile returns a new File with the given file descriptor and name.
|
// NewFile returns a new File with the given file descriptor and name.
|
||||||
func NewFile(fd uintptr, name string) *File {
|
func NewFile(fd uintptr, name string) *File {
|
||||||
return &File{fd, name}
|
return &File{fd, name}
|
||||||
|
@ -38,3 +54,146 @@ func NewFile(fd uintptr, name string) *File {
|
||||||
func (f *File) Fd() uintptr {
|
func (f *File) Fd() uintptr {
|
||||||
return f.fd
|
return f.fd
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const (
|
||||||
|
PathSeparator = '/' // OS-specific path separator
|
||||||
|
PathListSeparator = ':' // OS-specific path list separator
|
||||||
|
)
|
||||||
|
|
||||||
|
// IsPathSeparator reports whether c is a directory separator character.
|
||||||
|
func IsPathSeparator(c uint8) bool {
|
||||||
|
return PathSeparator == c
|
||||||
|
}
|
||||||
|
|
||||||
|
// PathError records an error and the operation and file path that caused it.
|
||||||
|
type PathError struct {
|
||||||
|
Op string
|
||||||
|
Path string
|
||||||
|
Err error
|
||||||
|
}
|
||||||
|
|
||||||
|
func (e *PathError) Error() string { return e.Op + " " + e.Path + ": " + e.Err.Error() }
|
||||||
|
|
||||||
|
// Open is a super simple stub function (for now), only capable of opening stdin, stdout, and stderr
|
||||||
|
func Open(name string) (*File, error) {
|
||||||
|
fd := uintptr(999)
|
||||||
|
switch name {
|
||||||
|
case "/dev/stdin":
|
||||||
|
fd = 0
|
||||||
|
case "/dev/stdout":
|
||||||
|
fd = 1
|
||||||
|
case "/dev/stderr":
|
||||||
|
fd = 2
|
||||||
|
default:
|
||||||
|
return nil, &PathError{"open", name, notImplemented}
|
||||||
|
}
|
||||||
|
return &File{fd, name}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// OpenFile is a stub, passing through to the stub Open() call
|
||||||
|
func OpenFile(name string, flag int, perm FileMode) (*File, error) {
|
||||||
|
return Open(name)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create is a stub, passing through to the stub Open() call
|
||||||
|
func Create(name string) (*File, error) {
|
||||||
|
return Open(name)
|
||||||
|
}
|
||||||
|
|
||||||
|
type FileMode uint32
|
||||||
|
|
||||||
|
// Mode constants, copied from the mainline Go source
|
||||||
|
// https://github.com/golang/go/blob/4ce6a8e89668b87dce67e2f55802903d6eb9110a/src/os/types.go#L35-L63
|
||||||
|
const (
|
||||||
|
// The single letters are the abbreviations used by the String method's formatting.
|
||||||
|
ModeDir FileMode = 1 << (32 - 1 - iota) // d: is a directory
|
||||||
|
ModeAppend // a: append-only
|
||||||
|
ModeExclusive // l: exclusive use
|
||||||
|
ModeTemporary // T: temporary file; Plan 9 only
|
||||||
|
ModeSymlink // L: symbolic link
|
||||||
|
ModeDevice // D: device file
|
||||||
|
ModeNamedPipe // p: named pipe (FIFO)
|
||||||
|
ModeSocket // S: Unix domain socket
|
||||||
|
ModeSetuid // u: setuid
|
||||||
|
ModeSetgid // g: setgid
|
||||||
|
ModeCharDevice // c: Unix character device, when ModeDevice is set
|
||||||
|
ModeSticky // t: sticky
|
||||||
|
ModeIrregular // ?: non-regular file; nothing else is known about this file
|
||||||
|
|
||||||
|
// Mask for the type bits. For regular files, none will be set.
|
||||||
|
ModeType = ModeDir | ModeSymlink | ModeNamedPipe | ModeSocket | ModeDevice | ModeCharDevice | ModeIrregular
|
||||||
|
|
||||||
|
ModePerm FileMode = 0777 // Unix permission bits
|
||||||
|
)
|
||||||
|
|
||||||
|
// IsDir is a stub, always returning false
|
||||||
|
func (m FileMode) IsDir() bool {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// Stub constants
|
||||||
|
const (
|
||||||
|
O_RDONLY int = 1
|
||||||
|
O_WRONLY int = 2
|
||||||
|
O_RDWR int = 4
|
||||||
|
O_APPEND int = 8
|
||||||
|
O_CREATE int = 16
|
||||||
|
O_EXCL int = 32
|
||||||
|
O_SYNC int = 64
|
||||||
|
O_TRUNC int = 128
|
||||||
|
)
|
||||||
|
|
||||||
|
// A FileInfo describes a file and is returned by Stat and Lstat.
|
||||||
|
type FileInfo interface {
|
||||||
|
Name() string // base name of the file
|
||||||
|
Size() int64 // length in bytes for regular files; system-dependent for others
|
||||||
|
Mode() FileMode // file mode bits
|
||||||
|
// ModTime() time.Time // modification time
|
||||||
|
IsDir() bool // abbreviation for Mode().IsDir()
|
||||||
|
Sys() interface{} // underlying data source (can return nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Stat is a stub, not yet implemented
|
||||||
|
func Stat(name string) (FileInfo, error) {
|
||||||
|
return nil, notImplemented
|
||||||
|
}
|
||||||
|
|
||||||
|
// Lstat is a stub, not yet implemented
|
||||||
|
func Lstat(name string) (FileInfo, error) {
|
||||||
|
return nil, notImplemented
|
||||||
|
}
|
||||||
|
|
||||||
|
// Getwd is a stub (for now), always returning an empty string
|
||||||
|
func Getwd() (string, error) {
|
||||||
|
return "", nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Readlink is a stub (for now), always returning the string it was given
|
||||||
|
func Readlink(name string) (string, error) {
|
||||||
|
return name, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// TempDir is a stub (for now), always returning the string "/tmp"
|
||||||
|
func TempDir() string {
|
||||||
|
return "/tmp"
|
||||||
|
}
|
||||||
|
|
||||||
|
// Mkdir is a stub, not yet implemented
|
||||||
|
func Mkdir(name string, perm FileMode) error {
|
||||||
|
return notImplemented
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsExist is a stub (for now), always returning false
|
||||||
|
func IsExist(err error) bool {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsNotExist is a stub (for now), always returning false
|
||||||
|
func IsNotExist(err error) bool {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// Getpid is a stub (for now), always returning 1
|
||||||
|
func Getpid() int {
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
|
@ -8,7 +8,7 @@ import (
|
||||||
|
|
||||||
// Read is unsupported on this system.
|
// Read is unsupported on this system.
|
||||||
func (f *File) Read(b []byte) (n int, err error) {
|
func (f *File) Read(b []byte) (n int, err error) {
|
||||||
return 0, ErrUnsupported
|
return 0, errUnsupported
|
||||||
}
|
}
|
||||||
|
|
||||||
// Write writes len(b) bytes to the output. It returns the number of bytes
|
// Write writes len(b) bytes to the output. It returns the number of bytes
|
||||||
|
@ -21,13 +21,13 @@ func (f *File) Write(b []byte) (n int, err error) {
|
||||||
}
|
}
|
||||||
return len(b), nil
|
return len(b), nil
|
||||||
default:
|
default:
|
||||||
return 0, ErrUnsupported
|
return 0, errUnsupported
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Close is unsupported on this system.
|
// Close is unsupported on this system.
|
||||||
func (f *File) Close() error {
|
func (f *File) Close() error {
|
||||||
return ErrUnsupported
|
return errUnsupported
|
||||||
}
|
}
|
||||||
|
|
||||||
//go:linkname putchar runtime.putchar
|
//go:linkname putchar runtime.putchar
|
||||||
|
|
Загрузка…
Создание таблицы
Сослаться в новой задаче