Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
G
go
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
go
Commits
1a91b9a8
Commit
1a91b9a8
authored
Jan 16, 2009
by
Rob Pike
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
casify syscall and sequelae
R=rsc DELTA=337 (0 added, 1 deleted, 336 changed) OCL=22950 CL=22950
parent
5d41f55a
Changes
21
Hide whitespace changes
Inline
Side-by-side
Showing
21 changed files
with
298 additions
and
299 deletions
+298
-299
doc/progs/fd.go
doc/progs/fd.go
+4
-4
src/lib/net/dialgoogle_test.go
src/lib/net/dialgoogle_test.go
+12
-12
src/lib/net/fd.go
src/lib/net/fd.go
+5
-5
src/lib/net/fd_darwin.go
src/lib/net/fd_darwin.go
+16
-16
src/lib/net/net.go
src/lib/net/net.go
+13
-13
src/lib/net/net_darwin.go
src/lib/net/net_darwin.go
+15
-15
src/lib/net/parse_test.go
src/lib/net/parse_test.go
+1
-1
src/lib/os/os_error.go
src/lib/os/os_error.go
+8
-9
src/lib/os/os_file.go
src/lib/os/os_file.go
+7
-7
src/lib/os/os_time.go
src/lib/os/os_time.go
+1
-1
src/lib/syscall/errstr_darwin.go
src/lib/syscall/errstr_darwin.go
+1
-1
src/lib/syscall/errstr_linux.go
src/lib/syscall/errstr_linux.go
+1
-1
src/lib/syscall/file_darwin.go
src/lib/syscall/file_darwin.go
+19
-19
src/lib/syscall/file_linux.go
src/lib/syscall/file_linux.go
+19
-19
src/lib/syscall/socket_darwin.go
src/lib/syscall/socket_darwin.go
+23
-23
src/lib/syscall/socket_linux.go
src/lib/syscall/socket_linux.go
+25
-25
src/lib/syscall/time_amd64_darwin.go
src/lib/syscall/time_amd64_darwin.go
+4
-4
src/lib/syscall/time_amd64_linux.go
src/lib/syscall/time_amd64_linux.go
+5
-5
src/lib/syscall/types_amd64_darwin.go
src/lib/syscall/types_amd64_darwin.go
+66
-66
src/lib/syscall/types_amd64_linux.go
src/lib/syscall/types_amd64_linux.go
+52
-52
src/lib/time/tick.go
src/lib/time/tick.go
+1
-1
No files found.
doc/progs/fd.go
View file @
1a91b9a8
...
...
@@ -28,7 +28,7 @@ export var (
)
export
func
Open
(
name
string
,
mode
int64
,
perm
int64
)
(
fd
*
FD
,
err
*
os
.
Error
)
{
r
,
e
:=
syscall
.
o
pen
(
name
,
mode
,
perm
);
r
,
e
:=
syscall
.
O
pen
(
name
,
mode
,
perm
);
return
newFD
(
r
,
name
),
os
.
ErrnoToError
(
e
)
}
...
...
@@ -36,7 +36,7 @@ func (fd *FD) Close() *os.Error {
if
fd
==
nil
{
return
os
.
EINVAL
}
r
,
e
:=
syscall
.
c
lose
(
fd
.
fildes
);
r
,
e
:=
syscall
.
C
lose
(
fd
.
fildes
);
fd
.
fildes
=
-
1
;
// so it can't be closed again
return
nil
}
...
...
@@ -45,7 +45,7 @@ func (fd *FD) Read(b []byte) (ret int, err *os.Error) {
if
fd
==
nil
{
return
-
1
,
os
.
EINVAL
}
r
,
e
:=
syscall
.
r
ead
(
fd
.
fildes
,
&
b
[
0
],
int64
(
len
(
b
)));
r
,
e
:=
syscall
.
R
ead
(
fd
.
fildes
,
&
b
[
0
],
int64
(
len
(
b
)));
return
int
(
r
),
os
.
ErrnoToError
(
e
)
}
...
...
@@ -53,7 +53,7 @@ func (fd *FD) Write(b []byte) (ret int, err *os.Error) {
if
fd
==
nil
{
return
-
1
,
os
.
EINVAL
}
r
,
e
:=
syscall
.
w
rite
(
fd
.
fildes
,
&
b
[
0
],
int64
(
len
(
b
)));
r
,
e
:=
syscall
.
W
rite
(
fd
.
fildes
,
&
b
[
0
],
int64
(
len
(
b
)));
return
int
(
r
),
os
.
ErrnoToError
(
e
)
}
...
...
src/lib/net/dialgoogle_test.go
View file @
1a91b9a8
...
...
@@ -17,7 +17,7 @@ var ipv6 = flag.Bool("ipv6", false, "assume ipv6 tunnel is present")
// fd is already connected to www.google.com port 80.
// Run an HTTP request to fetch the main page.
func
F
etchGoogle
(
t
*
testing
.
T
,
fd
net
.
Conn
,
network
,
addr
string
)
{
func
f
etchGoogle
(
t
*
testing
.
T
,
fd
net
.
Conn
,
network
,
addr
string
)
{
req
:=
io
.
StringBytes
(
"GET / HTTP/1.0
\r\n
Host: www.google.com
\r\n\r\n
"
);
n
,
errno
:=
fd
.
Write
(
req
);
...
...
@@ -25,27 +25,27 @@ func FetchGoogle(t *testing.T, fd net.Conn, network, addr string) {
n
,
errno
=
io
.
Readn
(
fd
,
buf
);
if
n
<
1000
{
t
.
Errorf
(
"
F
etchGoogle: short HTTP read from %s %s"
,
network
,
addr
);
t
.
Errorf
(
"
f
etchGoogle: short HTTP read from %s %s"
,
network
,
addr
);
return
}
}
func
D
oDial
(
t
*
testing
.
T
,
network
,
addr
string
)
{
func
d
oDial
(
t
*
testing
.
T
,
network
,
addr
string
)
{
fd
,
err
:=
net
.
Dial
(
network
,
""
,
addr
);
if
err
!=
nil
{
t
.
Errorf
(
"net.Dial(%q, %q, %q) = _, %v"
,
network
,
""
,
addr
,
err
);
return
}
F
etchGoogle
(
t
,
fd
,
network
,
addr
);
f
etchGoogle
(
t
,
fd
,
network
,
addr
);
fd
.
Close
()
}
func
D
oDialTCP
(
t
*
testing
.
T
,
network
,
addr
string
)
{
func
d
oDialTCP
(
t
*
testing
.
T
,
network
,
addr
string
)
{
fd
,
err
:=
net
.
DialTCP
(
network
,
""
,
addr
);
if
err
!=
nil
{
t
.
Errorf
(
"net.DialTCP(%q, %q, %q) = _, %v"
,
network
,
""
,
addr
,
err
);
}
else
{
F
etchGoogle
(
t
,
fd
,
network
,
addr
);
f
etchGoogle
(
t
,
fd
,
network
,
addr
);
}
fd
.
Close
()
}
...
...
@@ -76,13 +76,13 @@ export func TestDialGoogle(t *testing.T) {
continue
}
t
.
Logf
(
"-- %s --"
,
addr
);
D
oDial
(
t
,
"tcp"
,
addr
);
D
oDialTCP
(
t
,
"tcp"
,
addr
);
d
oDial
(
t
,
"tcp"
,
addr
);
d
oDialTCP
(
t
,
"tcp"
,
addr
);
if
addr
[
0
]
!=
'['
{
D
oDial
(
t
,
"tcp4"
,
addr
);
D
oDialTCP
(
t
,
"tcp4"
,
addr
)
d
oDial
(
t
,
"tcp4"
,
addr
);
d
oDialTCP
(
t
,
"tcp4"
,
addr
)
}
D
oDial
(
t
,
"tcp6"
,
addr
);
D
oDialTCP
(
t
,
"tcp6"
,
addr
)
d
oDial
(
t
,
"tcp6"
,
addr
);
d
oDialTCP
(
t
,
"tcp6"
,
addr
)
}
}
src/lib/net/fd.go
View file @
1a91b9a8
...
...
@@ -28,11 +28,11 @@ export type FD struct {
// Make reads and writes on fd return EAGAIN instead of blocking.
func
_SetNonblock
(
fd
int64
)
*
os
.
Error
{
flags
,
e
:=
syscall
.
f
cntl
(
fd
,
syscall
.
F_GETFL
,
0
);
flags
,
e
:=
syscall
.
F
cntl
(
fd
,
syscall
.
F_GETFL
,
0
);
if
e
!=
0
{
return
os
.
ErrnoToError
(
e
)
}
flags
,
e
=
syscall
.
f
cntl
(
fd
,
syscall
.
F_SETFL
,
flags
|
syscall
.
O_NONBLOCK
);
flags
,
e
=
syscall
.
F
cntl
(
fd
,
syscall
.
F_SETFL
,
flags
|
syscall
.
O_NONBLOCK
);
if
e
!=
0
{
return
os
.
ErrnoToError
(
e
)
}
...
...
@@ -272,16 +272,16 @@ func (fd *FD) Accept(sa *syscall.Sockaddr) (nfd *FD, err *os.Error) {
if
fd
==
nil
||
fd
.
osfd
==
nil
{
return
nil
,
os
.
EINVAL
}
s
,
e
:=
syscall
.
a
ccept
(
fd
.
fd
,
sa
);
s
,
e
:=
syscall
.
A
ccept
(
fd
.
fd
,
sa
);
for
e
==
syscall
.
EAGAIN
{
pollserver
.
WaitRead
(
fd
);
s
,
e
=
syscall
.
a
ccept
(
fd
.
fd
,
sa
)
s
,
e
=
syscall
.
A
ccept
(
fd
.
fd
,
sa
)
}
if
e
!=
0
{
return
nil
,
os
.
ErrnoToError
(
e
)
}
if
nfd
,
err
=
NewFD
(
s
);
err
!=
nil
{
syscall
.
c
lose
(
s
);
syscall
.
C
lose
(
s
);
return
nil
,
err
}
return
nfd
,
nil
...
...
src/lib/net/fd_darwin.go
View file @
1a91b9a8
...
...
@@ -14,14 +14,14 @@ import (
export
type
Pollster
struct
{
kq
int64
;
eventbuf
[
10
]
syscall
.
Kevent
;
events
[]
syscall
.
Kevent
;
eventbuf
[
10
]
syscall
.
Kevent
_t
;
events
[]
syscall
.
Kevent
_t
;
}
export
func
NewPollster
()
(
p
*
Pollster
,
err
*
os
.
Error
)
{
p
=
new
(
Pollster
);
var
e
int64
;
if
p
.
kq
,
e
=
syscall
.
k
queue
();
e
!=
0
{
if
p
.
kq
,
e
=
syscall
.
K
queue
();
e
!=
0
{
return
nil
,
os
.
ErrnoToError
(
e
)
}
p
.
events
=
p
.
eventbuf
[
0
:
0
];
...
...
@@ -35,36 +35,36 @@ func (p *Pollster) AddFD(fd int64, mode int, repeat bool) *os.Error {
}
else
{
kmode
=
syscall
.
EVFILT_WRITE
}
var
events
[
1
]
syscall
.
Kevent
;
var
events
[
1
]
syscall
.
Kevent
_t
;
ev
:=
&
events
[
0
];
ev
.
i
dent
=
fd
;
ev
.
f
ilter
=
kmode
;
ev
.
I
dent
=
fd
;
ev
.
F
ilter
=
kmode
;
// EV_ADD - add event to kqueue list
// EV_RECEIPT - generate fake EV_ERROR as result of add,
// rather than waiting for real event
// EV_ONESHOT - delete the event the first time it triggers
ev
.
f
lags
=
syscall
.
EV_ADD
|
syscall
.
EV_RECEIPT
;
ev
.
F
lags
=
syscall
.
EV_ADD
|
syscall
.
EV_RECEIPT
;
if
!
repeat
{
ev
.
f
lags
|=
syscall
.
EV_ONESHOT
ev
.
F
lags
|=
syscall
.
EV_ONESHOT
}
n
,
e
:=
syscall
.
k
event
(
p
.
kq
,
events
,
events
,
nil
);
n
,
e
:=
syscall
.
K
event
(
p
.
kq
,
events
,
events
,
nil
);
if
e
!=
0
{
return
os
.
ErrnoToError
(
e
)
}
if
n
!=
1
||
(
ev
.
flags
&
syscall
.
EV_ERROR
)
==
0
||
ev
.
ident
!=
fd
||
ev
.
f
ilter
!=
kmode
{
if
n
!=
1
||
(
ev
.
Flags
&
syscall
.
EV_ERROR
)
==
0
||
ev
.
Ident
!=
fd
||
ev
.
F
ilter
!=
kmode
{
return
os
.
NewError
(
"kqueue phase error"
)
}
if
ev
.
d
ata
!=
0
{
return
os
.
ErrnoToError
(
ev
.
d
ata
)
if
ev
.
D
ata
!=
0
{
return
os
.
ErrnoToError
(
ev
.
D
ata
)
}
return
nil
}
func
(
p
*
Pollster
)
WaitFD
()
(
fd
int64
,
mode
int
,
err
*
os
.
Error
)
{
for
len
(
p
.
events
)
==
0
{
nn
,
e
:=
syscall
.
k
event
(
p
.
kq
,
nil
,
p
.
eventbuf
,
nil
);
nn
,
e
:=
syscall
.
K
event
(
p
.
kq
,
nil
,
p
.
eventbuf
,
nil
);
if
e
!=
0
{
if
e
==
syscall
.
EAGAIN
||
e
==
syscall
.
EINTR
{
continue
...
...
@@ -75,8 +75,8 @@ func (p *Pollster) WaitFD() (fd int64, mode int, err *os.Error) {
}
ev
:=
&
p
.
events
[
0
];
p
.
events
=
p
.
events
[
1
:
len
(
p
.
events
)];
fd
=
ev
.
i
dent
;
if
ev
.
f
ilter
==
syscall
.
EVFILT_READ
{
fd
=
ev
.
I
dent
;
if
ev
.
F
ilter
==
syscall
.
EVFILT_READ
{
mode
=
'r'
}
else
{
mode
=
'w'
...
...
@@ -85,6 +85,6 @@ func (p *Pollster) WaitFD() (fd int64, mode int, err *os.Error) {
}
func
(
p
*
Pollster
)
Close
()
*
os
.
Error
{
r
,
e
:=
syscall
.
c
lose
(
p
.
kq
);
r
,
e
:=
syscall
.
C
lose
(
p
.
kq
);
return
os
.
ErrnoToError
(
e
)
}
src/lib/net/net.go
View file @
1a91b9a8
...
...
@@ -117,7 +117,7 @@ func _HostPortToIP(net, hostport, mode string) (ip []byte, iport int, err *os.Er
// Convert socket address into "host:port".
func
_SockaddrToHostPort
(
sa
*
syscall
.
Sockaddr
)
(
hostport
string
,
err
*
os
.
Error
)
{
switch
sa
.
f
amily
{
switch
sa
.
F
amily
{
case
syscall
.
AF_INET
,
syscall
.
AF_INET6
:
addr
,
port
,
e
:=
SockaddrToIP
(
sa
);
if
e
!=
nil
{
...
...
@@ -141,34 +141,34 @@ func boolint(b bool) int {
// Generic _Socket creation.
func
_Socket
(
f
,
p
,
t
int64
,
la
,
ra
*
syscall
.
Sockaddr
)
(
fd
*
FD
,
err
*
os
.
Error
)
{
s
,
e
:=
syscall
.
s
ocket
(
f
,
p
,
t
);
s
,
e
:=
syscall
.
S
ocket
(
f
,
p
,
t
);
if
e
!=
0
{
return
nil
,
os
.
ErrnoToError
(
e
)
}
// Allow reuse of recently-used addresses.
syscall
.
s
etsockopt_int
(
s
,
syscall
.
SOL_SOCKET
,
syscall
.
SO_REUSEADDR
,
1
);
syscall
.
S
etsockopt_int
(
s
,
syscall
.
SOL_SOCKET
,
syscall
.
SO_REUSEADDR
,
1
);
var
r
int64
;
if
la
!=
nil
{
r
,
e
=
syscall
.
b
ind
(
s
,
la
);
r
,
e
=
syscall
.
B
ind
(
s
,
la
);
if
e
!=
0
{
syscall
.
c
lose
(
s
);
syscall
.
C
lose
(
s
);
return
nil
,
os
.
ErrnoToError
(
e
)
}
}
if
ra
!=
nil
{
r
,
e
=
syscall
.
c
onnect
(
s
,
ra
);
r
,
e
=
syscall
.
C
onnect
(
s
,
ra
);
if
e
!=
0
{
syscall
.
c
lose
(
s
);
syscall
.
C
lose
(
s
);
return
nil
,
os
.
ErrnoToError
(
e
)
}
}
fd
,
err
=
NewFD
(
s
);
if
err
!=
nil
{
syscall
.
c
lose
(
s
);
syscall
.
C
lose
(
s
);
return
nil
,
err
}
...
...
@@ -227,11 +227,11 @@ func (c *_ConnBase) Close() *os.Error {
func
setsockopt_int
(
fd
,
level
,
opt
int64
,
value
int
)
*
os
.
Error
{
return
os
.
ErrnoToError
(
syscall
.
s
etsockopt_int
(
fd
,
level
,
opt
,
value
));
return
os
.
ErrnoToError
(
syscall
.
S
etsockopt_int
(
fd
,
level
,
opt
,
value
));
}
func
setsockopt_tv
(
fd
,
level
,
opt
int64
,
nsec
int64
)
*
os
.
Error
{
return
os
.
ErrnoToError
(
syscall
.
s
etsockopt_tv
(
fd
,
level
,
opt
,
nsec
));
return
os
.
ErrnoToError
(
syscall
.
S
etsockopt_tv
(
fd
,
level
,
opt
,
nsec
));
}
func
(
c
*
_ConnBase
)
SetReadBuffer
(
bytes
int
)
*
os
.
Error
{
...
...
@@ -275,7 +275,7 @@ func (c *_ConnBase) SetKeepAlive(keepalive bool) *os.Error {
}
func
(
c
*
_ConnBase
)
SetLinger
(
sec
int
)
*
os
.
Error
{
e
:=
syscall
.
s
etsockopt_linger
(
c
.
FD
(),
syscall
.
SOL_SOCKET
,
syscall
.
SO_LINGER
,
sec
);
e
:=
syscall
.
S
etsockopt_linger
(
c
.
FD
(),
syscall
.
SOL_SOCKET
,
syscall
.
SO_LINGER
,
sec
);
return
os
.
ErrnoToError
(
e
);
}
...
...
@@ -492,9 +492,9 @@ export func ListenTCP(net, laddr string) (l *ListenerTCP, err *os.Error) {
if
e
!=
nil
{
return
nil
,
e
}
r
,
e1
:=
syscall
.
l
isten
(
fd
.
fd
,
ListenBacklog
());
r
,
e1
:=
syscall
.
L
isten
(
fd
.
fd
,
ListenBacklog
());
if
e1
!=
0
{
syscall
.
c
lose
(
fd
.
fd
);
syscall
.
C
lose
(
fd
.
fd
);
return
nil
,
os
.
ErrnoToError
(
e1
)
}
l
=
new
(
ListenerTCP
);
...
...
src/lib/net/net_darwin.go
View file @
1a91b9a8
...
...
@@ -17,12 +17,12 @@ export func IPv4ToSockaddr(p []byte, port int) (sa1 *syscall.Sockaddr, err *os.E
return
nil
,
os
.
EINVAL
}
sa
:=
new
(
syscall
.
SockaddrInet4
);
sa
.
l
en
=
syscall
.
SizeofSockaddrInet4
;
sa
.
f
amily
=
syscall
.
AF_INET
;
sa
.
p
ort
[
0
]
=
byte
(
port
>>
8
);
sa
.
p
ort
[
1
]
=
byte
(
port
);
sa
.
L
en
=
syscall
.
SizeofSockaddrInet4
;
sa
.
F
amily
=
syscall
.
AF_INET
;
sa
.
P
ort
[
0
]
=
byte
(
port
>>
8
);
sa
.
P
ort
[
1
]
=
byte
(
port
);
for
i
:=
0
;
i
<
IPv4len
;
i
++
{
sa
.
a
ddr
[
i
]
=
p
[
i
]
sa
.
A
ddr
[
i
]
=
p
[
i
]
}
return
unsafe
.
pointer
(
sa
)
.
(
*
syscall
.
Sockaddr
),
nil
}
...
...
@@ -33,33 +33,33 @@ export func IPv6ToSockaddr(p []byte, port int) (sa1 *syscall.Sockaddr, err *os.E
return
nil
,
os
.
EINVAL
}
sa
:=
new
(
syscall
.
SockaddrInet6
);
sa
.
l
en
=
syscall
.
SizeofSockaddrInet6
;
sa
.
f
amily
=
syscall
.
AF_INET6
;
sa
.
p
ort
[
0
]
=
byte
(
port
>>
8
);
sa
.
p
ort
[
1
]
=
byte
(
port
);
sa
.
L
en
=
syscall
.
SizeofSockaddrInet6
;
sa
.
F
amily
=
syscall
.
AF_INET6
;
sa
.
P
ort
[
0
]
=
byte
(
port
>>
8
);
sa
.
P
ort
[
1
]
=
byte
(
port
);
for
i
:=
0
;
i
<
IPv6len
;
i
++
{
sa
.
a
ddr
[
i
]
=
p
[
i
]
sa
.
A
ddr
[
i
]
=
p
[
i
]
}
return
unsafe
.
pointer
(
sa
)
.
(
*
syscall
.
Sockaddr
),
nil
}
export
func
SockaddrToIP
(
sa1
*
syscall
.
Sockaddr
)
(
p
[]
byte
,
port
int
,
err
*
os
.
Error
)
{
switch
sa1
.
f
amily
{
switch
sa1
.
F
amily
{
case
syscall
.
AF_INET
:
sa
:=
unsafe
.
pointer
(
sa1
)
.
(
*
syscall
.
SockaddrInet4
);
a
:=
ToIPv6
(
sa
.
a
ddr
);
a
:=
ToIPv6
(
sa
.
A
ddr
);
if
a
==
nil
{
return
nil
,
0
,
os
.
EINVAL
}
return
a
,
int
(
sa
.
port
[
0
])
<<
8
+
int
(
sa
.
p
ort
[
1
]),
nil
;
return
a
,
int
(
sa
.
Port
[
0
])
<<
8
+
int
(
sa
.
P
ort
[
1
]),
nil
;
case
syscall
.
AF_INET6
:
sa
:=
unsafe
.
pointer
(
sa1
)
.
(
*
syscall
.
SockaddrInet6
);
a
:=
ToIPv6
(
sa
.
a
ddr
);
a
:=
ToIPv6
(
sa
.
A
ddr
);
if
a
==
nil
{
return
nil
,
0
,
os
.
EINVAL
}
return
nil
,
int
(
sa
.
port
[
0
])
<<
8
+
int
(
sa
.
p
ort
[
1
]),
nil
;
return
nil
,
int
(
sa
.
Port
[
0
])
<<
8
+
int
(
sa
.
P
ort
[
1
]),
nil
;
default
:
return
nil
,
0
,
os
.
EINVAL
}
...
...
src/lib/net/parse_test.go
View file @
1a91b9a8
...
...
@@ -14,7 +14,7 @@ import (
export
func
TestReadLine
(
t
*
testing
.
T
)
{
filename
:=
"/etc/services"
;
// a nice big file
fd
,
err
:=
os
.
_
Open
(
filename
,
os
.
O_RDONLY
,
0
);
fd
,
err
:=
os
.
Open
(
filename
,
os
.
O_RDONLY
,
0
);
if
err
!=
nil
{
t
.
Fatalf
(
"open %s: %v"
,
filename
,
err
);
}
...
...
src/lib/os/os_error.go
View file @
1a91b9a8
...
...
@@ -15,11 +15,11 @@ export type Error struct {
// Indexed by errno.
// If we worry about syscall speed (only relevant on failure), we could
// make it an array, but it's probably not important.
var
E
rrorTab
=
make
(
map
[
int64
]
*
Error
);
var
e
rrorTab
=
make
(
map
[
int64
]
*
Error
);
// Table of all known errors in system. Use the same error string twice,
// get the same *os.Error.
var
E
rrorStringTab
=
make
(
map
[
string
]
*
Error
);
var
e
rrorStringTab
=
make
(
map
[
string
]
*
Error
);
// These functions contain a race if two goroutines add identical
// errors simultaneously but the consequences are unimportant.
...
...
@@ -29,12 +29,12 @@ export func NewError(s string) *Error {
if
s
==
""
{
return
nil
}
err
,
ok
:=
E
rrorStringTab
[
s
];
err
,
ok
:=
e
rrorStringTab
[
s
];
if
ok
{
return
err
}
err
=
&
Error
{
s
};
E
rrorStringTab
[
s
]
=
err
;
e
rrorStringTab
[
s
]
=
err
;
return
err
;
}
...
...
@@ -44,12 +44,12 @@ export func ErrnoToError(errno int64) *Error {
return
nil
}
// Quick lookup by errno.
err
,
ok
:=
E
rrorTab
[
errno
];
err
,
ok
:=
e
rrorTab
[
errno
];
if
ok
{
return
err
}
err
=
NewError
(
syscall
.
e
rrstr
(
errno
));
E
rrorTab
[
errno
]
=
err
;
err
=
NewError
(
syscall
.
E
rrstr
(
errno
));
e
rrorTab
[
errno
]
=
err
;
return
err
;
}
...
...
@@ -91,11 +91,10 @@ export var (
ERANGE
=
ErrnoToError
(
syscall
.
ERANGE
);
EAGAIN
=
ErrnoToError
(
syscall
.
EAGAIN
);
)
const
NoError
=
"No Error"
func
(
e
*
Error
)
String
()
string
{
if
e
==
nil
{
return
NoError
return
"No Error"
}
return
e
.
s
}
src/lib/os/os_file.go
View file @
1a91b9a8
...
...
@@ -40,7 +40,7 @@ export const (
)
export
func
Open
(
name
string
,
mode
int
,
flags
int
)
(
fd
*
FD
,
err
*
Error
)
{
r
,
e
:=
syscall
.
o
pen
(
name
,
int64
(
mode
),
int64
(
flags
));
r
,
e
:=
syscall
.
O
pen
(
name
,
int64
(
mode
),
int64
(
flags
));
return
NewFD
(
r
),
ErrnoToError
(
e
)
}
...
...
@@ -48,7 +48,7 @@ func (fd *FD) Close() *Error {
if
fd
==
nil
{
return
EINVAL
}
r
,
e
:=
syscall
.
c
lose
(
fd
.
fd
);
r
,
e
:=
syscall
.
C
lose
(
fd
.
fd
);
fd
.
fd
=
-
1
;
// so it can't be closed again
return
ErrnoToError
(
e
)
}
...
...
@@ -59,7 +59,7 @@ func (fd *FD) Read(b []byte) (ret int, err *Error) {
}
var
r
,
e
int64
;
if
len
(
b
)
>
0
{
// because we access b[0]
r
,
e
=
syscall
.
r
ead
(
fd
.
fd
,
&
b
[
0
],
int64
(
len
(
b
)));
r
,
e
=
syscall
.
R
ead
(
fd
.
fd
,
&
b
[
0
],
int64
(
len
(
b
)));
if
r
<
0
{
r
=
0
}
...
...
@@ -73,7 +73,7 @@ func (fd *FD) Write(b []byte) (ret int, err *Error) {
}
var
r
,
e
int64
;
if
len
(
b
)
>
0
{
// because we access b[0]
r
,
e
=
syscall
.
w
rite
(
fd
.
fd
,
&
b
[
0
],
int64
(
len
(
b
)));
r
,
e
=
syscall
.
W
rite
(
fd
.
fd
,
&
b
[
0
],
int64
(
len
(
b
)));
if
r
<
0
{
r
=
0
}
...
...
@@ -89,7 +89,7 @@ func (fd *FD) WriteString(s string) (ret int, err *Error) {
if
!
syscall
.
StringToBytes
(
b
,
s
)
{
return
0
,
EINVAL
}
r
,
e
:=
syscall
.
w
rite
(
fd
.
fd
,
&
b
[
0
],
int64
(
len
(
s
)));
r
,
e
:=
syscall
.
W
rite
(
fd
.
fd
,
&
b
[
0
],
int64
(
len
(
s
)));
if
r
<
0
{
r
=
0
}
...
...
@@ -98,7 +98,7 @@ func (fd *FD) WriteString(s string) (ret int, err *Error) {
export
func
Pipe
()
(
fd1
*
FD
,
fd2
*
FD
,
err
*
Error
)
{
var
p
[
2
]
int64
;
r
,
e
:=
syscall
.
p
ipe
(
&
p
);
r
,
e
:=
syscall
.
P
ipe
(
&
p
);
if
e
!=
0
{
return
nil
,
nil
,
ErrnoToError
(
e
)
}
...
...
@@ -106,6 +106,6 @@ export func Pipe() (fd1 *FD, fd2 *FD, err *Error) {
}
export
func
Mkdir
(
name
string
,
perm
int
)
*
Error
{
r
,
e
:=
syscall
.
m
kdir
(
name
,
int64
(
perm
));
r
,
e
:=
syscall
.
M
kdir
(
name
,
int64
(
perm
));
return
ErrnoToError
(
e
)
}
src/lib/os/os_time.go
View file @
1a91b9a8
...
...
@@ -11,7 +11,7 @@ import (
export
func
Time
()
(
sec
int64
,
nsec
int64
,
err
*
Error
)
{
var
errno
int64
;
sec
,
nsec
,
errno
=
syscall
.
g
ettimeofday
();
sec
,
nsec
,
errno
=
syscall
.
G
ettimeofday
();
if
errno
!=
0
{
return
0
,
0
,
ErrnoToError
(
errno
)
}
...
...
src/lib/syscall/errstr_darwin.go
View file @
1a91b9a8
...
...
@@ -234,7 +234,7 @@ func str(val int64) string { // do it here rather than with fmt to avoid depend
return
string
(
buf
)[
i
:
len
(
buf
)];
}
export
func
e
rrstr
(
errno
int64
)
string
{
export
func
E
rrstr
(
errno
int64
)
string
{
if
errno
<
0
||
errno
>=
len
(
error
)
{
return
"Error "
+
str
(
errno
)
}
...
...
src/lib/syscall/errstr_linux.go
View file @
1a91b9a8
...
...
@@ -284,7 +284,7 @@ func str(val int64) string { // do it here rather than with fmt to avoid depend
return
string
(
buf
)[
i
:
len
(
buf
)];
}
export
func
e
rrstr
(
errno
int64
)
string
{
export
func
E
rrstr
(
errno
int64
)
string
{
if
errno
<
0
||
errno
>=
len
(
error
)
{
return
"Error "
+
str
(
errno
)
}
...
...
src/lib/syscall/file_darwin.go
View file @
1a91b9a8
...
...
@@ -11,10 +11,10 @@ import (
"unsafe"
;
)
const
N
ameBufsize
=
512
const
n
ameBufsize
=
512
export
func
o
pen
(
name
string
,
mode
int64
,
perm
int64
)
(
ret
int64
,
errno
int64
)
{
var
namebuf
[
N
ameBufsize
]
byte
;
export
func
O
pen
(
name
string
,
mode
int64
,
perm
int64
)
(
ret
int64
,
errno
int64
)
{
var
namebuf
[
n
ameBufsize
]
byte
;
if
!
StringToBytes
(
namebuf
,
name
)
{
return
-
1
,
ENAMETOOLONG
}
...
...
@@ -22,8 +22,8 @@ export func open(name string, mode int64, perm int64) (ret int64, errno int64) {
return
r1
,
err
;
}
export
func
c
reat
(
name
string
,
perm
int64
)
(
ret
int64
,
errno
int64
)
{
var
namebuf
[
N
ameBufsize
]
byte
;
export
func
C
reat
(
name
string
,
perm
int64
)
(
ret
int64
,
errno
int64
)
{
var
namebuf
[
n
ameBufsize
]
byte
;
if
!
StringToBytes
(
namebuf
,
name
)
{
return
-
1
,
ENAMETOOLONG
}
...
...
@@ -31,22 +31,22 @@ export func creat(name string, perm int64) (ret int64, errno int64) {
return
r1
,
err
;
}
export
func
c
lose
(
fd
int64
)
(
ret
int64
,
errno
int64
)
{
export
func
C
lose
(
fd
int64
)
(
ret
int64
,
errno
int64
)
{
r1
,
r2
,
err
:=
Syscall
(
SYS_CLOSE
,
fd
,
0
,
0
);
return
r1
,
err
;
}
export
func
r
ead
(
fd
int64
,
buf
*
byte
,
nbytes
int64
)
(
ret
int64
,
errno
int64
)
{
export
func
R
ead
(
fd
int64
,
buf
*
byte
,
nbytes
int64
)
(
ret
int64
,
errno
int64
)
{
r1
,
r2
,
err
:=
Syscall
(
SYS_READ
,
fd
,
int64
(
uintptr
(
unsafe
.
pointer
(
buf
))),
nbytes
);
return
r1
,
err
;
}
export
func
w
rite
(
fd
int64
,
buf
*
byte
,
nbytes
int64
)
(
ret
int64
,
errno
int64
)
{
export
func
W
rite
(
fd
int64
,
buf
*
byte
,
nbytes
int64
)
(
ret
int64
,
errno
int64
)
{
r1
,
r2
,
err
:=
Syscall
(
SYS_WRITE
,
fd
,
int64
(
uintptr
(
unsafe
.
pointer
(
buf
))),
nbytes
);
return
r1
,
err
;
}
export
func
p
ipe
(
fds
*
[
2
]
int64
)
(
ret
int64
,
errno
int64
)
{
export
func
P
ipe
(
fds
*
[
2
]
int64
)
(
ret
int64
,
errno
int64
)
{
r1
,
r2
,
err
:=
Syscall
(
SYS_PIPE
,
0
,
0
,
0
);
if
r1
<
0
{
return
r1
,
err
;
...
...
@@ -56,8 +56,8 @@ export func pipe(fds *[2]int64) (ret int64, errno int64) {
return
0
,
0
;
}
export
func
stat
(
name
string
,
buf
*
Sta
t
)
(
ret
int64
,
errno
int64
)
{
var
namebuf
[
N
ameBufsize
]
byte
;
export
func
Stat
(
name
string
,
buf
*
Stat_
t
)
(
ret
int64
,
errno
int64
)
{
var
namebuf
[
n
ameBufsize
]
byte
;
if
!
StringToBytes
(
namebuf
,
name
)
{
return
-
1
,
ENAMETOOLONG
}
...
...
@@ -65,18 +65,18 @@ export func stat(name string, buf *Stat) (ret int64, errno int64) {
return
r1
,
err
;
}
export
func
lstat
(
name
*
byte
,
buf
*
Sta
t
)
(
ret
int64
,
errno
int64
)
{
export
func
Lstat
(
name
*
byte
,
buf
*
Stat_
t
)
(
ret
int64
,
errno
int64
)
{
r1
,
r2
,
err
:=
Syscall
(
SYS_LSTAT
,
int64
(
uintptr
(
unsafe
.
pointer
(
name
))),
int64
(
uintptr
(
unsafe
.
pointer
(
buf
))),
0
);
return
r1
,
err
;
}
export
func
fstat
(
fd
int64
,
buf
*
Sta
t
)
(
ret
int64
,
errno
int64
)
{
export
func
Fstat
(
fd
int64
,
buf
*
Stat_
t
)
(
ret
int64
,
errno
int64
)
{
r1
,
r2
,
err
:=
Syscall
(
SYS_FSTAT
,
fd
,
int64
(
uintptr
(
unsafe
.
pointer
(
buf
))),
0
);
return
r1
,
err
;
}
export
func
u
nlink
(
name
string
)
(
ret
int64
,
errno
int64
)
{
var
namebuf
[
N
ameBufsize
]
byte
;
export
func
U
nlink
(
name
string
)
(
ret
int64
,
errno
int64
)
{
var
namebuf
[
n
ameBufsize
]
byte
;
if
!
StringToBytes
(
namebuf
,
name
)
{
return
-
1
,
ENAMETOOLONG
}
...
...
@@ -84,13 +84,13 @@ export func unlink(name string) (ret int64, errno int64) {
return
r1
,
err
;
}
export
func
f
cntl
(
fd
,
cmd
,
arg
int64
)
(
ret
int64
,
errno
int64
)
{
export
func
F
cntl
(
fd
,
cmd
,
arg
int64
)
(
ret
int64
,
errno
int64
)
{
r1
,
r2
,
err
:=
Syscall
(
SYS_FCNTL
,
fd
,
cmd
,
arg
);
return
r1
,
err
}
export
func
m
kdir
(
name
string
,
perm
int64
)
(
ret
int64
,
errno
int64
)
{
var
namebuf
[
N
ameBufsize
]
byte
;
export
func
M
kdir
(
name
string
,
perm
int64
)
(
ret
int64
,
errno
int64
)
{
var
namebuf
[
n
ameBufsize
]
byte
;
if
!
StringToBytes
(
namebuf
,
name
)
{
return
-
1
,
ENAMETOOLONG
}
...
...
@@ -98,7 +98,7 @@ export func mkdir(name string, perm int64) (ret int64, errno int64) {
return
r1
,
err
;
}
export
func
d
up2
(
fd1
,
fd2
int64
)
(
ret
int64
,
errno
int64
)
{
export
func
D
up2
(
fd1
,
fd2
int64
)
(
ret
int64
,
errno
int64
)
{
r1
,
r2
,
err
:=
Syscall
(
SYS_DUP2
,
fd1
,
fd2
,
0
);
return
r1
,
err
;
}
...
...
src/lib/syscall/file_linux.go
View file @
1a91b9a8
...
...
@@ -11,10 +11,10 @@ import (
"unsafe"
;
)
const
N
ameBufsize
=
512
const
n
ameBufsize
=
512
export
func
o
pen
(
name
string
,
mode
int64
,
perm
int64
)
(
ret
int64
,
errno
int64
)
{
var
namebuf
[
N
ameBufsize
]
byte
;
export
func
O
pen
(
name
string
,
mode
int64
,
perm
int64
)
(
ret
int64
,
errno
int64
)
{
var
namebuf
[
n
ameBufsize
]
byte
;
if
!
StringToBytes
(
namebuf
,
name
)
{
return
-
1
,
ENAMETOOLONG
}
...
...
@@ -22,8 +22,8 @@ export func open(name string, mode int64, perm int64) (ret int64, errno int64) {
return
r1
,
err
;
}
export
func
c
reat
(
name
string
,
perm
int64
)
(
ret
int64
,
errno
int64
)
{
var
namebuf
[
N
ameBufsize
]
byte
;
export
func
C
reat
(
name
string
,
perm
int64
)
(
ret
int64
,
errno
int64
)
{
var
namebuf
[
n
ameBufsize
]
byte
;
if
!
StringToBytes
(
namebuf
,
name
)
{
return
-
1
,
ENAMETOOLONG
}
...
...
@@ -31,22 +31,22 @@ export func creat(name string, perm int64) (ret int64, errno int64) {
return
r1
,
err
;
}
export
func
c
lose
(
fd
int64
)
(
ret
int64
,
errno
int64
)
{
export
func
C
lose
(
fd
int64
)
(
ret
int64
,
errno
int64
)
{
r1
,
r2
,
err
:=
Syscall
(
SYS_CLOSE
,
fd
,
0
,
0
);
return
r1
,
err
;
}
export
func
r
ead
(
fd
int64
,
buf
*
byte
,
nbytes
int64
)
(
ret
int64
,
errno
int64
)
{
export
func
R
ead
(
fd
int64
,
buf
*
byte
,
nbytes
int64
)
(
ret
int64
,
errno
int64
)
{
r1
,
r2
,
err
:=
Syscall
(
SYS_READ
,
fd
,
int64
(
uintptr
(
unsafe
.
pointer
(
buf
))),
nbytes
);
return
r1
,
err
;
}
export
func
w
rite
(
fd
int64
,
buf
*
byte
,
nbytes
int64
)
(
ret
int64
,
errno
int64
)
{
export
func
W
rite
(
fd
int64
,
buf
*
byte
,
nbytes
int64
)
(
ret
int64
,
errno
int64
)
{
r1
,
r2
,
err
:=
Syscall
(
SYS_WRITE
,
fd
,
int64
(
uintptr
(
unsafe
.
pointer
(
buf
))),
nbytes
);
return
r1
,
err
;
}
export
func
p
ipe
(
fds
*
[
2
]
int64
)
(
ret
int64
,
errno
int64
)
{
export
func
P
ipe
(
fds
*
[
2
]
int64
)
(
ret
int64
,
errno
int64
)
{
var
t
[
2
]
int32
;
r1
,
r2
,
err
:=
Syscall
(
SYS_PIPE
,
int64
(
uintptr
(
unsafe
.
pointer
(
&
t
[
0
]))),
0
,
0
);
if
r1
<
0
{
...
...
@@ -57,8 +57,8 @@ export func pipe(fds *[2]int64) (ret int64, errno int64) {
return
0
,
0
;
}
export
func
stat
(
name
string
,
buf
*
Sta
t
)
(
ret
int64
,
errno
int64
)
{
var
namebuf
[
N
ameBufsize
]
byte
;
export
func
Stat
(
name
string
,
buf
*
Stat_
t
)
(
ret
int64
,
errno
int64
)
{
var
namebuf
[
n
ameBufsize
]
byte
;
if
!
StringToBytes
(
namebuf
,
name
)
{
return
-
1
,
ENAMETOOLONG
}
...
...
@@ -66,18 +66,18 @@ export func stat(name string, buf *Stat) (ret int64, errno int64) {
return
r1
,
err
;
}
export
func
lstat
(
name
*
byte
,
buf
*
Sta
t
)
(
ret
int64
,
errno
int64
)
{
export
func
Lstat
(
name
*
byte
,
buf
*
Stat_
t
)
(
ret
int64
,
errno
int64
)
{
r1
,
r2
,
err
:=
Syscall
(
SYS_LSTAT
,
int64
(
uintptr
(
unsafe
.
pointer
(
name
))),
int64
(
uintptr
(
unsafe
.
pointer
(
buf
))),
0
);
return
r1
,
err
;
}
export
func
fstat
(
fd
int64
,
buf
*
Sta
t
)
(
ret
int64
,
errno
int64
)
{
export
func
Fstat
(
fd
int64
,
buf
*
Stat_
t
)
(
ret
int64
,
errno
int64
)
{
r1
,
r2
,
err
:=
Syscall
(
SYS_FSTAT
,
fd
,
int64
(
uintptr
(
unsafe
.
pointer
(
buf
))),
0
);
return
r1
,
err
;
}
export
func
u
nlink
(
name
string
)
(
ret
int64
,
errno
int64
)
{
var
namebuf
[
N
ameBufsize
]
byte
;
export
func
U
nlink
(
name
string
)
(
ret
int64
,
errno
int64
)
{
var
namebuf
[
n
ameBufsize
]
byte
;
if
!
StringToBytes
(
namebuf
,
name
)
{
return
-
1
,
ENAMETOOLONG
}
...
...
@@ -85,13 +85,13 @@ export func unlink(name string) (ret int64, errno int64) {
return
r1
,
err
;
}
export
func
f
cntl
(
fd
,
cmd
,
arg
int64
)
(
ret
int64
,
errno
int64
)
{
export
func
F
cntl
(
fd
,
cmd
,
arg
int64
)
(
ret
int64
,
errno
int64
)
{
r1
,
r2
,
err
:=
Syscall
(
SYS_FCNTL
,
fd
,
cmd
,
arg
);
return
r1
,
err
}
export
func
m
kdir
(
name
string
,
perm
int64
)
(
ret
int64
,
errno
int64
)
{
var
namebuf
[
N
ameBufsize
]
byte
;
export
func
M
kdir
(
name
string
,
perm
int64
)
(
ret
int64
,
errno
int64
)
{
var
namebuf
[
n
ameBufsize
]
byte
;
if
!
StringToBytes
(
namebuf
,
name
)
{
return
-
1
,
ENAMETOOLONG
}
...
...
@@ -99,7 +99,7 @@ export func mkdir(name string, perm int64) (ret int64, errno int64) {
return
r1
,
err
;
}
export
func
d
up2
(
fd1
,
fd2
int64
)
(
ret
int64
,
errno
int64
)
{
export
func
D
up2
(
fd1
,
fd2
int64
)
(
ret
int64
,
errno
int64
)
{
r1
,
r2
,
err
:=
Syscall
(
SYS_DUP2
,
fd1
,
fd2
,
0
);
return
r1
,
err
;
}
...
...
src/lib/syscall/socket_darwin.go
View file @
1a91b9a8
...
...
@@ -17,33 +17,33 @@ export func SockaddrToSockaddrInet6(s *Sockaddr) *SockaddrInet6;
export
func
SockaddrInet4ToSockaddr
(
s
*
SockaddrInet4
)
*
Sockaddr
;
export
func
SockaddrInet6ToSockaddr
(
s
*
SockaddrInet6
)
*
Sockaddr
;
export
func
s
ocket
(
domain
,
proto
,
typ
int64
)
(
ret
int64
,
err
int64
)
{
export
func
S
ocket
(
domain
,
proto
,
typ
int64
)
(
ret
int64
,
err
int64
)
{
r1
,
r2
,
e
:=
Syscall
(
SYS_SOCKET
,
domain
,
proto
,
typ
);
return
r1
,
e
}
export
func
c
onnect
(
fd
int64
,
sa
*
Sockaddr
)
(
ret
int64
,
err
int64
)
{
r1
,
r2
,
e
:=
Syscall
(
SYS_CONNECT
,
fd
,
int64
(
uintptr
(
unsafe
.
pointer
(
sa
))),
int64
(
sa
.
l
en
));
export
func
C
onnect
(
fd
int64
,
sa
*
Sockaddr
)
(
ret
int64
,
err
int64
)
{
r1
,
r2
,
e
:=
Syscall
(
SYS_CONNECT
,
fd
,
int64
(
uintptr
(
unsafe
.
pointer
(
sa
))),
int64
(
sa
.
L
en
));
return
r1
,
e
}
export
func
b
ind
(
fd
int64
,
sa
*
Sockaddr
)
(
ret
int64
,
err
int64
)
{
r1
,
r2
,
e
:=
Syscall
(
SYS_BIND
,
fd
,
int64
(
uintptr
(
unsafe
.
pointer
(
sa
))),
int64
(
sa
.
l
en
));
export
func
B
ind
(
fd
int64
,
sa
*
Sockaddr
)
(
ret
int64
,
err
int64
)
{
r1
,
r2
,
e
:=
Syscall
(
SYS_BIND
,
fd
,
int64
(
uintptr
(
unsafe
.
pointer
(
sa
))),
int64
(
sa
.
L
en
));
return
r1
,
e
}
export
func
l
isten
(
fd
,
n
int64
)
(
ret
int64
,
err
int64
)
{
export
func
L
isten
(
fd
,
n
int64
)
(
ret
int64
,
err
int64
)
{
r1
,
r2
,
e
:=
Syscall
(
SYS_LISTEN
,
fd
,
n
,
0
);
return
r1
,
e
}
export
func
a
ccept
(
fd
int64
,
sa
*
Sockaddr
)
(
ret
int64
,
err
int64
)
{
export
func
A
ccept
(
fd
int64
,
sa
*
Sockaddr
)
(
ret
int64
,
err
int64
)
{
var
n
int32
=
SizeofSockaddr
;
r1
,
r2
,
e
:=
Syscall
(
SYS_ACCEPT
,
fd
,
int64
(
uintptr
(
unsafe
.
pointer
(
sa
))),
int64
(
uintptr
(
unsafe
.
pointer
(
&
n
))));
return
r1
,
e
}
export
func
s
etsockopt
(
fd
,
level
,
opt
,
valueptr
,
length
int64
)
(
ret
int64
,
err
int64
)
{
export
func
S
etsockopt
(
fd
,
level
,
opt
,
valueptr
,
length
int64
)
(
ret
int64
,
err
int64
)
{
if
fd
<
0
{
return
-
1
,
EINVAL
}
...
...
@@ -51,47 +51,47 @@ export func setsockopt(fd, level, opt, valueptr, length int64) (ret int64, err i
return
r1
,
e
}
export
func
s
etsockopt_int
(
fd
,
level
,
opt
int64
,
value
int
)
int64
{
export
func
S
etsockopt_int
(
fd
,
level
,
opt
int64
,
value
int
)
int64
{
var
n
int32
=
int32
(
opt
);
r1
,
e
:=
s
etsockopt
(
fd
,
level
,
opt
,
int64
(
uintptr
(
unsafe
.
pointer
(
&
n
))),
4
);
r1
,
e
:=
S
etsockopt
(
fd
,
level
,
opt
,
int64
(
uintptr
(
unsafe
.
pointer
(
&
n
))),
4
);
return
e
}
export
func
s
etsockopt_tv
(
fd
,
level
,
opt
,
nsec
int64
)
int64
{
export
func
S
etsockopt_tv
(
fd
,
level
,
opt
,
nsec
int64
)
int64
{
var
tv
Timeval
;
nsec
+=
999
;
tv
.
s
ec
=
int64
(
nsec
/
1000000000
);
tv
.
u
sec
=
uint32
(
nsec
%
1000000000
);
r1
,
e
:=
s
etsockopt
(
fd
,
level
,
opt
,
int64
(
uintptr
(
unsafe
.
pointer
(
&
tv
))),
4
);
tv
.
S
ec
=
int64
(
nsec
/
1000000000
);
tv
.
U
sec
=
uint32
(
nsec
%
1000000000
);
r1
,
e
:=
S
etsockopt
(
fd
,
level
,
opt
,
int64
(
uintptr
(
unsafe
.
pointer
(
&
tv
))),
4
);
return
e
}
export
func
s
etsockopt_linger
(
fd
,
level
,
opt
int64
,
sec
int
)
int64
{
export
func
S
etsockopt_linger
(
fd
,
level
,
opt
int64
,
sec
int
)
int64
{
var
l
Linger
;
if
sec
!=
0
{
l
.
y
es
=
1
;
l
.
s
ec
=
int32
(
sec
);
l
.
Y
es
=
1
;
l
.
S
ec
=
int32
(
sec
);
}
else
{
l
.
y
es
=
0
;
l
.
s
ec
=
0
;
l
.
Y
es
=
0
;
l
.
S
ec
=
0
;
}
r1
,
err
:=
s
etsockopt
(
fd
,
level
,
opt
,
int64
(
uintptr
(
unsafe
.
pointer
(
&
l
))),
8
);
r1
,
err
:=
S
etsockopt
(
fd
,
level
,
opt
,
int64
(
uintptr
(
unsafe
.
pointer
(
&
l
))),
8
);
return
err
}
/*
export func
g
etsockopt(fd, level, opt, valueptr, lenptr int64) (ret int64, errno int64) {
export func
G
etsockopt(fd, level, opt, valueptr, lenptr int64) (ret int64, errno int64) {
r1, r2, err := Syscall6(SYS_GETSOCKOPT, fd, level, opt, valueptr, lenptr, 0);
return r1, err;
}
*/
export
func
k
queue
()
(
ret
int64
,
errno
int64
)
{
export
func
K
queue
()
(
ret
int64
,
errno
int64
)
{
r1
,
r2
,
err
:=
Syscall
(
SYS_KQUEUE
,
0
,
0
,
0
);
return
r1
,
err
}
export
func
kevent
(
kq
int64
,
changes
,
events
[]
Keven
t
,
timeout
*
Timespec
)
(
ret
int64
,
errno
int64
)
{
export
func
Kevent
(
kq
int64
,
changes
,
events
[]
Kevent_
t
,
timeout
*
Timespec
)
(
ret
int64
,
errno
int64
)
{
var
nchange
,
changeptr
,
nevent
,
eventptr
int64
;
nchange
=
0
;
changeptr
=
0
;
...
...
src/lib/syscall/socket_linux.go
View file @
1a91b9a8
...
...
@@ -17,8 +17,8 @@ export func SockaddrToSockaddrInet6(s *Sockaddr) *SockaddrInet6;
export
func
SockaddrInet4ToSockaddr
(
s
*
SockaddrInet4
)
*
Sockaddr
;
export
func
SockaddrInet6ToSockaddr
(
s
*
SockaddrInet6
)
*
Sockaddr
;
func
Len
(
s
*
Sockaddr
)
int64
{
switch
s
.
f
amily
{
func
sa
Len
(
s
*
Sockaddr
)
int64
{
switch
s
.
F
amily
{
case
AF_UNIX
:
return
SizeofSockaddrUnix
;
case
AF_INET
:
...
...
@@ -29,33 +29,33 @@ func Len(s *Sockaddr) int64 {
return
0
}
export
func
s
ocket
(
domain
,
proto
,
typ
int64
)
(
ret
int64
,
err
int64
)
{
export
func
S
ocket
(
domain
,
proto
,
typ
int64
)
(
ret
int64
,
err
int64
)
{
r1
,
r2
,
e
:=
Syscall
(
SYS_SOCKET
,
domain
,
proto
,
typ
);
return
r1
,
e
}
export
func
c
onnect
(
fd
int64
,
sa
*
Sockaddr
)
(
ret
int64
,
err
int64
)
{
r1
,
r2
,
e
:=
Syscall
(
SYS_CONNECT
,
fd
,
int64
(
uintptr
(
unsafe
.
pointer
(
sa
))),
Len
(
sa
));
export
func
C
onnect
(
fd
int64
,
sa
*
Sockaddr
)
(
ret
int64
,
err
int64
)
{
r1
,
r2
,
e
:=
Syscall
(
SYS_CONNECT
,
fd
,
int64
(
uintptr
(
unsafe
.
pointer
(
sa
))),
sa
Len
(
sa
));
return
r1
,
e
}
export
func
b
ind
(
fd
int64
,
sa
*
Sockaddr
)
(
ret
int64
,
err
int64
)
{
r1
,
r2
,
e
:=
Syscall
(
SYS_BIND
,
fd
,
int64
(
uintptr
(
unsafe
.
pointer
(
sa
))),
Len
(
sa
));
export
func
B
ind
(
fd
int64
,
sa
*
Sockaddr
)
(
ret
int64
,
err
int64
)
{
r1
,
r2
,
e
:=
Syscall
(
SYS_BIND
,
fd
,
int64
(
uintptr
(
unsafe
.
pointer
(
sa
))),
sa
Len
(
sa
));
return
r1
,
e
}
export
func
l
isten
(
fd
,
n
int64
)
(
ret
int64
,
err
int64
)
{
export
func
L
isten
(
fd
,
n
int64
)
(
ret
int64
,
err
int64
)
{
r1
,
r2
,
e
:=
Syscall
(
SYS_LISTEN
,
fd
,
n
,
0
);
return
r1
,
e
}
export
func
a
ccept
(
fd
int64
,
sa
*
Sockaddr
)
(
ret
int64
,
err
int64
)
{
export
func
A
ccept
(
fd
int64
,
sa
*
Sockaddr
)
(
ret
int64
,
err
int64
)
{
var
n
int32
=
SizeofSockaddr
;
r1
,
r2
,
e
:=
Syscall
(
SYS_ACCEPT
,
fd
,
int64
(
uintptr
(
unsafe
.
pointer
(
sa
))),
int64
(
uintptr
(
unsafe
.
pointer
(
&
n
))));
return
r1
,
e
}
export
func
s
etsockopt
(
fd
,
level
,
opt
,
valueptr
,
length
int64
)
(
ret
int64
,
err
int64
)
{
export
func
S
etsockopt
(
fd
,
level
,
opt
,
valueptr
,
length
int64
)
(
ret
int64
,
err
int64
)
{
if
fd
<
0
{
return
-
1
,
EINVAL
}
...
...
@@ -63,31 +63,31 @@ export func setsockopt(fd, level, opt, valueptr, length int64) (ret int64, err i
return
r1
,
e
}
export
func
s
etsockopt_int
(
fd
,
level
,
opt
int64
,
value
int
)
int64
{
export
func
S
etsockopt_int
(
fd
,
level
,
opt
int64
,
value
int
)
int64
{
n
:=
int32
(
opt
);
r1
,
e
:=
s
etsockopt
(
fd
,
level
,
opt
,
int64
(
uintptr
(
unsafe
.
pointer
(
&
n
))),
4
);
r1
,
e
:=
S
etsockopt
(
fd
,
level
,
opt
,
int64
(
uintptr
(
unsafe
.
pointer
(
&
n
))),
4
);
return
e
}
export
func
s
etsockopt_tv
(
fd
,
level
,
opt
,
nsec
int64
)
int64
{
export
func
S
etsockopt_tv
(
fd
,
level
,
opt
,
nsec
int64
)
int64
{
var
tv
Timeval
;
nsec
+=
999
;
tv
.
s
ec
=
int64
(
nsec
/
1000000000
);
tv
.
u
sec
=
uint64
(
nsec
%
1000000000
);
r1
,
e
:=
s
etsockopt
(
fd
,
level
,
opt
,
int64
(
uintptr
(
unsafe
.
pointer
(
&
tv
))),
4
);
tv
.
S
ec
=
int64
(
nsec
/
1000000000
);
tv
.
U
sec
=
uint64
(
nsec
%
1000000000
);
r1
,
e
:=
S
etsockopt
(
fd
,
level
,
opt
,
int64
(
uintptr
(
unsafe
.
pointer
(
&
tv
))),
4
);
return
e
}
export
func
s
etsockopt_linger
(
fd
,
level
,
opt
int64
,
sec
int
)
int64
{
export
func
S
etsockopt_linger
(
fd
,
level
,
opt
int64
,
sec
int
)
int64
{
var
l
Linger
;
if
sec
!=
0
{
l
.
y
es
=
1
;
l
.
s
ec
=
int32
(
sec
)
l
.
Y
es
=
1
;
l
.
S
ec
=
int32
(
sec
)
}
else
{
l
.
y
es
=
0
;
l
.
s
ec
=
0
l
.
Y
es
=
0
;
l
.
S
ec
=
0
}
r1
,
err
:=
s
etsockopt
(
fd
,
level
,
opt
,
int64
(
uintptr
(
unsafe
.
pointer
(
&
l
))),
8
);
r1
,
err
:=
S
etsockopt
(
fd
,
level
,
opt
,
int64
(
uintptr
(
unsafe
.
pointer
(
&
l
))),
8
);
return
err
}
...
...
@@ -98,17 +98,17 @@ export func getsockopt(fd, level, opt, valueptr, lenptr int64) (ret int64, errno
}
*/
export
func
e
poll_create
(
size
int64
)
(
ret
int64
,
errno
int64
)
{
export
func
E
poll_create
(
size
int64
)
(
ret
int64
,
errno
int64
)
{
r1
,
r2
,
err
:=
syscall
.
Syscall
(
SYS_EPOLL_CREATE
,
size
,
0
,
0
);
return
r1
,
err
}
export
func
e
poll_ctl
(
epfd
,
op
,
fd
int64
,
ev
*
EpollEvent
)
int64
{
export
func
E
poll_ctl
(
epfd
,
op
,
fd
int64
,
ev
*
EpollEvent
)
int64
{
r1
,
r2
,
err
:=
syscall
.
Syscall6
(
SYS_EPOLL_CTL
,
epfd
,
op
,
fd
,
int64
(
uintptr
(
unsafe
.
pointer
(
ev
))),
0
,
0
);
return
err
}
export
func
e
poll_wait
(
epfd
int64
,
ev
[]
EpollEvent
,
msec
int64
)
(
ret
int64
,
err
int64
)
{
export
func
E
poll_wait
(
epfd
int64
,
ev
[]
EpollEvent
,
msec
int64
)
(
ret
int64
,
err
int64
)
{
var
evptr
,
nev
int64
;
if
ev
!=
nil
&&
len
(
ev
)
>
0
{
nev
=
int64
(
len
(
ev
));
...
...
src/lib/syscall/time_amd64_darwin.go
View file @
1a91b9a8
...
...
@@ -6,7 +6,7 @@ package syscall
import
syscall
"syscall"
export
func
g
ettimeofday
()
(
sec
,
nsec
,
errno
int64
)
{
export
func
G
ettimeofday
()
(
sec
,
nsec
,
errno
int64
)
{
// The "1" in the call is the timeval pointer, which must be
// non-zero but is otherwise unused. The results
// are returned in r1, r2.
...
...
@@ -17,8 +17,8 @@ export func gettimeofday() (sec, nsec, errno int64) {
return
r1
,
r2
*
1000
,
0
}
export
func
n
stotimeval
(
ns
int64
,
tv
*
Timeval
)
{
export
func
N
stotimeval
(
ns
int64
,
tv
*
Timeval
)
{
ns
+=
999
;
// round up
tv
.
s
ec
=
int64
(
ns
/
1000000000
);
tv
.
u
sec
=
uint32
(
ns
%
1000000000
/
1000
);
tv
.
S
ec
=
int64
(
ns
/
1000000000
);
tv
.
U
sec
=
uint32
(
ns
%
1000000000
/
1000
);
}
src/lib/syscall/time_amd64_linux.go
View file @
1a91b9a8
...
...
@@ -9,17 +9,17 @@ import (
"unsafe"
;
)
export
func
g
ettimeofday
()
(
sec
,
nsec
,
errno
int64
)
{
export
func
G
ettimeofday
()
(
sec
,
nsec
,
errno
int64
)
{
var
tv
Timeval
;
r1
,
r2
,
e
:=
Syscall
(
SYS_GETTIMEOFDAY
,
int64
(
uintptr
(
unsafe
.
pointer
(
&
tv
))),
0
,
0
);
if
e
!=
0
{
return
0
,
0
,
e
}
return
int64
(
tv
.
sec
),
int64
(
tv
.
u
sec
*
1000
),
0
return
int64
(
tv
.
Sec
),
int64
(
tv
.
U
sec
*
1000
),
0
}
export
func
n
stotimeval
(
ns
int64
,
tv
*
Timeval
)
{
export
func
N
stotimeval
(
ns
int64
,
tv
*
Timeval
)
{
ns
+=
999
;
// round up
tv
.
s
ec
=
int64
(
ns
/
1000000000
);
tv
.
u
sec
=
uint64
(
ns
%
1000000000
/
1000
);
tv
.
S
ec
=
int64
(
ns
/
1000000000
);
tv
.
U
sec
=
uint64
(
ns
%
1000000000
/
1000
);
}
src/lib/syscall/types_amd64_darwin.go
View file @
1a91b9a8
...
...
@@ -11,35 +11,35 @@ package syscall
// Time
export
type
Timespec
struct
{
s
ec
int64
;
n
sec
uint64
;
S
ec
int64
;
N
sec
uint64
;
}
export
type
Timeval
struct
{
s
ec
int64
;
u
sec
uint32
;
S
ec
int64
;
U
sec
uint32
;
}
// Processes
export
type
Rusage
struct
{
u
time
Timeval
;
s
time
Timeval
;
m
axrss
int64
;
i
xrss
int64
;
i
drss
int64
;
i
srss
int64
;
m
inflt
int64
;
m
ajflt
int64
;
n
swap
int64
;
i
nblock
int64
;
o
ublock
int64
;
m
sgsnd
int64
;
m
sgrcv
int64
;
n
signals
int64
;
n
vcsw
int64
;
n
ivcsw
int64
;
U
time
Timeval
;
S
time
Timeval
;
M
axrss
int64
;
I
xrss
int64
;
I
drss
int64
;
I
srss
int64
;
M
inflt
int64
;
M
ajflt
int64
;
N
swap
int64
;
I
nblock
int64
;
O
ublock
int64
;
M
sgsnd
int64
;
M
sgrcv
int64
;
N
signals
int64
;
N
vcsw
int64
;
N
ivcsw
int64
;
}
...
...
@@ -67,26 +67,26 @@ export const (
FD_CLOEXEC
=
1
;
)
export
type
Stat
struct
{
d
ev
uint32
;
m
ode
uint16
;
n
link
uint16
;
i
no
uint64
;
u
id
uint32
;
g
id
uint32
;
r
dev
uint32
;
p
ad1
uint32
;
a
time
Timespec
;
m
time
Timespec
;
c
time
Timespec
;
b
irthtime
Timespec
;
s
ize
uint64
;
b
locks
uint64
;
b
lksize
uint32
;
f
lags
uint32
;
g
en
uint32
;
l
spare
uint32
;
q
spare
[
2
]
uint64
;
export
type
Stat
_t
struct
{
D
ev
uint32
;
M
ode
uint16
;
N
link
uint16
;
I
no
uint64
;
U
id
uint32
;
G
id
uint32
;
R
dev
uint32
;
P
ad1
uint32
;
A
time
Timespec
;
M
time
Timespec
;
C
time
Timespec
;
B
irthtime
Timespec
;
S
ize
uint64
;
B
locks
uint64
;
B
lksize
uint32
;
F
lags
uint32
;
G
en
uint32
;
L
spare
uint32
;
Q
spare
[
2
]
uint64
;
}
...
...
@@ -128,41 +128,41 @@ export const (
)
export
type
SockaddrUnix
struct
{
l
en
byte
;
f
amily
byte
;
p
ath
[
104
]
byte
L
en
byte
;
F
amily
byte
;
P
ath
[
104
]
byte
}
export
const
SizeofSockaddrUnix
=
106
export
type
SockaddrInet4
struct
{
l
en
byte
;
f
amily
byte
;
p
ort
[
2
]
byte
;
a
ddr
[
4
]
byte
;
z
ero
[
8
]
byte
L
en
byte
;
F
amily
byte
;
P
ort
[
2
]
byte
;
A
ddr
[
4
]
byte
;
Z
ero
[
8
]
byte
}
export
const
SizeofSockaddrInet4
=
16
export
type
SockaddrInet6
struct
{
l
en
byte
;
f
amily
byte
;
p
ort
[
2
]
byte
;
f
lowinfo
[
4
]
byte
;
a
ddr
[
16
]
byte
;
s
copeid
[
4
]
byte
;
L
en
byte
;
F
amily
byte
;
P
ort
[
2
]
byte
;
F
lowinfo
[
4
]
byte
;
A
ddr
[
16
]
byte
;
S
copeid
[
4
]
byte
;
}
export
const
SizeofSockaddrInet6
=
28
export
type
Sockaddr
struct
{
l
en
byte
;
f
amily
byte
;
o
paque
[
126
]
byte
L
en
byte
;
F
amily
byte
;
O
paque
[
126
]
byte
}
export
const
SizeofSockaddr
=
128
export
type
Linger
struct
{
y
es
int32
;
s
ec
int32
;
Y
es
int32
;
S
ec
int32
;
}
...
...
@@ -201,12 +201,12 @@ export const (
EV_ERROR
=
0x4000
)
export
type
Kevent
struct
{
i
dent
int64
;
f
ilter
int16
;
f
lags
uint16
;
f
flags
uint32
;
d
ata
int64
;
u
data
int64
;
export
type
Kevent
_t
struct
{
I
dent
int64
;
F
ilter
int16
;
F
lags
uint16
;
F
flags
uint32
;
D
ata
int64
;
U
data
int64
;
}
src/lib/syscall/types_amd64_linux.go
View file @
1a91b9a8
...
...
@@ -11,35 +11,35 @@ package syscall
// Time
export
type
Timespec
struct
{
s
ec
int64
;
n
sec
uint64
;
S
ec
int64
;
N
sec
uint64
;
}
export
type
Timeval
struct
{
s
ec
int64
;
u
sec
uint64
;
S
ec
int64
;
U
sec
uint64
;
}
// Processes
export
type
Rusage
struct
{
u
time
Timeval
;
s
time
Timeval
;
m
axrss
int64
;
i
xrss
int64
;
i
drss
int64
;
i
srss
int64
;
m
inflt
int64
;
m
ajflt
int64
;
n
swap
int64
;
i
nblock
int64
;
o
ublock
int64
;
m
sgsnd
int64
;
m
sgrcv
int64
;
n
signals
int64
;
n
vcsw
int64
;
n
ivcsw
int64
;
U
time
Timeval
;
S
time
Timeval
;
M
axrss
int64
;
I
xrss
int64
;
I
drss
int64
;
I
srss
int64
;
M
inflt
int64
;
M
ajflt
int64
;
N
swap
int64
;
I
nblock
int64
;
O
ublock
int64
;
M
sgsnd
int64
;
M
sgrcv
int64
;
N
signals
int64
;
N
vcsw
int64
;
N
ivcsw
int64
;
}
...
...
@@ -67,21 +67,21 @@ export const (
FD_CLOEXEC
=
1
;
)
export
type
Stat
struct
{
d
ev
uint64
;
i
no
uint64
;
n
link
uint64
;
m
ode
uint32
;
u
id
uint32
;
g
id
uint32
;
export
type
Stat
_t
struct
{
D
ev
uint64
;
I
no
uint64
;
N
link
uint64
;
M
ode
uint32
;
U
id
uint32
;
G
id
uint32
;
_pad0
uint32
;
r
dev
uint64
;
s
ize
int64
;
b
lksize
int64
;
b
locks
int64
;
a
time
Timespec
;
m
time
Timespec
;
c
time
Timespec
;
R
dev
uint64
;
S
ize
int64
;
B
lksize
int64
;
B
locks
int64
;
A
time
Timespec
;
M
time
Timespec
;
C
time
Timespec
;
_unused
[
3
]
int64
}
...
...
@@ -134,37 +134,37 @@ export const (
)
export
type
SockaddrUnix
struct
{
f
amily
uint16
;
p
ath
[
108
]
byte
F
amily
uint16
;
P
ath
[
108
]
byte
}
export
const
SizeofSockaddrUnix
=
110
export
type
SockaddrInet4
struct
{
f
amily
uint16
;
p
ort
[
2
]
byte
;
a
ddr
[
4
]
byte
;
z
ero
[
8
]
byte
F
amily
uint16
;
P
ort
[
2
]
byte
;
A
ddr
[
4
]
byte
;
Z
ero
[
8
]
byte
}
export
const
SizeofSockaddrInet4
=
16
export
type
SockaddrInet6
struct
{
f
amily
uint16
;
p
ort
[
2
]
byte
;
f
lowinfo
[
4
]
byte
;
a
ddr
[
16
]
byte
;
s
copeid
[
4
]
byte
;
F
amily
uint16
;
P
ort
[
2
]
byte
;
F
lowinfo
[
4
]
byte
;
A
ddr
[
16
]
byte
;
S
copeid
[
4
]
byte
;
}
export
const
SizeofSockaddrInet6
=
28
export
type
Sockaddr
struct
{
f
amily
uint16
;
o
paque
[
126
]
byte
F
amily
uint16
;
O
paque
[
126
]
byte
}
export
const
SizeofSockaddr
=
128
export
type
Linger
struct
{
y
es
int32
;
s
ec
int32
;
Y
es
int32
;
S
ec
int32
;
}
...
...
@@ -187,7 +187,7 @@ export const (
)
export
type
EpollEvent
struct
{
e
vents
uint32
;
f
d
int32
;
p
ad
int32
;
E
vents
uint32
;
F
d
int32
;
P
ad
int32
;
}
src/lib/time/tick.go
View file @
1a91b9a8
...
...
@@ -42,7 +42,7 @@ func ticker(ns int64, c chan int64) {
when
+=
ns
}
syscall
.
n
stotimeval
(
when
-
now
,
&
tv
);
syscall
.
N
stotimeval
(
when
-
now
,
&
tv
);
syscall
.
Syscall6
(
syscall
.
SYS_SELECT
,
0
,
0
,
0
,
0
,
int64
(
uintptr
(
unsafe
.
pointer
(
&
tv
))),
0
);
now
=
time
.
Nanoseconds
();
c
<-
now
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment