libgo: update to Go 1.8 release candidate 1
Compiler changes: * Change map assignment to use mapassign and assign value directly. * Change string iteration to use decoderune, faster for ASCII strings. * Change makeslice to take int, and use makeslice64 for larger values. * Add new noverflow field to hmap struct used for maps. Unresolved problems, to be fixed later: * Commented out test in go/types/sizes_test.go that doesn't compile. * Commented out reflect.TestStructOf test for padding after zero-sized field. Reviewed-on: https://go-review.googlesource.com/35231 gotools/: Updates for Go 1.8rc1. * Makefile.am (go_cmd_go_files): Add bug.go. (s-zdefaultcc): Write defaultPkgConfig. * Makefile.in: Rebuild. From-SVN: r244456
This commit is contained in:
parent
829afb8f05
commit
c2047754c3
983 changed files with 69318 additions and 17662 deletions
|
@ -63,7 +63,7 @@ func parsePlan9Addr(s string) (ip IP, iport int, err error) {
|
|||
return nil, 0, &ParseError{Type: "IP address", Text: s}
|
||||
}
|
||||
}
|
||||
p, _, ok := dtoi(s[i+1:], 0)
|
||||
p, _, ok := dtoi(s[i+1:])
|
||||
if !ok {
|
||||
return nil, 0, &ParseError{Type: "port", Text: s}
|
||||
}
|
||||
|
@ -119,6 +119,11 @@ func startPlan9(ctx context.Context, net string, addr Addr) (ctl *os.File, dest,
|
|||
return
|
||||
}
|
||||
|
||||
if port > 65535 {
|
||||
err = InvalidAddrError("port should be < 65536")
|
||||
return
|
||||
}
|
||||
|
||||
clone, dest, err := queryCS1(ctx, proto, ip, port)
|
||||
if err != nil {
|
||||
return
|
||||
|
@ -193,6 +198,9 @@ func dialPlan9(ctx context.Context, net string, laddr, raddr Addr) (fd *netFD, e
|
|||
}
|
||||
|
||||
func dialPlan9Blocking(ctx context.Context, net string, laddr, raddr Addr) (fd *netFD, err error) {
|
||||
if isWildcard(raddr) {
|
||||
raddr = toLocal(raddr, net)
|
||||
}
|
||||
f, dest, proto, name, err := startPlan9(ctx, net, raddr)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
@ -213,7 +221,7 @@ func dialPlan9Blocking(ctx context.Context, net string, laddr, raddr Addr) (fd *
|
|||
f.Close()
|
||||
return nil, err
|
||||
}
|
||||
return newFD(proto, name, f, data, laddr, raddr)
|
||||
return newFD(proto, name, nil, f, data, laddr, raddr)
|
||||
}
|
||||
|
||||
func listenPlan9(ctx context.Context, net string, laddr Addr) (fd *netFD, err error) {
|
||||
|
@ -232,11 +240,11 @@ func listenPlan9(ctx context.Context, net string, laddr Addr) (fd *netFD, err er
|
|||
f.Close()
|
||||
return nil, err
|
||||
}
|
||||
return newFD(proto, name, f, nil, laddr, nil)
|
||||
return newFD(proto, name, nil, f, nil, laddr, nil)
|
||||
}
|
||||
|
||||
func (fd *netFD) netFD() (*netFD, error) {
|
||||
return newFD(fd.net, fd.n, fd.ctl, fd.data, fd.laddr, fd.raddr)
|
||||
return newFD(fd.net, fd.n, fd.listen, fd.ctl, fd.data, fd.laddr, fd.raddr)
|
||||
}
|
||||
|
||||
func (fd *netFD) acceptPlan9() (nfd *netFD, err error) {
|
||||
|
@ -245,27 +253,59 @@ func (fd *netFD) acceptPlan9() (nfd *netFD, err error) {
|
|||
return nil, err
|
||||
}
|
||||
defer fd.readUnlock()
|
||||
f, err := os.Open(fd.dir + "/listen")
|
||||
listen, err := os.Open(fd.dir + "/listen")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
var buf [16]byte
|
||||
n, err := f.Read(buf[:])
|
||||
n, err := listen.Read(buf[:])
|
||||
if err != nil {
|
||||
f.Close()
|
||||
listen.Close()
|
||||
return nil, err
|
||||
}
|
||||
name := string(buf[:n])
|
||||
ctl, err := os.OpenFile(netdir+"/"+fd.net+"/"+name+"/ctl", os.O_RDWR, 0)
|
||||
if err != nil {
|
||||
listen.Close()
|
||||
return nil, err
|
||||
}
|
||||
data, err := os.OpenFile(netdir+"/"+fd.net+"/"+name+"/data", os.O_RDWR, 0)
|
||||
if err != nil {
|
||||
f.Close()
|
||||
listen.Close()
|
||||
ctl.Close()
|
||||
return nil, err
|
||||
}
|
||||
raddr, err := readPlan9Addr(fd.net, netdir+"/"+fd.net+"/"+name+"/remote")
|
||||
if err != nil {
|
||||
listen.Close()
|
||||
ctl.Close()
|
||||
data.Close()
|
||||
f.Close()
|
||||
return nil, err
|
||||
}
|
||||
return newFD(fd.net, name, f, data, fd.laddr, raddr)
|
||||
return newFD(fd.net, name, listen, ctl, data, fd.laddr, raddr)
|
||||
}
|
||||
|
||||
func isWildcard(a Addr) bool {
|
||||
var wildcard bool
|
||||
switch a := a.(type) {
|
||||
case *TCPAddr:
|
||||
wildcard = a.isWildcard()
|
||||
case *UDPAddr:
|
||||
wildcard = a.isWildcard()
|
||||
case *IPAddr:
|
||||
wildcard = a.isWildcard()
|
||||
}
|
||||
return wildcard
|
||||
}
|
||||
|
||||
func toLocal(a Addr, net string) Addr {
|
||||
switch a := a.(type) {
|
||||
case *TCPAddr:
|
||||
a.IP = loopbackIP(net)
|
||||
case *UDPAddr:
|
||||
a.IP = loopbackIP(net)
|
||||
case *IPAddr:
|
||||
a.IP = loopbackIP(net)
|
||||
}
|
||||
return a
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue