diff options
author | Rob Pike <r@golang.org> | 2008-09-11 13:40:17 -0700 |
---|---|---|
committer | Rob Pike <r@golang.org> | 2008-09-11 13:40:17 -0700 |
commit | c42859e2d5b5cc53b43d6dabc27a782865230fc9 (patch) | |
tree | 63ad4f7c84d3162b515c764370c4025bc20dc823 /src/syscall/file_amd64_linux.go | |
parent | 9c2e6bf6cdb8d8c8483dc01f932d9575ace72e96 (diff) | |
download | golang-c42859e2d5b5cc53b43d6dabc27a782865230fc9.tar.gz |
make syscall use strings for file names
tweak os to adjust
move StringToBytes into syscall, at least for now
this program still works:
package main
import os "os"
func main() {
os.Stdout.WriteString("hello, world\n");
a, b := os.NewFD(77).WriteString("no way");
os.Stdout.WriteString(b.String() + "\n");
}
R=rsc
DELTA=263 (59 added, 176 deleted, 28 changed)
OCL=15153
CL=15153
Diffstat (limited to 'src/syscall/file_amd64_linux.go')
-rw-r--r-- | src/syscall/file_amd64_linux.go | 34 |
1 files changed, 26 insertions, 8 deletions
diff --git a/src/syscall/file_amd64_linux.go b/src/syscall/file_amd64_linux.go index d00222a26..dc99d7de3 100644 --- a/src/syscall/file_amd64_linux.go +++ b/src/syscall/file_amd64_linux.go @@ -66,15 +66,25 @@ const ( O_TRUNC = 0x200; ) -export func open(name *byte, mode int64, flags int64) (ret int64, errno int64) { +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, syscall.ENAMETOOLONG + } const SYSOPEN = 2; - r1, r2, err := syscall.Syscall(SYSOPEN, AddrToInt(name), mode, flags); + r1, r2, err := syscall.Syscall(SYSOPEN, AddrToInt(&namebuf[0]), mode, perm); return r1, err; } -export func creat(name *byte, mode int64) (ret int64, errno int64) { +export func creat(name string, perm int64) (ret int64, errno int64) { + var namebuf [NameBufsize]byte; + if !StringToBytes(&namebuf, name) { + return -1, syscall.ENAMETOOLONG + } const SYSOPEN = 2; - r1, r2, err := syscall.Syscall(SYSOPEN, AddrToInt(name), mode, O_CREAT|O_WRONLY|O_TRUNC); + r1, r2, err := syscall.Syscall(SYSOPEN, AddrToInt(&namebuf[0]), O_CREAT|O_WRONLY|O_TRUNC, perm); return r1, err; } @@ -108,9 +118,13 @@ export func pipe(fds *[2]int64) (ret int64, errno int64) { return 0, 0; } -export func stat(name *byte, buf *Stat) (ret int64, errno int64) { +export func stat(name string, buf *Stat) (ret int64, errno int64) { + var namebuf [NameBufsize]byte; + if !StringToBytes(&namebuf, name) { + return -1, syscall.ENAMETOOLONG + } const SYSSTAT = 4; - r1, r2, err := syscall.Syscall(SYSSTAT, AddrToInt(name), StatToInt(buf), 0); + r1, r2, err := syscall.Syscall(SYSSTAT, AddrToInt(&namebuf[0]), StatToInt(buf), 0); return r1, err; } @@ -126,8 +140,12 @@ export func fstat(fd int64, buf *Stat) (ret int64, errno int64) { return r1, err; } -export func unlink(name *byte) (ret int64, errno int64) { +export func unlink(name string) (ret int64, errno int64) { + var namebuf [NameBufsize]byte; + if !StringToBytes(&namebuf, name) { + return -1, syscall.ENAMETOOLONG + } const SYSUNLINK = 87; - r1, r2, err := syscall.Syscall(SYSUNLINK, AddrToInt(name), 0, 0); + r1, r2, err := syscall.Syscall(SYSUNLINK, AddrToInt(&namebuf[0]), 0, 0); return r1, err; } |