diff options
author | Ian Lance Taylor <iant@golang.org> | 2020-01-02 15:05:27 -0800 |
---|---|---|
committer | Ian Lance Taylor <iant@golang.org> | 2020-01-21 23:53:22 -0800 |
commit | 5a8ea165926cb0737ab03bc48c18dc5198ab5305 (patch) | |
tree | 962dc3357c57f019f85658f99e2e753e30201c27 /libgo/go/net/interface_plan9.go | |
parent | 6ac6529e155c9baa0aaaed7aca06bd38ebda5b43 (diff) | |
download | gcc-5a8ea165926cb0737ab03bc48c18dc5198ab5305.zip gcc-5a8ea165926cb0737ab03bc48c18dc5198ab5305.tar.gz gcc-5a8ea165926cb0737ab03bc48c18dc5198ab5305.tar.bz2 |
libgo: update to Go1.14beta1
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/214297
Diffstat (limited to 'libgo/go/net/interface_plan9.go')
-rw-r--r-- | libgo/go/net/interface_plan9.go | 61 |
1 files changed, 29 insertions, 32 deletions
diff --git a/libgo/go/net/interface_plan9.go b/libgo/go/net/interface_plan9.go index 8fe9138..1295017 100644 --- a/libgo/go/net/interface_plan9.go +++ b/libgo/go/net/interface_plan9.go @@ -143,8 +143,8 @@ func interfaceAddrTable(ifi *Interface) ([]Addr, error) { ifcs = []Interface{*ifi} } - addrs := make([]Addr, len(ifcs)) - for i, ifc := range ifcs { + var addrs []Addr + for _, ifc := range ifcs { status := ifc.Name + "/status" statusf, err := open(status) if err != nil { @@ -157,39 +157,36 @@ func interfaceAddrTable(ifi *Interface) ([]Addr, error) { if _, ok := statusf.readLine(); !ok { return nil, errors.New("cannot read header line for interface: " + status) } - line, ok := statusf.readLine() - if !ok { - return nil, errors.New("cannot read IP address for interface: " + status) - } - // This assumes only a single address for the interface. - fields := getFields(line) - if len(fields) < 1 { - return nil, errors.New("cannot parse IP address for interface: " + status) - } - addr := fields[0] - ip := ParseIP(addr) - if ip == nil { - return nil, errors.New("cannot parse IP address for interface: " + status) - } + for line, ok := statusf.readLine(); ok; line, ok = statusf.readLine() { + fields := getFields(line) + if len(fields) < 1 { + return nil, errors.New("cannot parse IP address for interface: " + status) + } + addr := fields[0] + ip := ParseIP(addr) + if ip == nil { + return nil, errors.New("cannot parse IP address for interface: " + status) + } - // The mask is represented as CIDR relative to the IPv6 address. - // Plan 9 internal representation is always IPv6. - maskfld := fields[1] - maskfld = maskfld[1:] - pfxlen, _, ok := dtoi(maskfld) - if !ok { - return nil, errors.New("cannot parse network mask for interface: " + status) - } - var mask IPMask - if ip.To4() != nil { // IPv4 or IPv6 IPv4-mapped address - mask = CIDRMask(pfxlen-8*len(v4InV6Prefix), 8*IPv4len) - } - if ip.To16() != nil && ip.To4() == nil { // IPv6 address - mask = CIDRMask(pfxlen, 8*IPv6len) - } + // The mask is represented as CIDR relative to the IPv6 address. + // Plan 9 internal representation is always IPv6. + maskfld := fields[1] + maskfld = maskfld[1:] + pfxlen, _, ok := dtoi(maskfld) + if !ok { + return nil, errors.New("cannot parse network mask for interface: " + status) + } + var mask IPMask + if ip.To4() != nil { // IPv4 or IPv6 IPv4-mapped address + mask = CIDRMask(pfxlen-8*len(v4InV6Prefix), 8*IPv4len) + } + if ip.To16() != nil && ip.To4() == nil { // IPv6 address + mask = CIDRMask(pfxlen, 8*IPv6len) + } - addrs[i] = &IPNet{IP: ip, Mask: mask} + addrs = append(addrs, &IPNet{IP: ip, Mask: mask}) + } } return addrs, nil |