diff options
| author | Russ Cox <rsc@golang.org> | 2008-09-26 14:11:26 -0700 |
|---|---|---|
| committer | Russ Cox <rsc@golang.org> | 2008-09-26 14:11:26 -0700 |
| commit | 6201a963f1ea19e1473dc13f4d5f397a9eac543a (patch) | |
| tree | 26c67a72dec44faba761ffd9fac52a927ec58ffe /src/lib/syscall/file_linux.go | |
| parent | 2662aad7b788cd0bda630d45f659dc12211adc8a (diff) | |
| download | go-6201a963f1ea19e1473dc13f4d5f397a9eac543a.tar.xz | |
move src/syscall to src/lib/syscall.
enforce rule: all kernel data structures and constants
go in syscall module.
move things that should be in syscall out of net.
make net a single package.
R=r
OCL=15985
CL=15994
Diffstat (limited to 'src/lib/syscall/file_linux.go')
| -rw-r--r-- | src/lib/syscall/file_linux.go | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/src/lib/syscall/file_linux.go b/src/lib/syscall/file_linux.go new file mode 100644 index 0000000000..fdf690fbb2 --- /dev/null +++ b/src/lib/syscall/file_linux.go @@ -0,0 +1,84 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package syscall + +// File operations for Linux + +import syscall "syscall" + +const NameBufsize = 512 + +export func open(name string, mode int64, perm int64) (ret int64, errno int64) { + var namebuf [NameBufsize]byte; + if !StringToBytes(&namebuf, name) { + return -1, ENAMETOOLONG + } + r1, r2, err := Syscall(SYS_OPEN, BytePtr(&namebuf[0]), mode, perm); + return r1, err; +} + +export func creat(name string, perm int64) (ret int64, errno int64) { + var namebuf [NameBufsize]byte; + if !StringToBytes(&namebuf, name) { + return -1, ENAMETOOLONG + } + r1, r2, err := Syscall(SYS_OPEN, BytePtr(&namebuf[0]), O_CREAT|O_WRONLY|O_TRUNC, perm); + return r1, err; +} + +export func close(fd int64) (ret int64, errno int64) { + r1, r2, err := Syscall(SYS_CLOSE, fd, 0, 0); + return r1, err; +} + +export func read(fd int64, buf *byte, nbytes int64) (ret int64, errno int64) { + r1, r2, err := Syscall(SYS_READ, fd, BytePtr(buf), nbytes); + return r1, err; +} + +export func write(fd int64, buf *byte, nbytes int64) (ret int64, errno int64) { + r1, r2, err := Syscall(SYS_WRITE, fd, BytePtr(buf), nbytes); + return r1, err; +} + +export func pipe(fds *[2]int64) (ret int64, errno int64) { + var t [2] int32; + r1, r2, err := Syscall(SYS_PIPE, Int32Ptr(&t[0]), 0, 0); + if r1 < 0 { + return r1, err; + } + fds[0] = int64(t[0]); + fds[1] = int64(t[1]); + return 0, 0; +} + +export func stat(name string, buf *Stat) (ret int64, errno int64) { + var namebuf [NameBufsize]byte; + if !StringToBytes(&namebuf, name) { + return -1, ENAMETOOLONG + } + r1, r2, err := Syscall(SYS_STAT, BytePtr(&namebuf[0]), StatPtr(buf), 0); + return r1, err; +} + +export func lstat(name *byte, buf *Stat) (ret int64, errno int64) { + r1, r2, err := Syscall(SYS_LSTAT, BytePtr(name), StatPtr(buf), 0); + return r1, err; +} + +export func fstat(fd int64, buf *Stat) (ret int64, errno int64) { + r1, r2, err := Syscall(SYS_FSTAT, fd, StatPtr(buf), 0); + return r1, err; +} + +export func unlink(name string) (ret int64, errno int64) { + var namebuf [NameBufsize]byte; + if !StringToBytes(&namebuf, name) { + return -1, ENAMETOOLONG + } + const SYSUNLINK = 87; + r1, r2, err := Syscall(SYS_UNLINK, BytePtr(&namebuf[0]), 0, 0); + return r1, err; +} |
