aboutsummaryrefslogtreecommitdiff
path: root/src/lib/syscall/file_linux.go
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2008-09-26 14:11:26 -0700
committerRuss Cox <rsc@golang.org>2008-09-26 14:11:26 -0700
commit6201a963f1ea19e1473dc13f4d5f397a9eac543a (patch)
tree26c67a72dec44faba761ffd9fac52a927ec58ffe /src/lib/syscall/file_linux.go
parent2662aad7b788cd0bda630d45f659dc12211adc8a (diff)
downloadgo-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.go84
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;
+}