]> Cypherpunks repositories - gostls13.git/commitdiff
rudimentary beginnings of soon-to-be-real os library
authorRob Pike <r@golang.org>
Wed, 10 Sep 2008 19:14:39 +0000 (12:14 -0700)
committerRob Pike <r@golang.org>
Wed, 10 Sep 2008 19:14:39 +0000 (12:14 -0700)
R=gri
DELTA=76  (76 added, 0 deleted, 0 changed)
OCL=15086
CL=15088

src/lib/os/Makefile [new file with mode: 0644]
src/lib/os/os.go [new file with mode: 0644]
src/lib/os/os_file.go [new file with mode: 0644]

diff --git a/src/lib/os/Makefile b/src/lib/os/Makefile
new file mode 100644 (file)
index 0000000..1196cf7
--- /dev/null
@@ -0,0 +1,28 @@
+# 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) $<
diff --git a/src/lib/os/os.go b/src/lib/os/os.go
new file mode 100644 (file)
index 0000000..0759a09
--- /dev/null
@@ -0,0 +1,18 @@
+// 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
+}
diff --git a/src/lib/os/os_file.go b/src/lib/os/os_file.go
new file mode 100644 (file)
index 0000000..8edb2d0
--- /dev/null
@@ -0,0 +1,42 @@
+// 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
+}
+