mirror of
https://github.com/golang/go
synced 2024-11-19 02:04:42 -07:00
rudimentary beginnings of soon-to-be-real os library
R=gri DELTA=76 (76 added, 0 deleted, 0 changed) OCL=15086 CL=15088
This commit is contained in:
parent
ae4123f56b
commit
795004c6b5
28
src/lib/os/Makefile
Normal file
28
src/lib/os/Makefile
Normal file
@ -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) $<
|
18
src/lib/os/os.go
Normal file
18
src/lib/os/os.go
Normal file
@ -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
|
||||||
|
}
|
42
src/lib/os/os_file.go
Normal file
42
src/lib/os/os_file.go
Normal file
@ -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
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user