fix: darwin calculate correct tunIndex

This commit is contained in:
wwqgtxx 2024-06-01 13:34:02 +08:00
parent 59fd3cffe3
commit be3d121ec6

View File

@ -24,6 +24,7 @@ import (
E "github.com/sagernet/sing/common/exceptions"
F "github.com/sagernet/sing/common/format"
"github.com/sagernet/sing/common/ranges"
"golang.org/x/exp/slices"
)
var InterfaceName = "Meta"
@ -60,19 +61,21 @@ func CalculateInterfaceName(name string) (tunName string) {
return
}
tunIndex := 0
indexSet := make(map[int]struct{})
indexArr := make([]int, 0, len(interfaces))
for _, netInterface := range interfaces {
if strings.HasPrefix(netInterface.Name, tunName) {
index, parseErr := strconv.ParseInt(netInterface.Name[len(tunName):], 10, 16)
if parseErr == nil {
indexSet[int(index)] = struct{}{}
indexArr = append(indexArr, int(index))
}
}
}
for index := range indexSet {
slices.Sort(indexArr)
indexArr = slices.Compact(indexArr)
for _, index := range indexArr {
if index == tunIndex {
tunIndex += 1
} else { // indexSet already sorted and distinct, so this tunIndex nobody used
} else { // indexArr already sorted and distinct, so this tunIndex nobody used
break
}
}