1 // Copyright 2022 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
4 5 package cpu
6 7 import "strconv"
8 9 // parseRelease parses a dot-separated version number. It follows the semver
10 // syntax, but allows the minor and patch versions to be elided.
11 //
12 // This is a copy of the Go runtime's parseRelease from
13 // https://golang.org/cl/209597.
14 func parseRelease(rel []byte) (major, minor, patch int, ok bool) {
15 // Strip anything after a dash or plus.
16 for i := range len(rel) {
17 if rel[i] == '-' || rel[i] == '+' {
18 rel = rel[:i]
19 break
20 }
21 }
22 23 next := func() (int, bool) {
24 for i := range len(rel) {
25 if rel[i] == '.' {
26 ver, err := strconv.Atoi(rel[:i])
27 rel = rel[i+1:]
28 return ver, err == nil
29 }
30 }
31 ver, err := strconv.Atoi(rel)
32 rel = ""
33 return ver, err == nil
34 }
35 if major, ok = next(); !ok || rel == "" {
36 return
37 }
38 if minor, ok = next(); !ok || rel == "" {
39 return
40 }
41 patch, ok = next()
42 return
43 }
44