Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Lx9FNLG2CqeBbVGGd9bFsP
58 lines
1.1 KiB
Go
58 lines
1.1 KiB
Go
package simagent
|
|
|
|
import "strings"
|
|
|
|
// cmpOID compares dotted OIDs arc by arc as unsigned integers. A leading dot
|
|
// is ignored.
|
|
func cmpOID(a, b string) int {
|
|
a, b = strings.TrimPrefix(a, "."), strings.TrimPrefix(b, ".")
|
|
for {
|
|
if a == "" || b == "" {
|
|
switch {
|
|
case a == "" && b == "":
|
|
return 0
|
|
case a == "":
|
|
return -1
|
|
}
|
|
return 1
|
|
}
|
|
var x, y uint64
|
|
i, j := 0, 0
|
|
for i < len(a) && a[i] != '.' {
|
|
x = x*10 + uint64(a[i]-'0')
|
|
i++
|
|
}
|
|
for j < len(b) && b[j] != '.' {
|
|
y = y*10 + uint64(b[j]-'0')
|
|
j++
|
|
}
|
|
if x != y {
|
|
if x < y {
|
|
return -1
|
|
}
|
|
return 1
|
|
}
|
|
a, b = strings.TrimPrefix(a[i:], "."), strings.TrimPrefix(b[j:], ".")
|
|
}
|
|
}
|
|
|
|
// hasOIDPrefix reports whether oid is strictly below prefix.
|
|
func hasOIDPrefix(oid, prefix string) bool {
|
|
return len(oid) > len(prefix) && oid[len(prefix)] == '.' && oid[:len(prefix)] == prefix
|
|
}
|
|
|
|
func validOID(s string) bool {
|
|
if s == "" {
|
|
return false
|
|
}
|
|
prev := byte('.')
|
|
for i := 0; i < len(s); i++ {
|
|
c := s[i]
|
|
if c == '.' && prev == '.' || c != '.' && (c < '0' || c > '9') {
|
|
return false
|
|
}
|
|
prev = c
|
|
}
|
|
return prev != '.'
|
|
}
|