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 5package unix 6 7import ( 8 "syscall" 9) 10 11// KernelVersion returns major and minor kernel version numbers, parsed from 12// the syscall.Uname's Release field, or 0, 0 if the version can't be obtained 13// or parsed. 14// 15// Currently only implemented for Linux. 16func KernelVersion() (major, minor int) { 17 var uname syscall.Utsname 18 if err := syscall.Uname(&uname); err != nil { 19 return 20 } 21 22 var ( 23 values [2]int 24 value, vi int 25 ) 26 for _, c := range uname.Release { 27 if '0' <= c && c <= '9' { 28 value = (value * 10) + int(c-'0') 29 } else { 30 // Note that we're assuming N.N.N here. 31 // If we see anything else, we are likely to mis-parse it. 32 values[vi] = value 33 vi++ 34 if vi >= len(values) { 35 break 36 } 37 value = 0 38 } 39 } 40 41 return values[0], values[1] 42} 43