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 (
...
@@ -28,7 +28,7 @@ export var (
)
)
export
func
Open
(
name
string
,
mode
int64
,
perm
int64
)
(
fd
*
FD
,
err
*
os
.
Error
)
{
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
)
return
newFD
(
r
,
name
),
os
.
ErrnoToError
(
e
)
}
}
...
@@ -36,7 +36,7 @@ func (fd *FD) Close() *os.Error {
...
@@ -36,7 +36,7 @@ func (fd *FD) Close() *os.Error {
if
fd
==
nil
{
if
fd
==
nil
{
return
os
.
EINVAL
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
fd
.
fildes
=
-
1
;
// so it can't be closed again
return
nil
return
nil
}
}
...
@@ -45,7 +45,7 @@ func (fd *FD) Read(b []byte) (ret int, err *os.Error) {
...
@@ -45,7 +45,7 @@ func (fd *FD) Read(b []byte) (ret int, err *os.Error) {
if
fd
==
nil
{
if
fd
==
nil
{
return
-
1
,
os
.
EINVAL
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
)
return
int
(
r
),
os
.
ErrnoToError
(
e
)
}
}
...
@@ -53,7 +53,7 @@ func (fd *FD) Write(b []byte) (ret int, err *os.Error) {
...
@@ -53,7 +53,7 @@ func (fd *FD) Write(b []byte) (ret int, err *os.Error) {
if
fd
==
nil
{
if
fd
==
nil
{
return
-
1
,
os
.
EINVAL
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
)
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")
...
@@ -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.
// fd is already connected to www.google.com port 80.
// Run an HTTP request to fetch the main page.
// 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
"
);
req
:=
io
.
StringBytes
(
"GET / HTTP/1.0
\r\n
Host: www.google.com
\r\n\r\n
"
);
n
,
errno
:=
fd
.
Write
(
req
);
n
,
errno
:=
fd
.
Write
(
req
);
...
@@ -25,27 +25,27 @@ func FetchGoogle(t *testing.T, fd net.Conn, network, addr string) {
...
@@ -25,27 +25,27 @@ func FetchGoogle(t *testing.T, fd net.Conn, network, addr string) {
n
,
errno
=
io
.
Readn
(
fd
,
buf
);
n
,
errno
=
io
.
Readn
(
fd
,
buf
);
if
n
<
1000
{
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
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
);
fd
,
err
:=
net
.
Dial
(
network
,
""
,
addr
);
if
err
!=
nil
{
if
err
!=
nil
{
t
.
Errorf
(
"net.Dial(%q, %q, %q) = _, %v"
,
network
,
""
,
addr
,
err
);
t
.
Errorf
(
"net.Dial(%q, %q, %q) = _, %v"
,
network
,
""
,
addr
,
err
);
return
return
}
}
F
etchGoogle
(
t
,
fd
,
network
,
addr
);
f
etchGoogle
(
t
,
fd
,
network
,
addr
);
fd
.
Close
()
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
);
fd
,
err
:=
net
.
DialTCP
(
network
,
""
,
addr
);
if
err
!=
nil
{
if
err
!=
nil
{
t
.
Errorf
(
"net.DialTCP(%q, %q, %q) = _, %v"
,
network
,
""
,
addr
,
err
);
t
.
Errorf
(
"net.DialTCP(%q, %q, %q) = _, %v"
,
network
,
""
,
addr
,
err
);
}
else
{
}
else
{
F
etchGoogle
(
t
,
fd
,
network
,
addr
);
f
etchGoogle
(
t
,
fd
,
network
,
addr
);
}
}
fd
.
Close
()
fd
.
Close
()
}
}
...
@@ -76,13 +76,13 @@ export func TestDialGoogle(t *testing.T) {
...
@@ -76,13 +76,13 @@ export func TestDialGoogle(t *testing.T) {
continue
continue
}
}
t
.
Logf
(
"-- %s --"
,
addr
);
t
.
Logf
(
"-- %s --"
,
addr
);
D
oDial
(
t
,
"tcp"
,
addr
);
d
oDial
(
t
,
"tcp"
,
addr
);
D
oDialTCP
(
t
,
"tcp"
,
addr
);
d
oDialTCP
(
t
,
"tcp"
,
addr
);
if
addr
[
0
]
!=
'['
{
if
addr
[
0
]
!=
'['
{
D
oDial
(
t
,
"tcp4"
,
addr
);
d
oDial
(
t
,
"tcp4"
,
addr
);
D
oDialTCP
(
t
,
"tcp4"
,
addr
)
d
oDialTCP
(
t
,
"tcp4"
,
addr
)
}
}
D
oDial
(
t
,
"tcp6"
,
addr
);
d
oDial
(
t
,
"tcp6"
,
addr
);
D
oDialTCP
(
t
,
"tcp6"
,
addr
)
d
oDialTCP
(
t
,
"tcp6"
,
addr
)
}
}
}
}
src/lib/net/fd.go
View file @
1a91b9a8
...
@@ -28,11 +28,11 @@ export type FD struct {
...
@@ -28,11 +28,11 @@ export type FD struct {
// Make reads and writes on fd return EAGAIN instead of blocking.
// Make reads and writes on fd return EAGAIN instead of blocking.
func
_SetNonblock
(
fd
int64
)
*
os
.
Error
{
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
{
if
e
!=
0
{
return
os
.
ErrnoToError
(
e
)
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
{
if
e
!=
0
{
return
os
.
ErrnoToError
(
e
)
return
os
.
ErrnoToError
(
e
)
}
}
...
@@ -272,16 +272,16 @@ func (fd *FD) Accept(sa *syscall.Sockaddr) (nfd *FD, err *os.Error) {
...
@@ -272,16 +272,16 @@ func (fd *FD) Accept(sa *syscall.Sockaddr) (nfd *FD, err *os.Error) {
if
fd
==
nil
||
fd
.
osfd
==
nil
{
if
fd
==
nil
||
fd
.
osfd
==
nil
{
return
nil
,
os
.
EINVAL
return
nil
,
os
.
EINVAL
}
}
s
,
e
:=
syscall
.
a
ccept
(
fd
.
fd
,
sa
);
s
,
e
:=
syscall
.
A
ccept
(
fd
.
fd
,
sa
);
for
e
==
syscall
.
EAGAIN
{
for
e
==
syscall
.
EAGAIN
{
pollserver
.
WaitRead
(
fd
);
pollserver
.
WaitRead
(
fd
);
s
,
e
=
syscall
.
a
ccept
(
fd
.
fd
,
sa
)
s
,
e
=
syscall
.
A
ccept
(
fd
.
fd
,
sa
)
}
}
if
e
!=
0
{
if
e
!=
0
{
return
nil
,
os
.
ErrnoToError
(
e
)
return
nil
,
os
.
ErrnoToError
(
e
)
}
}
if
nfd
,
err
=
NewFD
(
s
);
err
!=
nil
{
if
nfd
,
err
=
NewFD
(
s
);
err
!=
nil
{
syscall
.
c
lose
(
s
);
syscall
.
C
lose
(
s
);
return
nil
,
err
return
nil
,
err
}
}
return
nfd
,
nil
return
nfd
,
nil
...
...
src/lib/net/fd_darwin.go
View file @
1a91b9a8
...
@@ -14,14 +14,14 @@ import (
...
@@ -14,14 +14,14 @@ import (
export
type
Pollster
struct
{
export
type
Pollster
struct
{
kq
int64
;
kq
int64
;
eventbuf
[
10
]
syscall
.
Kevent
;
eventbuf
[
10
]
syscall
.
Kevent
_t
;
events
[]
syscall
.
Kevent
;
events
[]
syscall
.
Kevent
_t
;
}
}
export
func
NewPollster
()
(
p
*
Pollster
,
err
*
os
.
Error
)
{
export
func
NewPollster
()
(
p
*
Pollster
,
err
*
os
.
Error
)
{
p
=
new
(
Pollster
);
p
=
new
(
Pollster
);
var
e
int64
;
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
)
return
nil
,
os
.
ErrnoToError
(
e
)
}
}
p
.
events
=
p
.
eventbuf
[
0
:
0
];
p
.
events
=
p
.
eventbuf
[
0
:
0
];
...
@@ -35,36 +35,36 @@ func (p *Pollster) AddFD(fd int64, mode int, repeat bool) *os.Error {
...
@@ -35,36 +35,36 @@ func (p *Pollster) AddFD(fd int64, mode int, repeat bool) *os.Error {
}
else
{
}
else
{
kmode
=
syscall
.
EVFILT_WRITE
kmode
=
syscall
.
EVFILT_WRITE
}
}
var
events
[
1
]
syscall
.
Kevent
;
var
events
[
1
]
syscall
.
Kevent
_t
;
ev
:=
&
events
[
0
];
ev
:=
&
events
[
0
];
ev
.
i
dent
=
fd
;
ev
.
I
dent
=
fd
;
ev
.
f
ilter
=
kmode
;
ev
.
F
ilter
=
kmode
;
// EV_ADD - add event to kqueue list
// EV_ADD - add event to kqueue list
// EV_RECEIPT - generate fake EV_ERROR as result of add,
// EV_RECEIPT - generate fake EV_ERROR as result of add,
// rather than waiting for real event
// rather than waiting for real event
// EV_ONESHOT - delete the event the first time it triggers
// 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
{
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
{
if
e
!=
0
{
return
os
.
ErrnoToError
(
e
)
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"
)
return
os
.
NewError
(
"kqueue phase error"
)
}
}
if
ev
.
d
ata
!=
0
{
if
ev
.
D
ata
!=
0
{
return
os
.
ErrnoToError
(
ev
.
d
ata
)
return
os
.
ErrnoToError
(
ev
.
D
ata
)
}
}
return
nil
return
nil
}
}
func
(
p
*
Pollster
)
WaitFD
()
(
fd
int64
,
mode
int
,
err
*
os
.
Error
)
{
func
(
p
*
Pollster
)
WaitFD
()
(
fd
int64
,
mode
int
,
err
*
os
.
Error
)
{
for
len
(
p
.
events
)
==
0
{
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
!=
0
{
if
e
==
syscall
.
EAGAIN
||
e
==
syscall
.
EINTR
{
if
e
==
syscall
.
EAGAIN
||
e
==
syscall
.
EINTR
{
continue
continue
...
@@ -75,8 +75,8 @@ func (p *Pollster) WaitFD() (fd int64, mode int, err *os.Error) {
...
@@ -75,8 +75,8 @@ func (p *Pollster) WaitFD() (fd int64, mode int, err *os.Error) {
}
}
ev
:=
&
p
.
events
[
0
];
ev
:=
&
p
.
events
[
0
];
p
.
events
=
p
.
events
[
1
:
len
(
p
.
events
)];
p
.
events
=
p
.
events
[
1
:
len
(
p
.
events
)];
fd
=
ev
.
i
dent
;
fd
=
ev
.
I
dent
;
if
ev
.
f
ilter
==
syscall
.
EVFILT_READ
{
if
ev
.
F
ilter
==
syscall
.
EVFILT_READ
{
mode
=
'r'
mode
=
'r'
}
else
{
}
else
{
mode
=
'w'
mode
=
'w'
...
@@ -85,6 +85,6 @@ func (p *Pollster) WaitFD() (fd int64, mode int, err *os.Error) {
...
@@ -85,6 +85,6 @@ func (p *Pollster) WaitFD() (fd int64, mode int, err *os.Error) {
}
}
func
(
p
*
Pollster
)
Close
()
*
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
)
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
...
@@ -117,7 +117,7 @@ func _HostPortToIP(net, hostport, mode string) (ip []byte, iport int, err *os.Er
// Convert socket address into "host:port".
// Convert socket address into "host:port".
func
_SockaddrToHostPort
(
sa
*
syscall
.
Sockaddr
)
(
hostport
string
,
err
*
os
.
Error
)
{
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
:
case
syscall
.
AF_INET
,
syscall
.
AF_INET6
:
addr
,
port
,
e
:=
SockaddrToIP
(
sa
);
addr
,
port
,
e
:=
SockaddrToIP
(
sa
);
if
e
!=
nil
{
if
e
!=
nil
{
...
@@ -141,34 +141,34 @@ func boolint(b bool) int {
...
@@ -141,34 +141,34 @@ func boolint(b bool) int {
// Generic _Socket creation.
// Generic _Socket creation.
func
_Socket
(
f
,
p
,
t
int64
,
la
,
ra
*
syscall
.
Sockaddr
)
(
fd
*
FD
,
err
*
os
.
Error
)
{
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
{
if
e
!=
0
{
return
nil
,
os
.
ErrnoToError
(
e
)
return
nil
,
os
.
ErrnoToError
(
e
)
}
}
// Allow reuse of recently-used addresses.
// 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
;
var
r
int64
;
if
la
!=
nil
{
if
la
!=
nil
{
r
,
e
=
syscall
.
b
ind
(
s
,
la
);
r
,
e
=
syscall
.
B
ind
(
s
,
la
);
if
e
!=
0
{
if
e
!=
0
{
syscall
.
c
lose
(
s
);
syscall
.
C
lose
(
s
);
return
nil
,
os
.
ErrnoToError
(
e
)
return
nil
,
os
.
ErrnoToError
(
e
)
}
}
}
}
if
ra
!=
nil
{
if
ra
!=
nil
{
r
,
e
=
syscall
.
c
onnect
(
s
,
ra
);
r
,
e
=
syscall
.
C
onnect
(
s
,
ra
);
if
e
!=
0
{
if
e
!=
0
{
syscall
.
c
lose
(
s
);
syscall
.
C
lose
(
s
);
return
nil
,
os
.
ErrnoToError
(
e
)
return
nil
,
os
.
ErrnoToError
(
e
)
}
}
}
}
fd
,
err
=
NewFD
(
s
);
fd
,
err
=
NewFD
(
s
);
if
err
!=
nil
{
if
err
!=
nil
{
syscall
.
c
lose
(
s
);
syscall
.
C
lose
(
s
);
return
nil
,
err
return
nil
,
err
}
}
...
@@ -227,11 +227,11 @@ func (c *_ConnBase) Close() *os.Error {
...
@@ -227,11 +227,11 @@ func (c *_ConnBase) Close() *os.Error {
func
setsockopt_int
(
fd
,
level
,
opt
int64
,
value
int
)
*
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
{
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
{
func
(
c
*
_ConnBase
)
SetReadBuffer
(
bytes
int
)
*
os
.
Error
{
...
@@ -275,7 +275,7 @@ func (c *_ConnBase) SetKeepAlive(keepalive bool) *os.Error {
...
@@ -275,7 +275,7 @@ func (c *_ConnBase) SetKeepAlive(keepalive bool) *os.Error {
}
}
func
(
c
*
_ConnBase
)
SetLinger
(
sec
int
)
*
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
);
return
os
.
ErrnoToError
(
e
);
}
}
...
@@ -492,9 +492,9 @@ export func ListenTCP(net, laddr string) (l *ListenerTCP, err *os.Error) {
...
@@ -492,9 +492,9 @@ export func ListenTCP(net, laddr string) (l *ListenerTCP, err *os.Error) {
if
e
!=
nil
{
if
e
!=
nil
{
return
nil
,
e
return
nil
,
e
}
}
r
,
e1
:=
syscall
.
l
isten
(
fd
.
fd
,
ListenBacklog
());
r
,
e1
:=
syscall
.
L
isten
(
fd
.
fd
,
ListenBacklog
());
if
e1
!=
0
{
if
e1
!=
0
{
syscall
.
c
lose
(
fd
.
fd
);
syscall
.
C
lose
(
fd
.
fd
);
return
nil
,
os
.
ErrnoToError
(
e1
)
return
nil
,
os
.
ErrnoToError
(
e1
)
}
}
l
=
new
(
ListenerTCP
);
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
...
@@ -17,12 +17,12 @@ export func IPv4ToSockaddr(p []byte, port int) (sa1 *syscall.Sockaddr, err *os.E
return
nil
,
os
.
EINVAL
return
nil
,
os
.
EINVAL
}
}
sa
:=
new
(
syscall
.
SockaddrInet4
);
sa
:=
new
(
syscall
.
SockaddrInet4
);
sa
.
l
en
=
syscall
.
SizeofSockaddrInet4
;
sa
.
L
en
=
syscall
.
SizeofSockaddrInet4
;
sa
.
f
amily
=
syscall
.
AF_INET
;
sa
.
F
amily
=
syscall
.
AF_INET
;
sa
.
p
ort
[
0
]
=
byte
(
port
>>
8
);
sa
.
P
ort
[
0
]
=
byte
(
port
>>
8
);
sa
.
p
ort
[
1
]
=
byte
(
port
);
sa
.
P
ort
[
1
]
=
byte
(
port
);
for
i
:=
0
;
i
<
IPv4len
;
i
++
{
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
return
unsafe
.
pointer
(
sa
)
.
(
*
syscall
.
Sockaddr
),
nil
}
}
...
@@ -33,33 +33,33 @@ export func IPv6ToSockaddr(p []byte, port int) (sa1 *syscall.Sockaddr, err *os.E
...
@@ -33,33 +33,33 @@ export func IPv6ToSockaddr(p []byte, port int) (sa1 *syscall.Sockaddr, err *os.E
return
nil
,
os
.
EINVAL
return
nil
,
os
.
EINVAL
}
}
sa
:=
new
(
syscall
.
SockaddrInet6
);
sa
:=
new
(
syscall
.
SockaddrInet6
);
sa
.
l
en
=
syscall
.
SizeofSockaddrInet6
;
sa
.
L
en
=
syscall
.
SizeofSockaddrInet6
;
sa
.
f
amily
=
syscall
.
AF_INET6
;
sa
.
F
amily
=
syscall
.
AF_INET6
;
sa
.
p
ort
[
0
]
=
byte
(
port
>>
8
);
sa
.
P
ort
[
0
]
=
byte
(
port
>>
8
);
sa
.
p
ort
[
1
]
=
byte
(
port
);
sa
.
P
ort
[
1
]
=
byte
(
port
);
for
i
:=
0
;
i
<
IPv6len
;
i
++
{
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
return
unsafe
.
pointer
(
sa
)
.
(
*
syscall
.
Sockaddr
),
nil
}
}
export
func
SockaddrToIP
(
sa1
*
syscall
.
Sockaddr
)
(
p
[]
byte
,
port
int
,
err
*
os
.
Error
)
{
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
:
case
syscall
.
AF_INET
:
sa
:=
unsafe
.
pointer
(
sa1
)
.
(
*
syscall
.
SockaddrInet4
);
sa
:=
unsafe
.
pointer
(
sa1
)
.
(
*
syscall
.
SockaddrInet4
);
a
:=
ToIPv6
(
sa
.
a
ddr
);
a
:=
ToIPv6
(
sa
.
A
ddr
);
if
a
==
nil
{
if
a
==
nil
{
return
nil
,
0
,
os
.
EINVAL
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
:
case
syscall
.
AF_INET6
:
sa
:=
unsafe
.
pointer
(
sa1
)
.
(
*
syscall
.
SockaddrInet6
);
sa
:=
unsafe
.
pointer
(
sa1
)
.
(
*
syscall
.
SockaddrInet6
);
a
:=
ToIPv6
(
sa
.
a
ddr
);
a
:=
ToIPv6
(
sa
.
A
ddr
);
if
a
==
nil
{
if
a
==
nil
{
return
nil
,
0
,
os
.
EINVAL
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
:
default
:
return
nil
,
0
,
os
.
EINVAL
return
nil
,
0
,
os
.
EINVAL
}
}
...
...
src/lib/net/parse_test.go
View file @
1a91b9a8
...
@@ -14,7 +14,7 @@ import (
...
@@ -14,7 +14,7 @@ import (
export
func
TestReadLine
(
t
*
testing
.
T
)
{
export
func
TestReadLine
(
t
*
testing
.
T
)
{
filename
:=
"/etc/services"
;
// a nice big file
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
{
if
err
!=
nil
{
t
.
Fatalf
(
"open %s: %v"
,
filename
,
err
);
t
.
Fatalf
(
"open %s: %v"
,
filename
,
err
);
}
}
...
...
src/lib/os/os_error.go
View file @
1a91b9a8
...
@@ -15,11 +15,11 @@ export type Error struct {
...
@@ -15,11 +15,11 @@ export type Error struct {
// Indexed by errno.
// Indexed by errno.
// If we worry about syscall speed (only relevant on failure), we could
// If we worry about syscall speed (only relevant on failure), we could
// make it an array, but it's probably not important.
// 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,
// Table of all known errors in system. Use the same error string twice,
// get the same *os.Error.
// 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
// These functions contain a race if two goroutines add identical
// errors simultaneously but the consequences are unimportant.
// errors simultaneously but the consequences are unimportant.
...
@@ -29,12 +29,12 @@ export func NewError(s string) *Error {
...
@@ -29,12 +29,12 @@ export func NewError(s string) *Error {
if
s
==
""
{
if
s
==
""
{
return
nil
return
nil
}
}
err
,
ok
:=
E
rrorStringTab
[
s
];
err
,
ok
:=
e
rrorStringTab
[
s
];
if
ok
{
if
ok
{
return
err
return
err
}
}
err
=
&
Error
{
s
};
err
=
&
Error
{
s
};
E
rrorStringTab
[
s
]
=
err
;
e
rrorStringTab
[
s
]
=
err
;
return
err
;
return
err
;
}
}
...
@@ -44,12 +44,12 @@ export func ErrnoToError(errno int64) *Error {
...
@@ -44,12 +44,12 @@ export func ErrnoToError(errno int64) *Error {
return
nil
return
nil
}
}
// Quick lookup by errno.
// Quick lookup by errno.
err
,
ok
:=
E
rrorTab
[
errno
];
err
,
ok
:=
e
rrorTab
[
errno
];
if
ok
{
if
ok
{
return
err
return
err
}
}
err
=
NewError
(
syscall
.
e
rrstr
(
errno
));
err
=
NewError
(
syscall
.
E
rrstr
(
errno
));
E
rrorTab
[
errno
]
=
err
;
e
rrorTab
[
errno
]
=
err
;
return
err
;
return
err
;
}
}
...
@@ -91,11 +91,10 @@ export var (
...
@@ -91,11 +91,10 @@ export var (
ERANGE
=
ErrnoToError
(
syscall
.
ERANGE
);
ERANGE
=
ErrnoToError
(
syscall
.
ERANGE
);
EAGAIN
=
ErrnoToError
(
syscall
.
EAGAIN
);
EAGAIN
=
ErrnoToError
(
syscall
.
EAGAIN
);
)
)
const
NoError
=
"No Error"
func
(
e
*
Error
)
String
()
string
{
func
(
e
*
Error
)
String
()
string
{
if
e
==
nil
{
if
e
==
nil
{
return
NoError
return
"No Error"
}
}
return
e
.
s
return
e
.
s
}
}
src/lib/os/os_file.go
View file @
1a91b9a8
...
@@ -40,7 +40,7 @@ export const (
...
@@ -40,7 +40,7 @@ export const (
)
)
export
func
Open
(
name
string
,
mode
int
,
flags
int
)
(
fd
*
FD
,
err
*
Error
)
{
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
)
return
NewFD
(
r
),
ErrnoToError
(
e
)
}
}
...
@@ -48,7 +48,7 @@ func (fd *FD) Close() *Error {
...
@@ -48,7 +48,7 @@ func (fd *FD) Close() *Error {
if
fd
==
nil
{
if
fd
==
nil
{
return
EINVAL
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
fd
.
fd
=
-
1
;
// so it can't be closed again
return
ErrnoToError
(
e
)
return
ErrnoToError
(
e
)
}
}
...
@@ -59,7 +59,7 @@ func (fd *FD) Read(b []byte) (ret int, err *Error) {
...
@@ -59,7 +59,7 @@ func (fd *FD) Read(b []byte) (ret int, err *Error) {
}
}
var
r
,
e
int64
;
var
r
,
e
int64
;
if
len
(
b
)
>
0
{
// because we access b[0]
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
{
if
r
<
0
{
r
=
0
r
=
0
}
}
...
@@ -73,7 +73,7 @@ func (fd *FD) Write(b []byte) (ret int, err *Error) {
...
@@ -73,7 +73,7 @@ func (fd *FD) Write(b []byte) (ret int, err *Error) {
}
}
var
r
,
e
int64
;
var
r
,
e
int64
;
if
len
(
b
)
>
0
{
// because we access b[0]
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
{
if
r
<
0
{
r
=
0
r
=
0
}
}
...
@@ -89,7 +89,7 @@ func (fd *FD) WriteString(s string) (ret int, err *Error) {
...
@@ -89,7 +89,7 @@ func (fd *FD) WriteString(s string) (ret int, err *Error) {
if
!
syscall
.
StringToBytes
(
b
,
s
)
{
if
!
syscall
.
StringToBytes
(
b
,
s
)
{
return
0
,
EINVAL
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
{
if
r
<
0
{
r
=
0
r
=
0
}
}
...
@@ -98,7 +98,7 @@ func (fd *FD) WriteString(s string) (ret int, err *Error) {
...
@@ -98,7 +98,7 @@ func (fd *FD) WriteString(s string) (ret int, err *Error) {
export
func
Pipe
()
(
fd1
*
FD
,
fd2
*
FD
,
err
*
Error
)
{
export
func
Pipe
()
(
fd1
*
FD
,
fd2
*
FD
,
err
*
Error
)
{
var
p
[
2
]
int64
;
var
p
[
2
]
int64
;
r
,
e
:=
syscall
.
p
ipe
(
&
p
);
r
,
e
:=
syscall
.
P
ipe
(
&
p
);
if
e
!=
0
{
if
e
!=
0
{
return
nil
,
nil
,
ErrnoToError
(
e
)
return
nil
,
nil
,
ErrnoToError
(
e
)
}
}
...
@@ -106,6 +106,6 @@ export func Pipe() (fd1 *FD, fd2 *FD, err *Error) {
...
@@ -106,6 +106,6 @@ export func Pipe() (fd1 *FD, fd2 *FD, err *Error) {
}
}
export
func
Mkdir
(
name
string
,
perm
int
)
*
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
)
return
ErrnoToError
(
e
)
}
}
src/lib/os/os_time.go
View file @
1a91b9a8
...
@@ -11,7 +11,7 @@ import (
...
@@ -11,7 +11,7 @@ import (
export
func
Time
()
(
sec
int64
,
nsec
int64
,
err
*
Error
)
{
export
func
Time
()
(
sec
int64
,
nsec
int64
,
err
*
Error
)
{
var
errno
int64
;
var
errno
int64
;
sec
,
nsec
,
errno
=
syscall
.
g
ettimeofday
();
sec
,
nsec
,
errno
=
syscall
.
G
ettimeofday
();
if
errno
!=
0
{
if
errno
!=
0
{
return
0
,
0
,
ErrnoToError
(
errno
)
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
...
@@ -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
)];
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
)
{
if
errno
<
0
||
errno
>=
len
(
error
)
{
return
"Error "
+
str
(
errno
)
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
...
@@ -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
)];
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
)
{
if
errno
<
0
||
errno
>=
len
(
error
)
{
return
"Error "
+
str
(
errno
)
return
"Error "
+
str
(
errno
)
}
}
...
...
src/lib/syscall/file_darwin.go
View file @
1a91b9a8
...
@@ -11,10 +11,10 @@ import (
...
@@ -11,10 +11,10 @@ import (
"unsafe"
;
"unsafe"
;
)
)
const
N
ameBufsize
=
512
const
n
ameBufsize
=
512
export
func
o
pen
(
name
string
,
mode
int64
,
perm
int64
)
(
ret
int64
,
errno
int64
)
{
export
func
O
pen
(
name
string
,
mode
int64
,
perm
int64
)
(
ret
int64
,
errno
int64
)
{
var
namebuf
[
N
ameBufsize
]
byte
;
var
namebuf
[
n
ameBufsize
]
byte
;
if
!
StringToBytes
(
namebuf
,
name
)
{
if
!
StringToBytes
(
namebuf
,
name
)
{
return
-
1
,
ENAMETOOLONG
return
-
1
,
ENAMETOOLONG
}
}
...
@@ -22,8 +22,8 @@ export func open(name string, mode int64, perm int64) (ret int64, errno int64) {
...
@@ -22,8 +22,8 @@ export func open(name string, mode int64, perm int64) (ret int64, errno int64) {
return
r1
,
err
;
return
r1
,
err
;
}
}
export
func
c
reat
(
name
string
,
perm
int64
)
(
ret
int64
,
errno
int64
)
{
export
func
C
reat
(
name
string
,
perm
int64
)
(
ret
int64
,
errno
int64
)
{
var
namebuf
[
N
ameBufsize
]
byte
;
var
namebuf
[
n
ameBufsize
]
byte
;
if
!
StringToBytes
(
namebuf
,
name
)
{
if
!
StringToBytes
(
namebuf
,
name
)
{
return
-
1
,
ENAMETOOLONG
return
-
1
,
ENAMETOOLONG
}
}
...
@@ -31,22 +31,22 @@ export func creat(name string, perm int64) (ret int64, errno int64) {
...
@@ -31,22 +31,22 @@ export func creat(name string, perm int64) (ret int64, errno int64) {
return
r1
,
err
;
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
);
r1
,
r2
,
err
:=
Syscall
(
SYS_CLOSE
,
fd
,
0
,
0
);
return
r1
,
err
;
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
);
r1
,
r2
,
err
:=
Syscall
(
SYS_READ
,
fd
,
int64
(
uintptr
(
unsafe
.
pointer
(
buf
))),
nbytes
);
return
r1
,
err
;
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
);
r1
,
r2
,
err
:=
Syscall
(
SYS_WRITE
,
fd
,
int64
(
uintptr
(
unsafe
.
pointer
(
buf
))),
nbytes
);
return
r1
,
err
;
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
);
r1
,
r2
,
err
:=
Syscall
(
SYS_PIPE
,
0
,
0
,
0
);
if
r1
<
0
{
if
r1
<
0
{
return
r1
,
err
;
return
r1
,
err
;
...
@@ -56,8 +56,8 @@ export func pipe(fds *[2]int64) (ret int64, errno int64) {
...
@@ -56,8 +56,8 @@ export func pipe(fds *[2]int64) (ret int64, errno int64) {
return
0
,
0
;
return
0
,
0
;
}
}
export
func
stat
(
name
string
,
buf
*
Sta
t
)
(
ret
int64
,
errno
int64
)
{
export
func
Stat
(
name
string
,
buf
*
Stat_
t
)
(
ret
int64
,
errno
int64
)
{
var
namebuf
[
N
ameBufsize
]
byte
;
var
namebuf
[
n
ameBufsize
]
byte
;
if
!
StringToBytes
(
namebuf
,
name
)
{
if
!
StringToBytes
(
namebuf
,
name
)
{
return
-
1
,
ENAMETOOLONG
return
-
1
,
ENAMETOOLONG
}
}
...
@@ -65,18 +65,18 @@ export func stat(name string, buf *Stat) (ret int64, errno int64) {
...
@@ -65,18 +65,18 @@ export func stat(name string, buf *Stat) (ret int64, errno int64) {
return
r1
,
err
;
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
);
r1
,
r2
,
err
:=
Syscall
(
SYS_LSTAT
,
int64
(
uintptr
(
unsafe
.
pointer
(
name
))),
int64
(
uintptr
(
unsafe
.
pointer
(
buf
))),
0
);
return
r1
,
err
;
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
);
r1
,
r2
,
err
:=
Syscall
(
SYS_FSTAT
,
fd
,
int64
(
uintptr
(
unsafe
.
pointer
(
buf
))),
0
);
return
r1
,
err
;
return
r1
,
err
;
}
}
export
func
u
nlink
(
name
string
)
(
ret
int64
,
errno
int64
)
{
export
func
U
nlink
(
name
string
)
(
ret
int64
,
errno
int64
)
{
var
namebuf
[
N
ameBufsize
]
byte
;
var
namebuf
[
n
ameBufsize
]
byte
;
if
!
StringToBytes
(
namebuf
,
name
)
{
if
!
StringToBytes
(
namebuf
,
name
)
{
return
-
1
,
ENAMETOOLONG
return
-
1
,
ENAMETOOLONG
}
}
...
@@ -84,13 +84,13 @@ export func unlink(name string) (ret int64, errno int64) {
...
@@ -84,13 +84,13 @@ export func unlink(name string) (ret int64, errno int64) {
return
r1
,
err
;
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
);
r1
,
r2
,
err
:=
Syscall
(
SYS_FCNTL
,
fd
,
cmd
,
arg
);
return
r1
,
err
return
r1
,
err
}
}
export
func
m
kdir
(
name
string
,
perm
int64
)
(
ret
int64
,
errno
int64
)
{
export
func
M
kdir
(
name
string
,
perm
int64
)
(
ret
int64
,
errno
int64
)
{
var
namebuf
[
N
ameBufsize
]
byte
;
var
namebuf
[
n
ameBufsize
]
byte
;
if
!
StringToBytes
(
namebuf
,
name
)
{
if
!
StringToBytes
(
namebuf
,
name
)
{
return
-
1
,
ENAMETOOLONG
return
-
1
,
ENAMETOOLONG
}
}
...
@@ -98,7 +98,7 @@ export func mkdir(name string, perm int64) (ret int64, errno int64) {
...
@@ -98,7 +98,7 @@ export func mkdir(name string, perm int64) (ret int64, errno int64) {
return
r1
,
err
;
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
);
r1
,
r2
,
err
:=
Syscall
(
SYS_DUP2
,
fd1
,
fd2
,
0
);
return
r1
,
err
;
return
r1
,
err
;
}
}
...
...
src/lib/syscall/file_linux.go
View file @
1a91b9a8
...
@@ -11,10 +11,10 @@ import (
...
@@ -11,10 +11,10 @@ import (
"unsafe"
;
"unsafe"
;
)
)
const
N
ameBufsize
=
512
const
n
ameBufsize
=
512
export
func
o
pen
(
name
string
,
mode
int64
,
perm
int64
)
(
ret
int64
,
errno
int64
)
{
export
func
O
pen
(
name
string
,
mode
int64
,
perm
int64
)
(
ret
int64
,
errno
int64
)
{
var
namebuf
[
N
ameBufsize
]
byte
;
var
namebuf
[
n
ameBufsize
]
byte
;
if
!
StringToBytes
(
namebuf
,
name
)
{
if
!
StringToBytes
(
namebuf
,
name
)
{
return
-
1
,
ENAMETOOLONG
return
-
1
,
ENAMETOOLONG
}
}
...
@@ -22,8 +22,8 @@ export func open(name string, mode int64, perm int64) (ret int64, errno int64) {
...
@@ -22,8 +22,8 @@ export func open(name string, mode int64, perm int64) (ret int64, errno int64) {
return
r1
,
err
;
return
r1
,
err
;
}
}
export
func
c
reat
(
name
string
,
perm
int64
)
(
ret
int64
,
errno
int64
)
{
export
func
C
reat
(
name
string
,
perm
int64
)
(
ret
int64
,
errno
int64
)
{
var
namebuf
[
N
ameBufsize
]
byte
;
var
namebuf
[
n
ameBufsize
]
byte
;
if
!
StringToBytes
(
namebuf
,
name
)
{
if
!
StringToBytes
(
namebuf
,
name
)
{
return
-
1
,
ENAMETOOLONG
return
-
1
,
ENAMETOOLONG
}
}
...
@@ -31,22 +31,22 @@ export func creat(name string, perm int64) (ret int64, errno int64) {
...
@@ -31,22 +31,22 @@ export func creat(name string, perm int64) (ret int64, errno int64) {
return
r1
,
err
;
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
);
r1
,
r2
,
err
:=
Syscall
(
SYS_CLOSE
,
fd
,
0
,
0
);
return
r1
,
err
;
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
);
r1
,
r2
,
err
:=
Syscall
(
SYS_READ
,
fd
,
int64
(
uintptr
(
unsafe
.
pointer
(
buf
))),
nbytes
);
return
r1
,
err
;
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
);
r1
,
r2
,
err
:=
Syscall
(
SYS_WRITE
,
fd
,
int64
(
uintptr
(
unsafe
.
pointer
(
buf
))),
nbytes
);
return
r1
,
err
;
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
;
var
t
[
2
]
int32
;
r1
,
r2
,
err
:=
Syscall
(
SYS_PIPE
,
int64
(
uintptr
(
unsafe
.
pointer
(
&
t
[
0
]))),
0
,
0
);
r1
,
r2
,
err
:=
Syscall
(
SYS_PIPE
,
int64
(
uintptr
(
unsafe
.
pointer
(
&
t
[
0
]))),
0
,
0
);
if
r1
<
0
{
if
r1
<
0
{
...
@@ -57,8 +57,8 @@ export func pipe(fds *[2]int64) (ret int64, errno int64) {
...
@@ -57,8 +57,8 @@ export func pipe(fds *[2]int64) (ret int64, errno int64) {
return
0
,
0
;
return
0
,
0
;
}
}
export
func
stat
(
name
string
,
buf
*
Sta
t
)
(
ret
int64
,
errno
int64
)
{
export
func
Stat
(
name
string
,
buf
*
Stat_
t
)
(
ret
int64
,
errno
int64
)
{
var
namebuf
[
N
ameBufsize
]
byte
;
var
namebuf
[
n
ameBufsize
]
byte
;
if
!
StringToBytes
(
namebuf
,
name
)
{
if
!
StringToBytes
(
namebuf
,
name
)
{
return
-
1
,
ENAMETOOLONG
return
-
1
,
ENAMETOOLONG
}
}
...
@@ -66,18 +66,18 @@ export func stat(name string, buf *Stat) (ret int64, errno int64) {
...
@@ -66,18 +66,18 @@ export func stat(name string, buf *Stat) (ret int64, errno int64) {
return
r1
,
err
;
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
);
r1
,
r2
,
err
:=
Syscall
(
SYS_LSTAT
,
int64
(
uintptr
(
unsafe
.
pointer
(
name
))),
int64
(
uintptr
(
unsafe
.
pointer
(
buf
))),
0
);
return
r1
,
err
;
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
);
r1
,
r2
,
err
:=
Syscall
(
SYS_FSTAT
,
fd
,
int64
(
uintptr
(
unsafe
.
pointer
(
buf
))),
0
);
return
r1
,
err
;
return
r1
,
err
;
}
}
export
func
u
nlink
(
name
string
)
(
ret
int64
,
errno
int64
)
{
export
func
U
nlink
(
name
string
)
(
ret
int64
,
errno
int64
)
{
var
namebuf
[
N
ameBufsize
]
byte
;
var
namebuf
[
n
ameBufsize
]
byte
;
if
!
StringToBytes
(
namebuf
,
name
)
{
if
!
StringToBytes
(
namebuf
,
name
)
{
return
-
1
,
ENAMETOOLONG
return
-
1
,
ENAMETOOLONG
}
}
...
@@ -85,13 +85,13 @@ export func unlink(name string) (ret int64, errno int64) {
...
@@ -85,13 +85,13 @@ export func unlink(name string) (ret int64, errno int64) {
return
r1
,
err
;
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
);
r1
,
r2
,
err
:=
Syscall
(
SYS_FCNTL
,
fd
,
cmd
,
arg
);
return
r1
,
err
return
r1
,
err
}
}
export
func
m
kdir
(
name
string
,
perm
int64
)
(
ret
int64
,
errno
int64
)
{
export
func
M
kdir
(
name
string
,
perm
int64
)
(
ret
int64
,
errno
int64
)
{
var
namebuf
[
N
ameBufsize
]
byte
;
var
namebuf
[
n
ameBufsize
]
byte
;
if
!
StringToBytes
(
namebuf
,
name
)
{
if
!
StringToBytes
(
namebuf
,
name
)
{
return
-
1
,
ENAMETOOLONG
return
-
1
,
ENAMETOOLONG
}
}
...
@@ -99,7 +99,7 @@ export func mkdir(name string, perm int64) (ret int64, errno int64) {
...
@@ -99,7 +99,7 @@ export func mkdir(name string, perm int64) (ret int64, errno int64) {
return
r1
,
err
;
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
);
r1
,
r2
,
err
:=
Syscall
(
SYS_DUP2
,
fd1
,
fd2
,
0
);
return
r1
,
err
;
return
r1
,
err
;
}
}
...
...
src/lib/syscall/socket_darwin.go
View file @
1a91b9a8
...
@@ -17,33 +17,33 @@ export func SockaddrToSockaddrInet6(s *Sockaddr) *SockaddrInet6;
...
@@ -17,33 +17,33 @@ export func SockaddrToSockaddrInet6(s *Sockaddr) *SockaddrInet6;
export
func
SockaddrInet4ToSockaddr
(
s
*
SockaddrInet4
)
*
Sockaddr
;
export
func
SockaddrInet4ToSockaddr
(
s
*
SockaddrInet4
)
*
Sockaddr
;
export
func
SockaddrInet6ToSockaddr
(
s
*
SockaddrInet6
)
*
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
);
r1
,
r2
,
e
:=
Syscall
(
SYS_SOCKET
,
domain
,
proto
,
typ
);
return
r1
,
e
return
r1
,
e
}
}
export
func
c
onnect
(
fd
int64
,
sa
*
Sockaddr
)
(
ret
int64
,
err
int64
)
{
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
));
r1
,
r2
,
e
:=
Syscall
(
SYS_CONNECT
,
fd
,
int64
(
uintptr
(
unsafe
.
pointer
(
sa
))),
int64
(
sa
.
L
en
));
return
r1
,
e
return
r1
,
e
}
}
export
func
b
ind
(
fd
int64
,
sa
*
Sockaddr
)
(
ret
int64
,
err
int64
)
{
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
));
r1
,
r2
,
e
:=
Syscall
(
SYS_BIND
,
fd
,
int64
(
uintptr
(
unsafe
.
pointer
(
sa
))),
int64
(
sa
.
L
en
));
return
r1
,
e
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
);
r1
,
r2
,
e
:=
Syscall
(
SYS_LISTEN
,
fd
,
n
,
0
);
return
r1
,
e
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
;
var
n
int32
=
SizeofSockaddr
;
r1
,
r2
,
e
:=
Syscall
(
SYS_ACCEPT
,
fd
,
int64
(
uintptr
(
unsafe
.
pointer
(
sa
))),
int64
(
uintptr
(
unsafe
.
pointer
(
&
n
))));
r1
,
r2
,
e
:=
Syscall
(
SYS_ACCEPT
,
fd
,
int64
(
uintptr
(
unsafe
.
pointer
(
sa
))),
int64
(
uintptr
(
unsafe
.
pointer
(
&
n
))));
return
r1
,
e
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
{
if
fd
<
0
{
return
-
1
,
EINVAL
return
-
1
,
EINVAL
}
}
...
@@ -51,47 +51,47 @@ export func setsockopt(fd, level, opt, valueptr, length int64) (ret int64, err i
...
@@ -51,47 +51,47 @@ export func setsockopt(fd, level, opt, valueptr, length int64) (ret int64, err i
return
r1
,
e
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
);
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
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
;
var
tv
Timeval
;
nsec
+=
999
;
nsec
+=
999
;
tv
.
s
ec
=
int64
(
nsec
/
1000000000
);
tv
.
S
ec
=
int64
(
nsec
/
1000000000
);
tv
.
u
sec
=
uint32
(
nsec
%
1000000000
);
tv
.
U
sec
=
uint32
(
nsec
%
1000000000
);
r1
,
e
:=
s
etsockopt
(
fd
,
level
,
opt
,
int64
(
uintptr
(
unsafe
.
pointer
(
&
tv
))),
4
);
r1
,
e
:=
S
etsockopt
(
fd
,
level
,
opt
,
int64
(
uintptr
(
unsafe
.
pointer
(
&
tv
))),
4
);
return
e
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
;
var
l
Linger
;
if
sec
!=
0
{
if
sec
!=
0
{
l
.
y
es
=
1
;
l
.
Y
es
=
1
;
l
.
s
ec
=
int32
(
sec
);
l
.
S
ec
=
int32
(
sec
);
}
else
{
}
else
{
l
.
y
es
=
0
;
l
.
Y
es
=
0
;
l
.
s
ec
=
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
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);
r1, r2, err := Syscall6(SYS_GETSOCKOPT, fd, level, opt, valueptr, lenptr, 0);
return r1, err;
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
);
r1
,
r2
,
err
:=
Syscall
(
SYS_KQUEUE
,
0
,
0
,
0
);
return
r1
,
err
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
;
var
nchange
,
changeptr
,
nevent
,
eventptr
int64
;
nchange
=
0
;
nchange
=
0
;
changeptr
=
0
;
changeptr
=
0
;
...
...
src/lib/syscall/socket_linux.go
View file @
1a91b9a8
...
@@ -17,8 +17,8 @@ export func SockaddrToSockaddrInet6(s *Sockaddr) *SockaddrInet6;
...
@@ -17,8 +17,8 @@ export func SockaddrToSockaddrInet6(s *Sockaddr) *SockaddrInet6;
export
func
SockaddrInet4ToSockaddr
(
s
*
SockaddrInet4
)
*
Sockaddr
;
export
func
SockaddrInet4ToSockaddr
(
s
*
SockaddrInet4
)
*
Sockaddr
;
export
func
SockaddrInet6ToSockaddr
(
s
*
SockaddrInet6
)
*
Sockaddr
;
export
func
SockaddrInet6ToSockaddr
(
s
*
SockaddrInet6
)
*
Sockaddr
;
func
Len
(
s
*
Sockaddr
)
int64
{
func
sa
Len
(
s
*
Sockaddr
)
int64
{
switch
s
.
f
amily
{
switch
s
.
F
amily
{
case
AF_UNIX
:
case
AF_UNIX
:
return
SizeofSockaddrUnix
;
return
SizeofSockaddrUnix
;
case
AF_INET
:
case
AF_INET
:
...
@@ -29,33 +29,33 @@ func Len(s *Sockaddr) int64 {
...
@@ -29,33 +29,33 @@ func Len(s *Sockaddr) int64 {
return
0
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
);
r1
,
r2
,
e
:=
Syscall
(
SYS_SOCKET
,
domain
,
proto
,
typ
);
return
r1
,
e
return
r1
,
e
}
}
export
func
c
onnect
(
fd
int64
,
sa
*
Sockaddr
)
(
ret
int64
,
err
int64
)
{
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
));
r1
,
r2
,
e
:=
Syscall
(
SYS_CONNECT
,
fd
,
int64
(
uintptr
(
unsafe
.
pointer
(
sa
))),
sa
Len
(
sa
));
return
r1
,
e
return
r1
,
e
}
}
export
func
b
ind
(
fd
int64
,
sa
*
Sockaddr
)
(
ret
int64
,
err
int64
)
{
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
));
r1
,
r2
,
e
:=
Syscall
(
SYS_BIND
,
fd
,
int64
(
uintptr
(
unsafe
.
pointer
(
sa
))),
sa
Len
(
sa
));
return
r1
,
e
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
);
r1
,
r2
,
e
:=
Syscall
(
SYS_LISTEN
,
fd
,
n
,
0
);
return
r1
,
e
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
;
var
n
int32
=
SizeofSockaddr
;
r1
,
r2
,
e
:=
Syscall
(
SYS_ACCEPT
,
fd
,
int64
(
uintptr
(
unsafe
.
pointer
(
sa
))),
int64
(
uintptr
(
unsafe
.
pointer
(
&
n
))));
r1
,
r2
,
e
:=
Syscall
(
SYS_ACCEPT
,
fd
,
int64
(
uintptr
(
unsafe
.
pointer
(
sa
))),
int64
(
uintptr
(
unsafe
.
pointer
(
&
n
))));
return
r1
,
e
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
{
if
fd
<
0
{
return
-
1
,
EINVAL
return
-
1
,
EINVAL
}
}
...
@@ -63,31 +63,31 @@ export func setsockopt(fd, level, opt, valueptr, length int64) (ret int64, err i
...
@@ -63,31 +63,31 @@ export func setsockopt(fd, level, opt, valueptr, length int64) (ret int64, err i
return
r1
,
e
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
);
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
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
;
var
tv
Timeval
;
nsec
+=
999
;
nsec
+=
999
;
tv
.
s
ec
=
int64
(
nsec
/
1000000000
);
tv
.
S
ec
=
int64
(
nsec
/
1000000000
);
tv
.
u
sec
=
uint64
(
nsec
%
1000000000
);
tv
.
U
sec
=
uint64
(
nsec
%
1000000000
);
r1
,
e
:=
s
etsockopt
(
fd
,
level
,
opt
,
int64
(
uintptr
(
unsafe
.
pointer
(
&
tv
))),
4
);
r1
,
e
:=
S
etsockopt
(
fd
,
level
,
opt
,
int64
(
uintptr
(
unsafe
.
pointer
(
&
tv
))),
4
);
return
e
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
;
var
l
Linger
;
if
sec
!=
0
{
if
sec
!=
0
{
l
.
y
es
=
1
;
l
.
Y
es
=
1
;
l
.
s
ec
=
int32
(
sec
)
l
.
S
ec
=
int32
(
sec
)
}
else
{
}
else
{
l
.
y
es
=
0
;
l
.
Y
es
=
0
;
l
.
s
ec
=
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
return
err
}
}
...
@@ -98,17 +98,17 @@ export func getsockopt(fd, level, opt, valueptr, lenptr int64) (ret int64, errno
...
@@ -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
);
r1
,
r2
,
err
:=
syscall
.
Syscall
(
SYS_EPOLL_CREATE
,
size
,
0
,
0
);
return
r1
,
err
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
);
r1
,
r2
,
err
:=
syscall
.
Syscall6
(
SYS_EPOLL_CTL
,
epfd
,
op
,
fd
,
int64
(
uintptr
(
unsafe
.
pointer
(
ev
))),
0
,
0
);
return
err
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
;
var
evptr
,
nev
int64
;
if
ev
!=
nil
&&
len
(
ev
)
>
0
{
if
ev
!=
nil
&&
len
(
ev
)
>
0
{
nev
=
int64
(
len
(
ev
));
nev
=
int64
(
len
(
ev
));
...
...
src/lib/syscall/time_amd64_darwin.go
View file @
1a91b9a8
...
@@ -6,7 +6,7 @@ package syscall
...
@@ -6,7 +6,7 @@ package syscall
import
syscall
"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
// The "1" in the call is the timeval pointer, which must be
// non-zero but is otherwise unused. The results
// non-zero but is otherwise unused. The results
// are returned in r1, r2.
// are returned in r1, r2.
...
@@ -17,8 +17,8 @@ export func gettimeofday() (sec, nsec, errno int64) {
...
@@ -17,8 +17,8 @@ export func gettimeofday() (sec, nsec, errno int64) {
return
r1
,
r2
*
1000
,
0
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
ns
+=
999
;
// round up
tv
.
s
ec
=
int64
(
ns
/
1000000000
);
tv
.
S
ec
=
int64
(
ns
/
1000000000
);
tv
.
u
sec
=
uint32
(
ns
%
1000000000
/
1000
);
tv
.
U
sec
=
uint32
(
ns
%
1000000000
/
1000
);
}
}
src/lib/syscall/time_amd64_linux.go
View file @
1a91b9a8
...
@@ -9,17 +9,17 @@ import (
...
@@ -9,17 +9,17 @@ import (
"unsafe"
;
"unsafe"
;
)
)
export
func
g
ettimeofday
()
(
sec
,
nsec
,
errno
int64
)
{
export
func
G
ettimeofday
()
(
sec
,
nsec
,
errno
int64
)
{
var
tv
Timeval
;
var
tv
Timeval
;
r1
,
r2
,
e
:=
Syscall
(
SYS_GETTIMEOFDAY
,
int64
(
uintptr
(
unsafe
.
pointer
(
&
tv
))),
0
,
0
);
r1
,
r2
,
e
:=
Syscall
(
SYS_GETTIMEOFDAY
,
int64
(
uintptr
(
unsafe
.
pointer
(
&
tv
))),
0
,
0
);
if
e
!=
0
{
if
e
!=
0
{
return
0
,
0
,
e
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
ns
+=
999
;
// round up
tv
.
s
ec
=
int64
(
ns
/
1000000000
);
tv
.
S
ec
=
int64
(
ns
/
1000000000
);
tv
.
u
sec
=
uint64
(
ns
%
1000000000
/
1000
);
tv
.
U
sec
=
uint64
(
ns
%
1000000000
/
1000
);
}
}
src/lib/syscall/types_amd64_darwin.go
View file @
1a91b9a8
...
@@ -11,35 +11,35 @@ package syscall
...
@@ -11,35 +11,35 @@ package syscall
// Time
// Time
export
type
Timespec
struct
{
export
type
Timespec
struct
{
s
ec
int64
;
S
ec
int64
;
n
sec
uint64
;
N
sec
uint64
;
}
}
export
type
Timeval
struct
{
export
type
Timeval
struct
{
s
ec
int64
;
S
ec
int64
;
u
sec
uint32
;
U
sec
uint32
;
}
}
// Processes
// Processes
export
type
Rusage
struct
{
export
type
Rusage
struct
{
u
time
Timeval
;
U
time
Timeval
;
s
time
Timeval
;
S
time
Timeval
;
m
axrss
int64
;
M
axrss
int64
;
i
xrss
int64
;
I
xrss
int64
;
i
drss
int64
;
I
drss
int64
;
i
srss
int64
;
I
srss
int64
;
m
inflt
int64
;
M
inflt
int64
;
m
ajflt
int64
;
M
ajflt
int64
;
n
swap
int64
;
N
swap
int64
;
i
nblock
int64
;
I
nblock
int64
;
o
ublock
int64
;
O
ublock
int64
;
m
sgsnd
int64
;
M
sgsnd
int64
;
m
sgrcv
int64
;
M
sgrcv
int64
;
n
signals
int64
;
N
signals
int64
;
n
vcsw
int64
;
N
vcsw
int64
;
n
ivcsw
int64
;
N
ivcsw
int64
;
}
}
...
@@ -67,26 +67,26 @@ export const (
...
@@ -67,26 +67,26 @@ export const (
FD_CLOEXEC
=
1
;
FD_CLOEXEC
=
1
;
)
)
export
type
Stat
struct
{
export
type
Stat
_t
struct
{
d
ev
uint32
;
D
ev
uint32
;
m
ode
uint16
;
M
ode
uint16
;
n
link
uint16
;
N
link
uint16
;
i
no
uint64
;
I
no
uint64
;
u
id
uint32
;
U
id
uint32
;
g
id
uint32
;
G
id
uint32
;
r
dev
uint32
;
R
dev
uint32
;
p
ad1
uint32
;
P
ad1
uint32
;
a
time
Timespec
;
A
time
Timespec
;
m
time
Timespec
;
M
time
Timespec
;
c
time
Timespec
;
C
time
Timespec
;
b
irthtime
Timespec
;
B
irthtime
Timespec
;
s
ize
uint64
;
S
ize
uint64
;
b
locks
uint64
;
B
locks
uint64
;
b
lksize
uint32
;
B
lksize
uint32
;
f
lags
uint32
;
F
lags
uint32
;
g
en
uint32
;
G
en
uint32
;
l
spare
uint32
;
L
spare
uint32
;
q
spare
[
2
]
uint64
;
Q
spare
[
2
]
uint64
;
}
}
...
@@ -128,41 +128,41 @@ export const (
...
@@ -128,41 +128,41 @@ export const (
)
)
export
type
SockaddrUnix
struct
{
export
type
SockaddrUnix
struct
{
l
en
byte
;
L
en
byte
;
f
amily
byte
;
F
amily
byte
;
p
ath
[
104
]
byte
P
ath
[
104
]
byte
}
}
export
const
SizeofSockaddrUnix
=
106
export
const
SizeofSockaddrUnix
=
106
export
type
SockaddrInet4
struct
{
export
type
SockaddrInet4
struct
{
l
en
byte
;
L
en
byte
;
f
amily
byte
;
F
amily
byte
;
p
ort
[
2
]
byte
;
P
ort
[
2
]
byte
;
a
ddr
[
4
]
byte
;
A
ddr
[
4
]
byte
;
z
ero
[
8
]
byte
Z
ero
[
8
]
byte
}
}
export
const
SizeofSockaddrInet4
=
16
export
const
SizeofSockaddrInet4
=
16
export
type
SockaddrInet6
struct
{
export
type
SockaddrInet6
struct
{
l
en
byte
;
L
en
byte
;
f
amily
byte
;
F
amily
byte
;
p
ort
[
2
]
byte
;
P
ort
[
2
]
byte
;
f
lowinfo
[
4
]
byte
;
F
lowinfo
[
4
]
byte
;
a
ddr
[
16
]
byte
;
A
ddr
[
16
]
byte
;
s
copeid
[
4
]
byte
;
S
copeid
[
4
]
byte
;
}
}
export
const
SizeofSockaddrInet6
=
28
export
const
SizeofSockaddrInet6
=
28
export
type
Sockaddr
struct
{
export
type
Sockaddr
struct
{
l
en
byte
;
L
en
byte
;
f
amily
byte
;
F
amily
byte
;
o
paque
[
126
]
byte
O
paque
[
126
]
byte
}
}
export
const
SizeofSockaddr
=
128
export
const
SizeofSockaddr
=
128
export
type
Linger
struct
{
export
type
Linger
struct
{
y
es
int32
;
Y
es
int32
;
s
ec
int32
;
S
ec
int32
;
}
}
...
@@ -201,12 +201,12 @@ export const (
...
@@ -201,12 +201,12 @@ export const (
EV_ERROR
=
0x4000
EV_ERROR
=
0x4000
)
)
export
type
Kevent
struct
{
export
type
Kevent
_t
struct
{
i
dent
int64
;
I
dent
int64
;
f
ilter
int16
;
F
ilter
int16
;
f
lags
uint16
;
F
lags
uint16
;
f
flags
uint32
;
F
flags
uint32
;
d
ata
int64
;
D
ata
int64
;
u
data
int64
;
U
data
int64
;
}
}
src/lib/syscall/types_amd64_linux.go
View file @
1a91b9a8
...
@@ -11,35 +11,35 @@ package syscall
...
@@ -11,35 +11,35 @@ package syscall
// Time
// Time
export
type
Timespec
struct
{
export
type
Timespec
struct
{
s
ec
int64
;
S
ec
int64
;
n
sec
uint64
;
N
sec
uint64
;
}
}
export
type
Timeval
struct
{
export
type
Timeval
struct
{
s
ec
int64
;
S
ec
int64
;
u
sec
uint64
;
U
sec
uint64
;
}
}
// Processes
// Processes
export
type
Rusage
struct
{
export
type
Rusage
struct
{
u
time
Timeval
;
U
time
Timeval
;
s
time
Timeval
;
S
time
Timeval
;
m
axrss
int64
;
M
axrss
int64
;
i
xrss
int64
;
I
xrss
int64
;
i
drss
int64
;
I
drss
int64
;
i
srss
int64
;
I
srss
int64
;
m
inflt
int64
;
M
inflt
int64
;
m
ajflt
int64
;
M
ajflt
int64
;
n
swap
int64
;
N
swap
int64
;
i
nblock
int64
;
I
nblock
int64
;
o
ublock
int64
;
O
ublock
int64
;
m
sgsnd
int64
;
M
sgsnd
int64
;
m
sgrcv
int64
;
M
sgrcv
int64
;
n
signals
int64
;
N
signals
int64
;
n
vcsw
int64
;
N
vcsw
int64
;
n
ivcsw
int64
;
N
ivcsw
int64
;
}
}
...
@@ -67,21 +67,21 @@ export const (
...
@@ -67,21 +67,21 @@ export const (
FD_CLOEXEC
=
1
;
FD_CLOEXEC
=
1
;
)
)
export
type
Stat
struct
{
export
type
Stat
_t
struct
{
d
ev
uint64
;
D
ev
uint64
;
i
no
uint64
;
I
no
uint64
;
n
link
uint64
;
N
link
uint64
;
m
ode
uint32
;
M
ode
uint32
;
u
id
uint32
;
U
id
uint32
;
g
id
uint32
;
G
id
uint32
;
_pad0
uint32
;
_pad0
uint32
;
r
dev
uint64
;
R
dev
uint64
;
s
ize
int64
;
S
ize
int64
;
b
lksize
int64
;
B
lksize
int64
;
b
locks
int64
;
B
locks
int64
;
a
time
Timespec
;
A
time
Timespec
;
m
time
Timespec
;
M
time
Timespec
;
c
time
Timespec
;
C
time
Timespec
;
_unused
[
3
]
int64
_unused
[
3
]
int64
}
}
...
@@ -134,37 +134,37 @@ export const (
...
@@ -134,37 +134,37 @@ export const (
)
)
export
type
SockaddrUnix
struct
{
export
type
SockaddrUnix
struct
{
f
amily
uint16
;
F
amily
uint16
;
p
ath
[
108
]
byte
P
ath
[
108
]
byte
}
}
export
const
SizeofSockaddrUnix
=
110
export
const
SizeofSockaddrUnix
=
110
export
type
SockaddrInet4
struct
{
export
type
SockaddrInet4
struct
{
f
amily
uint16
;
F
amily
uint16
;
p
ort
[
2
]
byte
;
P
ort
[
2
]
byte
;
a
ddr
[
4
]
byte
;
A
ddr
[
4
]
byte
;
z
ero
[
8
]
byte
Z
ero
[
8
]
byte
}
}
export
const
SizeofSockaddrInet4
=
16
export
const
SizeofSockaddrInet4
=
16
export
type
SockaddrInet6
struct
{
export
type
SockaddrInet6
struct
{
f
amily
uint16
;
F
amily
uint16
;
p
ort
[
2
]
byte
;
P
ort
[
2
]
byte
;
f
lowinfo
[
4
]
byte
;
F
lowinfo
[
4
]
byte
;
a
ddr
[
16
]
byte
;
A
ddr
[
16
]
byte
;
s
copeid
[
4
]
byte
;
S
copeid
[
4
]
byte
;
}
}
export
const
SizeofSockaddrInet6
=
28
export
const
SizeofSockaddrInet6
=
28
export
type
Sockaddr
struct
{
export
type
Sockaddr
struct
{
f
amily
uint16
;
F
amily
uint16
;
o
paque
[
126
]
byte
O
paque
[
126
]
byte
}
}
export
const
SizeofSockaddr
=
128
export
const
SizeofSockaddr
=
128
export
type
Linger
struct
{
export
type
Linger
struct
{
y
es
int32
;
Y
es
int32
;
s
ec
int32
;
S
ec
int32
;
}
}
...
@@ -187,7 +187,7 @@ export const (
...
@@ -187,7 +187,7 @@ export const (
)
)
export
type
EpollEvent
struct
{
export
type
EpollEvent
struct
{
e
vents
uint32
;
E
vents
uint32
;
f
d
int32
;
F
d
int32
;
p
ad
int32
;
P
ad
int32
;
}
}
src/lib/time/tick.go
View file @
1a91b9a8
...
@@ -42,7 +42,7 @@ func ticker(ns int64, c chan int64) {
...
@@ -42,7 +42,7 @@ func ticker(ns int64, c chan int64) {
when
+=
ns
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
);
syscall
.
Syscall6
(
syscall
.
SYS_SELECT
,
0
,
0
,
0
,
0
,
int64
(
uintptr
(
unsafe
.
pointer
(
&
tv
))),
0
);
now
=
time
.
Nanoseconds
();
now
=
time
.
Nanoseconds
();
c
<-
now
;
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