1
0
mirror of https://github.com/vlang/v.git synced 2023-08-10 21:13:21 +03:00

os: cleanup the output of os.uname() on windows (#17066)

* os: (WinOS) mimic current practices of `busybox` and `coreutils`

* os: trim any possible surounding whitespace
This commit is contained in:
Roy Ivy III 2023-01-22 03:59:42 -06:00 committed by GitHub
parent 0bafd237ee
commit dd55365dee
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -458,16 +458,24 @@ pub fn debugger_present() bool {
return C.IsDebuggerPresent() return C.IsDebuggerPresent()
} }
// `uname` is not standardized, so mimic current practices
// busybox-v1.35.0 * `busybox uname -a` => "Windows_NT HOSTNAME 10.0 19044 x86_64 MS/Windows"
// rust/coreutils-v0.0.17 * `coreutils uname -a` => `Windows_NT HOSTNAME 10.0 19044 x86_64 MS/Windows (Windows 10)`
// Python3 => `uname_result(system='Windows', node='HOSTNAME', release='10', version='10.0.19044', machine='AMD64')`
// ref: [NT Version Info](https://en.wikipedia.org/wiki/Windows_NT) @@ <https://archive.is/GnnvF>
// ref: [NT Version Info (detailed)](https://en.wikipedia.org/wiki/Comparison_of_Microsoft_Windows_versions#NT_Kernel-based_2)
pub fn uname() Uname { pub fn uname() Uname {
sys_and_ver := execute('cmd /c ver').output.split('[')
nodename := hostname() nodename := hostname()
machine := getenv('PROCESSOR_ARCHITECTURE') // ToDO: environment variables have low reliability; check for another quick way
machine := getenv('PROCESSOR_ARCHITECTURE') // * note: 'AMD64' == 'x86_64' (not standardized, but 'x86_64' use is more common; but, python == 'AMD64')
version_info := execute('cmd /d/c ver').output
version_n := (version_info.split(' '))[3].replace(']', '').trim_space()
return Uname{ return Uname{
sysname: sys_and_ver[0].trim_space() sysname: 'Windows_NT' // as of 2022-12, WinOS has only two possible kernels ~ 'Windows_NT' or 'Windows_9x'
nodename: nodename nodename: nodename
release: sys_and_ver[1].replace(']', '') machine: machine.trim_space()
version: sys_and_ver[0] + '[' + sys_and_ver[1] release: (version_n.split('.'))[0..2].join('.').trim_space() // Major.minor-only == "primary"/release version
machine: machine version: (version_n.split('.'))[2].trim_space()
} }
} }