parse.mx raw

   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