Commit 795004c6 authored by Rob Pike's avatar Rob Pike

rudimentary beginnings of soon-to-be-real os library

R=gri
DELTA=76  (76 added, 0 deleted, 0 changed)
OCL=15086
CL=15088
parent ae4123f5
# 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.
O=6
GC=$(O)g
PKG=os.a
OFILES=\
os.$O \
os_file.$O \
install: $(PKG)
cp $(PKG) $(GOROOT)/pkg/$(PKG)
$(PKG): $(OFILES)
$(O)ar grc $(PKG) $(OFILES)
nuke:
rm -f *.$(O) *.a $(GOROOT)/pkg/$(PKG)
clean:
rm -f *.$(O) *.a
%.$O: %.go
$(GC) $<
// 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 os
// Support routines for OS library
export func StringToBytes(b *[]byte, s string) bool {
if len(s) >= len(b) {
return false
}
for i := 0; i < len(s); i++ {
b[i] = s[i]
}
b[len(s)] = '\000'; // not necessary - memory is zeroed - but be explicit
return true
}
// 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 os
import syscall "syscall"
import os "os"
export func Open(name string, mode int64, flags int64) (ret int64, errno int64) {
var buf [512]byte;
if !StringToBytes(&buf, name) {
return -1, syscall.ENAMETOOLONG
}
r, e := syscall.open(&buf[0], mode, flags); // BUG: should be able to just return
return r, e
}
export func Close(fd int64) (ret int64, errno int64) {
r, e := syscall.close(fd); // BUG: should be able to just return
return r, e
}
export func Read(fd int64, b *[]byte) (ret int64, errno int64) {
r, e := syscall.read(fd, &b[0], int64(len(b))); // BUG: should be able to just return
return r, e
}
export func Write(fd int64, b *[]byte) (ret int64, errno int64) {
r, e := syscall.write(fd, &b[0], int64(len(b))); // BUG: should be able to just return
return r, e
}
export func WriteString(fd int64, s string) (ret int64, errno int64) {
b := new([]byte, len(s)+1);
if !StringToBytes(b, s) {
return -1, syscall.EIO
}
r, e := syscall.write(fd, &b[0], int64(len(s))); // BUG: should be able to just return
return r, e
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment