You've already forked platform-info
mirror of
https://github.com/uutils/platform-info.git
synced 2026-06-10 15:48:45 -07:00
@@ -0,0 +1,17 @@
|
||||
# CodeCov configuration
|
||||
# ref: <https://docs.codecov.com/docs/common-recipe-list>
|
||||
|
||||
#comment: false ## disable PR coverage commentary posts
|
||||
|
||||
coverage:
|
||||
status:
|
||||
# `informational: true` == show status but prevent blocking/failure of CI
|
||||
project:
|
||||
default:
|
||||
informational: true
|
||||
changes:
|
||||
default:
|
||||
informational: true
|
||||
patch:
|
||||
default:
|
||||
informational: true
|
||||
+107
-86
@@ -1,89 +1,112 @@
|
||||
# spell-checker:ignore (rust) clippy rustfmt rustup RUSTC RUSTFLAGS Zpanic Cpanic RUSTDOCFLAGS Ccodegen Coverflow profraw
|
||||
# spell-checker:ignore (abbrevs/acronyms) MSVC (bash) alnum esac (jargon) maint (utils) codecov grcov lcov (vars) tempfile () ntempfile
|
||||
# spell-checker:ignore (rust) clippy rustdoc rustfmt rustup RUSTC RUSTFLAGS Zpanic Cpanic RUSTDOCFLAGS Ccodegen Coverflow profraw
|
||||
# spell-checker:ignore (abbrevs/acronyms) MSVC (bash) alnum esac (jargon) maint (utils) codecov grcov lcov markdownlint sccache (vars) tempfile () ntempfile uutils
|
||||
# spell-checker:ignore (people) dtolnay ; Swatinem ; DavidAnson
|
||||
|
||||
on: [push, pull_request]
|
||||
|
||||
name: Basic CI
|
||||
name: CI
|
||||
|
||||
env:
|
||||
PROJECT_NAME: platform-info
|
||||
PROJECT_DESC: 'Cross-platform host machine info'
|
||||
PROJECT_AUTH: 'uutils'
|
||||
# * `rust` caching configuration
|
||||
RUSTC_WRAPPER: 'sccache'
|
||||
SCCACHE_GHA_ENABLED: 'true'
|
||||
|
||||
# terminate execution of the current workflow group when there is a newer changeset detected
|
||||
# * the group is defined by "WORKFLOW_NAME-REF", where REF can be a branch, tag, or pull-request reference
|
||||
# * workflows executing for the default branch are excluded from termination
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: ${{ github.ref != format('refs/heads/{0}', github.event.repository.default_branch) }}
|
||||
|
||||
jobs:
|
||||
check:
|
||||
name: cargo check
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
os: [ubuntu-latest, macOS-latest, windows-latest]
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- name: Install `rust` toolchain
|
||||
shell: bash
|
||||
env:
|
||||
TOOLCHAIN: stable
|
||||
run: |
|
||||
## Install `rust` toolchain
|
||||
rm -f "${HOME}/.cargo/bin/"{rustfmt,cargo-fmt}
|
||||
rustup toolchain install ${TOOLCHAIN} -c rustfmt --profile minimal
|
||||
rustup default ${TOOLCHAIN}
|
||||
- run: cargo check
|
||||
- run: cargo check --examples
|
||||
|
||||
test:
|
||||
name: cargo test
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
os: [ubuntu-latest, macOS-latest, windows-latest]
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- name: Install `rust` toolchain
|
||||
shell: bash
|
||||
env:
|
||||
TOOLCHAIN: stable
|
||||
run: |
|
||||
## Install `rust` toolchain
|
||||
rm -f "${HOME}/.cargo/bin/"{rustfmt,cargo-fmt}
|
||||
rustup toolchain install ${TOOLCHAIN} -c rustfmt --profile minimal
|
||||
rustup default ${TOOLCHAIN}
|
||||
- run: cargo test
|
||||
env:
|
||||
RUST_BACKTRACE: '1'
|
||||
|
||||
fmt:
|
||||
name: cargo fmt
|
||||
style_format:
|
||||
name: Style/format
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- name: Install `rust` toolchain
|
||||
shell: bash
|
||||
env:
|
||||
TOOLCHAIN: stable
|
||||
run: |
|
||||
## Install `rust` toolchain
|
||||
rm -f "${HOME}/.cargo/bin/"{rustfmt,cargo-fmt}
|
||||
rustup toolchain install ${TOOLCHAIN} -c rustfmt --profile minimal
|
||||
rustup default ${TOOLCHAIN}
|
||||
- run: rustup component add rustfmt
|
||||
- uses: dtolnay/rust-toolchain@stable
|
||||
with:
|
||||
components: rustfmt
|
||||
- uses: Swatinem/rust-cache@v2
|
||||
- uses: mozilla-actions/sccache-action@v0.0.3
|
||||
- run: cargo fmt --all -- --check
|
||||
|
||||
clippy:
|
||||
name: cargo clippy
|
||||
style_lint:
|
||||
name: Style/lint
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
os: [ubuntu-latest, macOS-latest, windows-latest]
|
||||
os: [ubuntu-latest, macos-latest, windows-latest]
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- name: Install `rust` toolchain
|
||||
- uses: dtolnay/rust-toolchain@stable
|
||||
with:
|
||||
components: clippy
|
||||
- uses: Swatinem/rust-cache@v2
|
||||
- uses: mozilla-actions/sccache-action@v0.0.3
|
||||
- uses: DavidAnson/markdownlint-cli2-action@v10
|
||||
with:
|
||||
command: fix
|
||||
globs: |
|
||||
*.md
|
||||
docs/src/**/*.md
|
||||
src/**/*.md
|
||||
- run: cargo clippy --all-targets -- -D warnings
|
||||
|
||||
style_spellcheck:
|
||||
name: Style/spellcheck
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: streetsidesoftware/cspell-action@v2 ## ref: <https://github.com/streetsidesoftware/cspell-action>
|
||||
with:
|
||||
incremental_files_only: false
|
||||
verbose: true
|
||||
|
||||
test:
|
||||
name: Build/Test
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
os: [ubuntu-latest, macos-latest, windows-latest]
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: dtolnay/rust-toolchain@stable
|
||||
- uses: Swatinem/rust-cache@v2
|
||||
- uses: mozilla-actions/sccache-action@v0.0.3
|
||||
- name: Build/Test Info
|
||||
shell: bash
|
||||
env:
|
||||
TOOLCHAIN: stable
|
||||
run: |
|
||||
## Install `rust` toolchain
|
||||
rm -f "${HOME}/.cargo/bin/"{rustfmt,cargo-fmt}
|
||||
rustup toolchain install ${TOOLCHAIN} -c rustfmt --profile minimal
|
||||
rustup default ${TOOLCHAIN}
|
||||
- run: rustup component add clippy
|
||||
- run: cargo clippy -- -D warnings
|
||||
- run: cargo clippy --examples -- -D warnings
|
||||
## Build/Test Info
|
||||
# repo/commit info
|
||||
echo "## repo/commit"
|
||||
echo GITHUB_REPOSITORY=${GITHUB_REPOSITORY}
|
||||
echo GITHUB_REF=${GITHUB_REF}
|
||||
echo GITHUB_SHA=${GITHUB_SHA}
|
||||
# environment
|
||||
echo "## environment"
|
||||
echo "CI='${CI}'"
|
||||
echo "PWD='${PWD}'"
|
||||
# tooling info display
|
||||
echo "## tooling"
|
||||
which gcc >/dev/null 2>&1 && (gcc --version | head -1) || true
|
||||
rustup -V 2>/dev/null
|
||||
rustup show active-toolchain
|
||||
cargo -V
|
||||
rustc -V
|
||||
# dependencies
|
||||
echo "## crate dependency list"
|
||||
# * note: for applications, use `--locked` for `cargo fetch`` and `cargo tree`) and commit *Cargo.lock*
|
||||
cargo fetch --quiet
|
||||
cargo tree --edges=no-dev --prefix=none --workspace | grep -vE "\(.*[/\\]${GITHUB_REPOSITORY##*/}\)" | sort --unique
|
||||
- run: cargo test --all-features -- --test-threads 1
|
||||
env:
|
||||
RUST_BACKTRACE: '1'
|
||||
|
||||
coverage:
|
||||
name: Code Coverage
|
||||
@@ -92,9 +115,9 @@ jobs:
|
||||
fail-fast: true
|
||||
matrix:
|
||||
job:
|
||||
- { os: ubuntu-latest, features: unix }
|
||||
- { os: macos-latest, features: macos }
|
||||
- { os: windows-latest, features: windows }
|
||||
- { os: ubuntu-latest }
|
||||
- { os: macos-latest }
|
||||
- { os: windows-latest }
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- name: Initialize/setup workflow
|
||||
@@ -112,7 +135,9 @@ jobs:
|
||||
outputs TOOLCHAIN
|
||||
# target-specific options
|
||||
# * CARGO_FEATURES_OPTION
|
||||
CARGO_FEATURES_OPTION='--all -- --check' ; ## default to '--all-features' for code coverage
|
||||
CARGO_FEATURES_OPTION='--all-features' ; ## default to '--all-features' for code coverage
|
||||
if [ -n "${{ matrix.job.features }}" ]; then CARGO_FEATURES_OPTION='--features=${{ matrix.job.features }}' ; fi
|
||||
outputs CARGO_FEATURES_OPTION
|
||||
# * CODECOV_FLAGS
|
||||
CODECOV_FLAGS=$( echo "${{ matrix.job.os }}" | sed 's/[^[:alnum:]]/_/g' )
|
||||
outputs CODECOV_FLAGS
|
||||
@@ -123,16 +148,12 @@ jobs:
|
||||
outputs COVERAGE_REPORT_DIR PROFILES_DIR
|
||||
LLVM_PROFILE_FILE="${PROFILES_DIR}/profile-%p-%m.profraw"
|
||||
outputs LLVM_PROFILE_FILE
|
||||
- name: Install `rust` toolchain
|
||||
shell: bash
|
||||
env:
|
||||
TOOLCHAIN: ${{ steps.vars.outputs.TOOLCHAIN }}
|
||||
run: |
|
||||
## Install `rust` toolchain
|
||||
rm -f "${HOME}/.cargo/bin/"{rustfmt,cargo-fmt}
|
||||
rustup toolchain install ${TOOLCHAIN} -c rustfmt --profile minimal
|
||||
rustup component add --toolchain ${TOOLCHAIN} llvm-tools
|
||||
rustup default ${TOOLCHAIN}
|
||||
- uses: dtolnay/rust-toolchain@master
|
||||
with:
|
||||
toolchain: ${{ steps.vars.outputs.TOOLCHAIN }}
|
||||
components: llvm-tools
|
||||
- uses: Swatinem/rust-cache@v2
|
||||
- uses: mozilla-actions/sccache-action@v0.0.3
|
||||
- run: cargo install grcov
|
||||
- name: Test
|
||||
shell: bash
|
||||
@@ -144,7 +165,7 @@ jobs:
|
||||
RUSTDOCFLAGS: ''
|
||||
run: |
|
||||
## Test
|
||||
cargo test ${{ steps.vars.outputs.CARGO_FEATURES_OPTION }} --no-fail-fast
|
||||
cargo test ${{ steps.vars.outputs.CARGO_FEATURES_OPTION }} --no-fail-fast -- --test-threads 1
|
||||
- name: Test examples
|
||||
shell: bash
|
||||
env:
|
||||
@@ -154,8 +175,8 @@ jobs:
|
||||
RUSTFLAGS: '-C instrument-coverage'
|
||||
RUSTDOCFLAGS: ''
|
||||
run: |
|
||||
## Test
|
||||
cargo test ${{ steps.vars.outputs.CARGO_FEATURES_OPTION }} --examples --no-fail-fast
|
||||
## Test examples
|
||||
cargo test ${{ steps.vars.outputs.CARGO_FEATURES_OPTION }} --examples --no-fail-fast -- --test-threads 1
|
||||
- name: Generate coverage data (via `grcov`)
|
||||
id: coverage
|
||||
shell: bash
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
## spell-checker:disable
|
||||
Alex Lyon <arcterus@mail.com> <alexlyon@baidu.com>
|
||||
Ingvar Stepanyan <rreverser@google.com> <me@rreverser.com>
|
||||
Sylvestre Ledru <sylvestre@debian.org> <sledru@mozilla.com>
|
||||
#
|
||||
dependabot[bot] <dependabot[bot]@users.noreply.github.com> <49699333+dependabot[bot]@users.noreply.github.com>
|
||||
dependabot[bot] <dependabot[bot]@users.noreply.github.com> <27856297+dependabot-preview[bot]@users.noreply.github.com>
|
||||
dependabot[bot] <dependabot[bot]@users.noreply.github.com> <dependabot-preview[bot]@users.noreply.github.com>
|
||||
#
|
||||
renovate[bot] <renovate[bot]@users.noreply.github.com> <29139614+renovate[bot]@users.noreply.github.com>
|
||||
Vendored
+32
@@ -0,0 +1,32 @@
|
||||
// `cspell` settings
|
||||
{
|
||||
// version of the setting file
|
||||
"version": "0.2",
|
||||
|
||||
// spelling language
|
||||
"language": "en",
|
||||
|
||||
// custom dictionaries
|
||||
"dictionaries": ["acronyms+names", "jargon", "people", "shell", "workspace"],
|
||||
"dictionaryDefinitions": [
|
||||
{ "name": "acronyms+names", "path": "./cspell.dictionaries/acronyms+names.wordlist.txt" },
|
||||
{ "name": "jargon", "path": "./cspell.dictionaries/jargon.wordlist.txt" },
|
||||
{ "name": "people", "path": "./cspell.dictionaries/people.wordlist.txt" },
|
||||
{ "name": "shell", "path": "./cspell.dictionaries/shell.wordlist.txt" },
|
||||
{ "name": "workspace", "path": "./cspell.dictionaries/workspace.wordlist.txt" }
|
||||
],
|
||||
|
||||
// files to ignore (globs supported)
|
||||
"ignorePaths": [
|
||||
"Cargo.lock",
|
||||
"target/**",
|
||||
"tests/**/fixtures/**",
|
||||
"vendor/**"
|
||||
],
|
||||
|
||||
// words to ignore (even if they are in the flagWords)
|
||||
"ignoreWords": [],
|
||||
|
||||
// words to always consider correct
|
||||
"words": []
|
||||
}
|
||||
@@ -0,0 +1,69 @@
|
||||
# * abbreviations / acronyms
|
||||
AIX
|
||||
ASLR # address space layout randomization
|
||||
AST # abstract syntax tree
|
||||
CICD # continuous integration/deployment
|
||||
CPU
|
||||
CPUs
|
||||
DevOps
|
||||
Ext3
|
||||
FIFO
|
||||
FIFOs
|
||||
FQDN # fully qualified domain name
|
||||
GID # group ID
|
||||
GIDs
|
||||
GNU
|
||||
GNUEABI
|
||||
GNUEABIhf
|
||||
JFS
|
||||
MSRV # minimum supported rust version
|
||||
MSVC
|
||||
NixOS
|
||||
POSIX
|
||||
POSIXLY
|
||||
RISC
|
||||
RISCV
|
||||
RNG # random number generator
|
||||
RNGs
|
||||
ReiserFS
|
||||
Solaris
|
||||
UID # user ID
|
||||
UIDs
|
||||
UUID # universally unique identifier
|
||||
WASI
|
||||
WASM
|
||||
XFS
|
||||
aarch
|
||||
flac
|
||||
impls
|
||||
lzma
|
||||
|
||||
# * names
|
||||
BusyBox
|
||||
BusyTest
|
||||
Codacy
|
||||
Cygwin
|
||||
Deno
|
||||
EditorConfig
|
||||
FreeBSD
|
||||
Gmail
|
||||
GNU
|
||||
Illumos
|
||||
Irix
|
||||
libfuzzer
|
||||
MS-DOS
|
||||
MSDOS
|
||||
MacOS
|
||||
MinGW
|
||||
Minix
|
||||
NetBSD
|
||||
Novell
|
||||
OpenBSD
|
||||
POSIX
|
||||
PowerPC
|
||||
SELinux
|
||||
SkyPack
|
||||
Solaris
|
||||
SysV
|
||||
Xenix
|
||||
Yargs
|
||||
+155
@@ -0,0 +1,155 @@
|
||||
AFAICT
|
||||
alloc
|
||||
arity
|
||||
autogenerate
|
||||
autogenerated
|
||||
autogenerates
|
||||
bitmask
|
||||
bitwise
|
||||
bytewise
|
||||
canonicalization
|
||||
canonicalize
|
||||
canonicalizing
|
||||
codepoint
|
||||
codepoints
|
||||
codegen
|
||||
colorizable
|
||||
colorize
|
||||
coprime
|
||||
consts
|
||||
conv
|
||||
cyclomatic
|
||||
dedup
|
||||
deduplication
|
||||
demangle
|
||||
denoland
|
||||
deque
|
||||
dequeue
|
||||
dev
|
||||
devs
|
||||
discoverability
|
||||
duplicative
|
||||
dsync
|
||||
endianness
|
||||
enqueue
|
||||
errored
|
||||
executable
|
||||
executables
|
||||
exponentiate
|
||||
eval
|
||||
falsey
|
||||
fileio
|
||||
filesystem
|
||||
filesystems
|
||||
flamegraph
|
||||
fullblock
|
||||
getfacl
|
||||
gibi
|
||||
gibibytes
|
||||
glob
|
||||
globbing
|
||||
hardcode
|
||||
hardcoded
|
||||
hardcoding
|
||||
hardfloat
|
||||
hardlink
|
||||
hardlinks
|
||||
hasher
|
||||
hashsums
|
||||
infile
|
||||
iflag
|
||||
iflags
|
||||
kibi
|
||||
kibibytes
|
||||
libacl
|
||||
lcase
|
||||
lossily
|
||||
lstat
|
||||
mebi
|
||||
mebibytes
|
||||
mergeable
|
||||
microbenchmark
|
||||
microbenchmarks
|
||||
microbenchmarking
|
||||
multibyte
|
||||
multicall
|
||||
noatime
|
||||
nocache
|
||||
nocreat
|
||||
noctty
|
||||
noerror
|
||||
nofollow
|
||||
nolinks
|
||||
nonblock
|
||||
nonportable
|
||||
nonprinting
|
||||
notrunc
|
||||
noxfer
|
||||
ofile
|
||||
oflag
|
||||
oflags
|
||||
peekable
|
||||
performant
|
||||
precompiled
|
||||
precompute
|
||||
preload
|
||||
prepend
|
||||
prepended
|
||||
primality
|
||||
pseudoprime
|
||||
pseudoprimes
|
||||
quantiles
|
||||
readonly
|
||||
reparse
|
||||
seedable
|
||||
semver
|
||||
semiprime
|
||||
semiprimes
|
||||
setfacl
|
||||
shortcode
|
||||
shortcodes
|
||||
siginfo
|
||||
sigusr
|
||||
subcommand
|
||||
subexpression
|
||||
submodule
|
||||
sync
|
||||
symlink
|
||||
symlinks
|
||||
syscall
|
||||
syscalls
|
||||
tokenize
|
||||
toolchain
|
||||
truthy
|
||||
ucase
|
||||
unbuffered
|
||||
udeps
|
||||
unescape
|
||||
unintuitive
|
||||
unprefixed
|
||||
unportable
|
||||
unsync
|
||||
urand
|
||||
whitespace
|
||||
wordlist
|
||||
wordlists
|
||||
|
||||
# * abbreviations
|
||||
consts
|
||||
deps
|
||||
dev
|
||||
maint
|
||||
proc
|
||||
procs
|
||||
|
||||
# * constants
|
||||
xffff
|
||||
|
||||
# * variables
|
||||
delim
|
||||
errno
|
||||
progname
|
||||
retval
|
||||
subdir
|
||||
val
|
||||
vals
|
||||
+182
@@ -0,0 +1,182 @@
|
||||
Akira Hayakawa
|
||||
Akira
|
||||
Hayakawa
|
||||
Alan Andrade
|
||||
Alan
|
||||
Andrade
|
||||
Aleksander Bielawski
|
||||
Aleksander
|
||||
Bielawski
|
||||
Alex Lyon
|
||||
Alex
|
||||
Lyon
|
||||
Alexander Batischev
|
||||
Alexander
|
||||
Batischev
|
||||
Alexander Fomin
|
||||
Alexander
|
||||
Fomin
|
||||
Anthony Deschamps
|
||||
Anthony
|
||||
Deschamps
|
||||
Árni Dagur
|
||||
Árni
|
||||
Dagur
|
||||
Ben Eills
|
||||
Ben
|
||||
Eills
|
||||
Ben Hirsch
|
||||
Ben
|
||||
Hirsch
|
||||
Benoit Benedetti
|
||||
Benoit
|
||||
Benedetti
|
||||
Boden Garman
|
||||
Boden
|
||||
Garman
|
||||
Chirag B Jadwani
|
||||
Chirag
|
||||
Jadwani
|
||||
Derek Chiang
|
||||
Derek
|
||||
Chiang
|
||||
Dorota Kapturkiewicz
|
||||
Dorota
|
||||
Kapturkiewicz
|
||||
Evgeniy Klyuchikov
|
||||
Evgeniy
|
||||
Klyuchikov
|
||||
Fangxu Hu
|
||||
Fangxu
|
||||
Hu
|
||||
Gil Cottle
|
||||
Gil
|
||||
Cottle
|
||||
Haitao Li
|
||||
Haitao
|
||||
Li
|
||||
Inokentiy Babushkin
|
||||
Inokentiy
|
||||
Babushkin
|
||||
Jan Scheer * jhscheer
|
||||
Jan
|
||||
Scheer
|
||||
jhscheer
|
||||
Jeremiah Peschka
|
||||
Jeremiah
|
||||
Peschka
|
||||
Jian Zeng
|
||||
Jian
|
||||
Zeng
|
||||
Jimmy Lu
|
||||
Jimmy
|
||||
Lu
|
||||
Joao Oliveira
|
||||
Joao
|
||||
Oliveira
|
||||
Jordi Boggiano
|
||||
Jordi
|
||||
Boggiano
|
||||
Jordy Dickinson
|
||||
Jordy
|
||||
Dickinson
|
||||
Joseph Crail
|
||||
Joseph
|
||||
Crail
|
||||
Joshua S Miller
|
||||
Joshua
|
||||
Miller
|
||||
Konstantin Pospelov
|
||||
Konstantin
|
||||
Pospelov
|
||||
Maciej Dziardziel
|
||||
Maciej
|
||||
Dziardziel
|
||||
Martin Kysel
|
||||
Martin
|
||||
Kysel
|
||||
Michael Debertol
|
||||
Michael
|
||||
Debertol
|
||||
Michael Gehring
|
||||
Michael
|
||||
Gehring
|
||||
Mitchell Mebane
|
||||
Mitchell
|
||||
Mebane
|
||||
Morten Olsen Lysgaard
|
||||
Morten
|
||||
Olsen
|
||||
Lysgaard
|
||||
Nicholas Juszczak
|
||||
Nicholas
|
||||
Juszczak
|
||||
Nick Platt
|
||||
Nick
|
||||
Platt
|
||||
Orvar Segerström
|
||||
Orvar
|
||||
Segerström
|
||||
Peter Atashian
|
||||
Peter
|
||||
Atashian
|
||||
Robert Swinford
|
||||
Robert
|
||||
Swinford
|
||||
Rolf Morel
|
||||
Rolf
|
||||
Morel
|
||||
Roman Gafiyatullin
|
||||
Roman
|
||||
Gafiyatullin
|
||||
Roy Ivy III * rivy
|
||||
Roy
|
||||
Ivy
|
||||
III
|
||||
rivy
|
||||
Sergey "Shnatsel" Davidoff
|
||||
Sergey Shnatsel Davidoff
|
||||
Sergey
|
||||
Shnatsel
|
||||
Davidoff
|
||||
Sokovikov Evgeniy
|
||||
Sokovikov
|
||||
Evgeniy
|
||||
Sunrin SHIMURA
|
||||
Sunrin
|
||||
SHIMURA
|
||||
Sylvestre Ledru
|
||||
Sylvestre
|
||||
Ledru
|
||||
T Jameson Little
|
||||
Jameson
|
||||
Little
|
||||
Thomas Queiroz
|
||||
Thomas
|
||||
Queiroz
|
||||
Tobias Bohumir Schottdorf
|
||||
Tobias
|
||||
Bohumir
|
||||
Schottdorf
|
||||
Virgile Andreani
|
||||
Virgile
|
||||
Andreani
|
||||
Vsevolod Velichko
|
||||
Vsevolod
|
||||
Velichko
|
||||
Wiktor Kuropatwa
|
||||
Wiktor
|
||||
Kuropatwa
|
||||
Yury Krivopalov
|
||||
Yury
|
||||
Krivopalov
|
||||
|
||||
KokaKiwi
|
||||
Mahkoh
|
||||
Smigle00
|
||||
Smigle00
|
||||
Smigle
|
||||
anonymousknight
|
||||
kwantam
|
||||
nicoo
|
||||
gmnsii
|
||||
+101
@@ -0,0 +1,101 @@
|
||||
# * Mac
|
||||
clonefile
|
||||
|
||||
# * POSIX
|
||||
TMPDIR
|
||||
adduser
|
||||
csh
|
||||
globstar
|
||||
inotify
|
||||
localtime
|
||||
mksh
|
||||
mountinfo
|
||||
mountpoint
|
||||
mtab
|
||||
nullglob
|
||||
passwd
|
||||
pipefail
|
||||
popd
|
||||
ptmx
|
||||
pushd
|
||||
setarch
|
||||
sh
|
||||
sudo
|
||||
sudoedit
|
||||
tcsh
|
||||
tzselect
|
||||
urandom
|
||||
wtmp
|
||||
zsh
|
||||
|
||||
# * Windows
|
||||
APPDATA
|
||||
COMSPEC
|
||||
HKCU
|
||||
HKLM
|
||||
HOMEDRIVE
|
||||
HOMEPATH
|
||||
LOCALAPPDATA
|
||||
PATHEXT
|
||||
PATHEXT
|
||||
SYSTEMROOT
|
||||
USERDOMAIN
|
||||
USERNAME
|
||||
USERPROFILE
|
||||
procmon
|
||||
|
||||
# * `git`
|
||||
gitattributes
|
||||
gitignore
|
||||
|
||||
# * `make` (`gmake`)
|
||||
CURDIR
|
||||
GNUMAKEFLAGS
|
||||
GNUMakefile
|
||||
LIBPATTERNS
|
||||
MAKECMDGOALS
|
||||
MAKEFILES
|
||||
MAKEFLAGS
|
||||
MAKELEVEL
|
||||
MAKESHELL
|
||||
SHELLSTATUS
|
||||
VPATH
|
||||
abspath
|
||||
addprefix
|
||||
addsuffix
|
||||
endef
|
||||
findstring
|
||||
firstword
|
||||
ifeq
|
||||
ifneq
|
||||
lastword
|
||||
notdir
|
||||
patsubst
|
||||
|
||||
|
||||
# * `npm`
|
||||
preversion
|
||||
|
||||
# * utilities
|
||||
cachegrind
|
||||
chglog
|
||||
codespell
|
||||
commitlint
|
||||
dprint
|
||||
dtrace
|
||||
gcov
|
||||
gmake
|
||||
grcov
|
||||
grep
|
||||
markdownlint
|
||||
rerast
|
||||
rollup
|
||||
sed
|
||||
selinuxenabled
|
||||
sestatus
|
||||
vdir
|
||||
wslpath
|
||||
xargs
|
||||
|
||||
# * directories
|
||||
sbin
|
||||
+336
@@ -0,0 +1,336 @@
|
||||
# * cargo
|
||||
cdylib
|
||||
rlib
|
||||
|
||||
# * crates
|
||||
advapi
|
||||
advapi32-sys
|
||||
aho-corasick
|
||||
backtrace
|
||||
blake2b_simd
|
||||
bstr
|
||||
bytecount
|
||||
byteorder
|
||||
chacha
|
||||
chrono
|
||||
conv
|
||||
corasick
|
||||
crossterm
|
||||
exacl
|
||||
filetime
|
||||
formatteriteminfo
|
||||
fsext
|
||||
fundu
|
||||
getopts
|
||||
getrandom
|
||||
globset
|
||||
indicatif
|
||||
itertools
|
||||
lscolors
|
||||
mdbook
|
||||
memchr
|
||||
multifilereader
|
||||
onig
|
||||
ouroboros
|
||||
peekreader
|
||||
quickcheck
|
||||
rand_chacha
|
||||
ringbuffer
|
||||
rlimit
|
||||
rstest
|
||||
smallvec
|
||||
tempdir
|
||||
tempfile
|
||||
termion
|
||||
termios
|
||||
termsize
|
||||
termwidth
|
||||
textwrap
|
||||
thiserror
|
||||
ureq
|
||||
walkdir
|
||||
winapi
|
||||
xattr
|
||||
|
||||
# * rust/rustc
|
||||
RUSTDOCFLAGS
|
||||
RUSTFLAGS
|
||||
clippy
|
||||
rustc
|
||||
rustfmt
|
||||
rustup
|
||||
#
|
||||
bitor # BitOr trait function
|
||||
bitxor # BitXor trait function
|
||||
concat
|
||||
fract
|
||||
powi
|
||||
println
|
||||
repr
|
||||
rfind
|
||||
struct
|
||||
structs
|
||||
substr
|
||||
splitn
|
||||
trunc
|
||||
uninit
|
||||
|
||||
# * uutils
|
||||
basenc
|
||||
chcon
|
||||
chgrp
|
||||
chmod
|
||||
chown
|
||||
chroot
|
||||
cksum
|
||||
csplit
|
||||
dircolors
|
||||
hashsum
|
||||
hostid
|
||||
logname
|
||||
mkdir
|
||||
mkfifo
|
||||
mknod
|
||||
mktemp
|
||||
nohup
|
||||
nproc
|
||||
numfmt
|
||||
pathchk
|
||||
printenv
|
||||
printf
|
||||
readlink
|
||||
realpath
|
||||
relpath
|
||||
rmdir
|
||||
runcon
|
||||
shuf
|
||||
sprintf
|
||||
stdbuf
|
||||
stty
|
||||
tsort
|
||||
uname
|
||||
unexpand
|
||||
whoami
|
||||
|
||||
# * vars/errno
|
||||
errno
|
||||
EACCES
|
||||
EBADF
|
||||
EBUSY
|
||||
EEXIST
|
||||
EINVAL
|
||||
ENODATA
|
||||
ENOENT
|
||||
ENOSYS
|
||||
ENOTEMPTY
|
||||
EOPNOTSUPP
|
||||
EPERM
|
||||
EROFS
|
||||
|
||||
# * vars/fcntl
|
||||
F_GETFL
|
||||
GETFL
|
||||
fcntl
|
||||
vmsplice
|
||||
|
||||
# * vars/libc
|
||||
COMFOLLOW
|
||||
FILENO
|
||||
FTSENT
|
||||
HOSTSIZE
|
||||
IDSIZE
|
||||
IFBLK
|
||||
IFCHR
|
||||
IFDIR
|
||||
IFIFO
|
||||
IFLNK
|
||||
IFMT
|
||||
IFREG
|
||||
IFSOCK
|
||||
IRGRP
|
||||
IROTH
|
||||
IRUSR
|
||||
ISGID
|
||||
ISUID
|
||||
ISVTX
|
||||
IWGRP
|
||||
IWOTH
|
||||
IWUSR
|
||||
IXGRP
|
||||
IXOTH
|
||||
IXUSR
|
||||
LINESIZE
|
||||
NAMESIZE
|
||||
RTLD_NEXT
|
||||
RTLD
|
||||
SIGINT
|
||||
SIGKILL
|
||||
SIGTERM
|
||||
SYS_fdatasync
|
||||
SYS_syncfs
|
||||
USERSIZE
|
||||
accpath
|
||||
addrinfo
|
||||
addrlen
|
||||
blocksize
|
||||
canonname
|
||||
chroot
|
||||
dlsym
|
||||
execvp
|
||||
fdatasync
|
||||
freeaddrinfo
|
||||
getaddrinfo
|
||||
getegid
|
||||
geteuid
|
||||
getgid
|
||||
getgrgid
|
||||
getgrnam
|
||||
getgrouplist
|
||||
getgroups
|
||||
getpwent
|
||||
getpwnam
|
||||
getpwuid
|
||||
getuid
|
||||
inode
|
||||
inodes
|
||||
isatty
|
||||
lchown
|
||||
pathlen
|
||||
setgid
|
||||
setgroups
|
||||
settime
|
||||
setuid
|
||||
socktype
|
||||
statfs
|
||||
statp
|
||||
statvfs
|
||||
strcmp
|
||||
strerror
|
||||
strlen
|
||||
syncfs
|
||||
umask
|
||||
waitpid
|
||||
wcslen
|
||||
|
||||
# * vars/nix
|
||||
iovec
|
||||
unistd
|
||||
|
||||
# * vars/signals
|
||||
SIGPIPE
|
||||
|
||||
# * vars/std
|
||||
CString
|
||||
pathbuf
|
||||
|
||||
# * vars/stat
|
||||
bavail
|
||||
bfree
|
||||
bsize
|
||||
ffree
|
||||
frsize
|
||||
fsid
|
||||
fstat
|
||||
fstype
|
||||
namelen
|
||||
# unix::fs::MetadataExt
|
||||
atime # access time
|
||||
blksize # blocksize for file system I/O
|
||||
blocks # number of blocks allocated to file
|
||||
ctime # creation time
|
||||
dev # ID of device containing the file
|
||||
gid # group ID of file owner
|
||||
ino # inode number
|
||||
mode # permissions
|
||||
mtime # modification time
|
||||
nlink # number of hard links to file
|
||||
rdev # device ID if file is a character/block special file
|
||||
size # total size of file in bytes
|
||||
uid # user ID of file owner
|
||||
nsec # nanosecond measurement scale
|
||||
# freebsd::MetadataExt
|
||||
iosize
|
||||
|
||||
# * vars/time
|
||||
Timespec
|
||||
isdst
|
||||
nanos
|
||||
nsec
|
||||
nsecs
|
||||
strftime
|
||||
strptime
|
||||
subsec
|
||||
usec
|
||||
usecs
|
||||
utcoff
|
||||
|
||||
# * vars/utmpx
|
||||
endutxent
|
||||
getutxent
|
||||
getutxid
|
||||
getutxline
|
||||
pututxline
|
||||
setutxent
|
||||
utmp
|
||||
utmpx
|
||||
utmpxname
|
||||
|
||||
# * vars/winapi
|
||||
DWORD
|
||||
SYSTEMTIME
|
||||
LPVOID
|
||||
LPWSTR
|
||||
ULONG
|
||||
ULONGLONG
|
||||
UNLEN
|
||||
WCHAR
|
||||
WSADATA
|
||||
errhandlingapi
|
||||
fileapi
|
||||
handleapi
|
||||
lmcons
|
||||
minwinbase
|
||||
minwindef
|
||||
processthreadsapi
|
||||
synchapi
|
||||
sysinfoapi
|
||||
winbase
|
||||
winerror
|
||||
winnt
|
||||
winsock
|
||||
|
||||
# * vars/selinux
|
||||
freecon
|
||||
getfilecon
|
||||
lgetfilecon
|
||||
lsetfilecon
|
||||
setfilecon
|
||||
|
||||
# * vars/uucore
|
||||
optflag
|
||||
optflagmulti
|
||||
optflagopt
|
||||
optmulti
|
||||
optopt
|
||||
|
||||
# * uutils
|
||||
ccmd
|
||||
coreopts
|
||||
coreutils
|
||||
keepenv
|
||||
libc
|
||||
libstdbuf
|
||||
musl
|
||||
tmpd
|
||||
ucmd
|
||||
ucommand
|
||||
utmpx
|
||||
uucore
|
||||
uucore_procs
|
||||
uudoc
|
||||
uumain
|
||||
uutil
|
||||
uutils
|
||||
|
||||
# * function names
|
||||
getcwd
|
||||
@@ -12,6 +12,8 @@ keywords = ["platform", "info", "system"]
|
||||
categories = ["os"]
|
||||
license = "MIT"
|
||||
|
||||
# spell-checker:ignore (crates) libc winapi (features) libloaderapi processthreadsapi sysinfoapi winbase winver
|
||||
|
||||
[target.'cfg(not(target_os = "windows"))'.dependencies]
|
||||
libc = "0.2"
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
|
||||
A simple cross-platform way to get information about the currently running system.
|
||||
|
||||
## Example
|
||||
## Examples
|
||||
|
||||
This simple example:
|
||||
|
||||
@@ -21,7 +21,7 @@ This simple example:
|
||||
use platform_info::*;
|
||||
|
||||
fn main() {
|
||||
let info = PlatformInfo::new().unwrap();
|
||||
let info = PlatformInfo::new().expect("Unable to determine platform info");
|
||||
// println!("info={:#?}", info);
|
||||
|
||||
println!("{}", info.sysname().to_string_lossy());
|
||||
@@ -46,6 +46,8 @@ GNU/Linux
|
||||
|
||||
> Using `cargo run --example ex` will build and execute this [example code](examples/ex.rs).
|
||||
|
||||
Other examples can be found in the [examples](examples) directory.
|
||||
|
||||
## License
|
||||
|
||||
`platform-info` is licensed under the [MIT License](LICENSE).
|
||||
|
||||
+4
-1
@@ -6,7 +6,10 @@
|
||||
use platform_info::*;
|
||||
|
||||
fn main() {
|
||||
let info = PlatformInfo::new().unwrap();
|
||||
let info = PlatformInfo::new().unwrap_or_else(|err| {
|
||||
eprintln!("Unable to determine platform info: {}", err);
|
||||
std::process::exit(1);
|
||||
});
|
||||
println!(
|
||||
"{}",
|
||||
match info.machine().to_os_string().into_string() {
|
||||
|
||||
+2
-2
@@ -6,8 +6,8 @@
|
||||
use platform_info::*;
|
||||
|
||||
fn main() {
|
||||
let info = PlatformInfo::new().unwrap();
|
||||
// println!("info={:#?}", info);
|
||||
let info = PlatformInfo::new().expect("Unable to determine platform info");
|
||||
// println!("info={:#?}", info); // note: info *may* contain extra platform-specific fields
|
||||
|
||||
println!("{}", info.sysname().to_string_lossy());
|
||||
println!("{}", info.nodename().to_string_lossy());
|
||||
|
||||
+44
-16
@@ -4,32 +4,56 @@
|
||||
//
|
||||
// For the full copyright and license information, please view the LICENSE file
|
||||
// that was distributed with this source code.
|
||||
//
|
||||
|
||||
// spell-checker:ignore (abbrev/names) MSVC POSIX (names) rivy (rust) rustdoc RUSTDOCFLAGS
|
||||
|
||||
// Documentation
|
||||
// See <https://docs.rs/platform-info> or <https://docs.rs/crate/platform-info>.
|
||||
// Use `cargo doc --no-deps --open --target=i686-pc-windows-msvc` to view WinOS documentation for this crate.
|
||||
// Use `cargo doc --no-deps --open --target=i686-unknown-linux-gnu` to view POSIX documentation for this crate.
|
||||
// * note: `cargo rustdoc` is equivalent to `cargo doc --no-deps` and is what `docs.rs` uses to generate documentation.
|
||||
// * ref: <https://users.rust-lang.org/t/docs-rs-does-not-show-my-documentation/70414/4> @@ <https://archive.is/W0N8W>
|
||||
|
||||
// Enable documentation warnings for missing documentation (for public items) and broken intra-doc links.
|
||||
// * note: CI documentation linting has all warnings escalated to errors (using `RUSTDOCFLAGS="--deny warnings" cargo doc`)
|
||||
#![warn(missing_docs)]
|
||||
#![warn(rustdoc::broken_intra_doc_links)]
|
||||
// #![doc = include_str!("../README.md")] // ToDO: [2023-05-28; rivy] DRY by instead including README.md as crate documentation
|
||||
/*!
|
||||
This crate provides the ability to retrieve various information specific to your current platform
|
||||
without having to use platform-specific methods to so. Currently, only information pertinent to
|
||||
a utility like [`uname`](https://github.com/uutils/coreutils/blob/main/src/uu/uname/src/uname.rs) is
|
||||
provided; however, in the future, more functionality may become available.
|
||||
[](https://crates.io/crates/platform-info)
|
||||
[](https://github.com/uutils/platform-info/tree/main/LICENSE)
|
||||
[](https://codecov.io/gh/uutils/platform-info/tree/main)
|
||||
|
||||
This crate provides the ability to retrieve information specific to your current platform via a cross-platform
|
||||
uname-type API ([`UNameAPI`]). Additional platform-specific information may be supplied within [`PlatformInfo`].
|
||||
|
||||
# Usage
|
||||
|
||||
This crate is available on [crate.io](https://crates.io/crates/platform-info), so using it in your
|
||||
project is as simple as adding `platform-info` to your project's `Cargo.toml`, like so:
|
||||
This crate is available on [crate.io](https://crates.io/crates/platform-info). So, to use it in your project, just add
|
||||
the following to your project's `Cargo.toml` [dependencies](https://doc.rust-lang.org/cargo/reference/specifying-dependencies.html):
|
||||
|
||||
```toml
|
||||
[dependencies]
|
||||
platform-info = "2"
|
||||
```
|
||||
|
||||
To see specific usage details, look at the `uname` utility linked above as it makes
|
||||
use of every feature.
|
||||
# Examples
|
||||
|
||||
```rust
|
||||
*/
|
||||
#![doc = include_str!("../examples/ex.rs")]
|
||||
/*!
|
||||
```
|
||||
|
||||
Other examples can be found in the [`examples` directory](https://github.com/uutils/platform-info/tree/main/examples)
|
||||
of this crate and in the [uutils/coreutils](https://github.com/uutils/coreutils) implementation of
|
||||
[`uname`](https://github.com/uutils/coreutils/blob/main/src/uu/uname/src/uname.rs).
|
||||
*/
|
||||
|
||||
// spell-checker:ignore (API) nodename osname sysname
|
||||
// spell-checker:ignore (uutils) coreutils uutils
|
||||
|
||||
#![warn(unused_results)]
|
||||
#![warn(unused_results)] // enable warnings for unused results
|
||||
|
||||
use std::ffi::OsStr;
|
||||
|
||||
@@ -38,18 +62,22 @@ mod lib_impl;
|
||||
//===
|
||||
|
||||
// PlatformInfo
|
||||
/// Handles initial retrieval and holds cached information for the current platform.
|
||||
pub type PlatformInfo = lib_impl::PlatformInfo;
|
||||
// Handles initial retrieval and holds cached information for the current platform.
|
||||
pub use lib_impl::PlatformInfo;
|
||||
#[cfg(unix)]
|
||||
pub use lib_impl::UTSName;
|
||||
#[cfg(windows)]
|
||||
pub use lib_impl::{WinApiSystemInfo, WinOsVersionInfo};
|
||||
|
||||
// PlatformInfoError
|
||||
/// The common error type for `PlatformInfo`.
|
||||
pub type PlatformInfoError = lib_impl::BoxedThreadSafeStdError;
|
||||
/// The common error type for [`PlatformInfoAPI`].
|
||||
pub use lib_impl::BoxedThreadSafeStdError as PlatformInfoError;
|
||||
|
||||
// PlatformInfoAPI
|
||||
/// Defines the full API for `PlatformInfo`.
|
||||
/// Defines the full API for [`PlatformInfo`].
|
||||
// * includes `UNameAPI`
|
||||
pub trait PlatformInfoAPI: UNameAPI {
|
||||
/// Creates a new instance of `PlatformInfo`.
|
||||
/// Creates a new instance of [`PlatformInfo`].
|
||||
/// <br> On some platforms, it is possible for this function to fail.
|
||||
fn new() -> Result<Self, PlatformInfoError>
|
||||
where
|
||||
|
||||
+3
-1
@@ -1,6 +1,6 @@
|
||||
// "plumbing" setup and connections for `lib.rs`
|
||||
|
||||
#![warn(unused_results)]
|
||||
#![warn(unused_results)] // enable warnings for unused results
|
||||
|
||||
#[cfg(target_os = "windows")]
|
||||
use std::path::Path;
|
||||
@@ -9,7 +9,9 @@ use std::path::PathBuf;
|
||||
|
||||
//=== types
|
||||
|
||||
/// Standard thread-safe error type
|
||||
pub type ThreadSafeStdError = dyn std::error::Error + Send + Sync;
|
||||
/// Standard thread-safe error type (boxed to allow translation for any std::error::Error type)
|
||||
pub type BoxedThreadSafeStdError = Box<ThreadSafeStdError>;
|
||||
|
||||
/// A slice of a path string
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
// refs:
|
||||
// [Byte-to/from-String Conversions](https://nicholasbishop.github.io/rust-conversions) @@ <https://archive.is/AnDCY>
|
||||
|
||||
#![warn(unused_results)]
|
||||
#![warn(unused_results)] // enable warnings for unused results
|
||||
|
||||
use std::ffi::{OsStr, OsString};
|
||||
use std::fmt;
|
||||
@@ -31,6 +31,7 @@ use unix_safe::*;
|
||||
/// Handles initial retrieval and holds cached information for the current platform (a Unix-like OS in this case).
|
||||
#[derive(Clone, Debug, PartialEq, Eq)]
|
||||
pub struct PlatformInfo {
|
||||
/// Contains the cached results of the `utsname()` system call.
|
||||
// ref: <https://docs.rs/libc/latest/i686-unknown-linux-gnu/libc/struct.utsname.html>
|
||||
pub utsname: UTSName, /* aka "Unix Time-sharing System Name"; ref: <https://stackoverflow.com/questions/41669397/whats-the-meaning-of-utsname-in-linux> */
|
||||
// * private-use fields
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
// spell-checker:ignore (names) Ingvar Stepanyan * me@rreverser.com
|
||||
// spell-checker:ignore (uutils) coreutils uutils
|
||||
|
||||
#![warn(unused_results)]
|
||||
#![warn(unused_results)] // enable warnings for unused results
|
||||
|
||||
use std::ffi::{OsStr, OsString};
|
||||
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
// spell-checker:ignore (WinAPI) ctypes CWSTR DWORDLONG dwStrucVersion FARPROC FIXEDFILEINFO HIWORD HMODULE libloaderapi LOWORD LPCSTR LPCVOID LPCWSTR lpdw LPDWORD lplp LPOSVERSIONINFOEXW LPSYSTEM lptstr LPVOID LPWSTR minwindef ntdef ntstatus OSVERSIONINFOEXW processthreadsapi PUINT SMALLBUSINESS SUITENAME sysinfo sysinfoapi sysinfoapi TCHAR TCHARs ULONGLONG VERSIONINFO WCHAR WCHARs winapi winbase winver WSTR wstring
|
||||
// spell-checker:ignore (WinOS) ntdll
|
||||
|
||||
#![warn(unused_results)]
|
||||
#![warn(unused_results)] // enable warnings for unused results
|
||||
|
||||
use std::convert::TryFrom;
|
||||
use std::ffi::{OsStr, OsString};
|
||||
@@ -57,8 +57,11 @@ use windows_safe::*;
|
||||
/// Handles initial retrieval and holds cached information for the current platform (Windows/WinOS in this case).
|
||||
#[derive(Clone, Debug, PartialEq, Eq)]
|
||||
pub struct PlatformInfo {
|
||||
/// Cached computer name.
|
||||
pub computer_name: OsString,
|
||||
/// Wraps a cached [`WinApiSystemInfo`].
|
||||
pub system_info: WinApiSystemInfo,
|
||||
/// Wraps a cached [`WinOsVersionInfo`].
|
||||
pub version_info: WinOsVersionInfo,
|
||||
// * private-use fields
|
||||
sysname: OsString,
|
||||
@@ -130,7 +133,7 @@ impl UNameAPI for PlatformInfo {
|
||||
/// Contains information about the current computer system.
|
||||
///
|
||||
/// Wraps [SYSTEM_INFO](https://learn.microsoft.com/en-us/windows/win32/api/sysinfoapi/ns-sysinfoapi-system_info).
|
||||
#[derive(Clone, Copy /* , Debug, PartialEq, Eq */)]
|
||||
#[derive(Clone, Copy /* , Debug, PartialEq, Eq *//* note: implemented elsewhere */)]
|
||||
pub struct WinApiSystemInfo(
|
||||
// ref: <https://learn.microsoft.com/en-us/windows/win32/api/sysinfoapi/ns-sysinfoapi-system_info> @@ <https://archive.is/cqbrj>
|
||||
SYSTEM_INFO,
|
||||
@@ -496,11 +499,11 @@ fn determine_machine(system_info: &WinApiSystemInfo) -> OsString {
|
||||
},
|
||||
PROCESSOR_ARCHITECTURE_IA64 => "ia64",
|
||||
PROCESSOR_ARCHITECTURE_ARM => "arm", // `arm` may be under-specified compared to GNU implementations
|
||||
PROCESSOR_ARCHITECTURE_ARM64 => "aarch64",
|
||||
PROCESSOR_ARCHITECTURE_ARM64 => "aarch64", // alternatively, `arm64` may be more correct
|
||||
PROCESSOR_ARCHITECTURE_MIPS => "mips",
|
||||
PROCESSOR_ARCHITECTURE_PPC => "powerpc",
|
||||
PROCESSOR_ARCHITECTURE_ALPHA | PROCESSOR_ARCHITECTURE_ALPHA64 => "alpha",
|
||||
PROCESSOR_ARCHITECTURE_SHX => "superh", // "SuperH" processor
|
||||
PROCESSOR_ARCHITECTURE_SHX => "superh", // a "SuperH" processor
|
||||
_ => "unknown",
|
||||
};
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
// spell-checker:ignore (WinAPI) ctypes CWSTR DWORDLONG dwStrucVersion FARPROC FIXEDFILEINFO HIWORD HMODULE libloaderapi LOWORD LPCSTR LPCVOID LPCWSTR lpdw LPDWORD lplp LPOSVERSIONINFOEXW LPSYSTEM lptstr LPVOID LPWSTR minwindef ntdef ntstatus OSVERSIONINFOEXW processthreadsapi PUINT SMALLBUSINESS SUITENAME sysinfo sysinfoapi sysinfoapi TCHAR TCHARs ULONGLONG WCHAR WCHARs winapi winbase winver WSTR wstring
|
||||
// spell-checker:ignore (WinOS) ntdll
|
||||
|
||||
#![warn(unused_results)]
|
||||
#![warn(unused_results)] // enable warnings for unused results
|
||||
|
||||
use std::convert::TryFrom;
|
||||
use std::io;
|
||||
@@ -65,6 +65,8 @@ pub struct VS_FIXEDFILEINFO {
|
||||
|
||||
impl WinApiSystemInfo {
|
||||
#[allow(non_snake_case)]
|
||||
/// Returns `wProcessorArchitecture` extracted from the [`SYSTEM_INFO`](https://learn.microsoft.com/en-us/windows/win32/api/sysinfoapi/ns-sysinfoapi-system_info) structure.
|
||||
/// <br> Refer to [`SYSTEM_INFO`](https://docs.microsoft.com/en-us/windows/win32/api/sysinfoapi/ns-sysinfoapi-system_info) for more information.
|
||||
pub fn wProcessorArchitecture(&self) -> WORD {
|
||||
unsafe { self.0.u.s().wProcessorArchitecture }
|
||||
}
|
||||
@@ -89,7 +91,7 @@ pub fn create_OSVERSIONINFOEXW(
|
||||
/// When the reference count reaches zero, the module is unloaded from the address space of the calling process and the
|
||||
/// handle is no longer valid.
|
||||
///
|
||||
/// *Returns* BOOL ~ `FALSE` (aka zero) for fn *failure*; o/w non-zero for fn *success*.
|
||||
/// *Returns* BOOL ~ `FALSE` (aka zero) for fn *failure*; o/w non-`FALSE` (aka non-zero) for fn *success*.
|
||||
///
|
||||
/// Wraps WinOS [`Kernel32/FreeLibrary(...)`](https://learn.microsoft.com/en-us/windows/win32/api/libloaderapi/nf-libloaderapi-freelibrary).
|
||||
#[allow(non_snake_case)]
|
||||
@@ -97,7 +99,7 @@ pub fn WinAPI_FreeLibrary(module: HMODULE /* from `hModule: HMODULE` */) -> BOOL
|
||||
// FreeLibrary
|
||||
// pub unsafe fn FreeLibrary(hLibModule: HMODULE) -> BOOL
|
||||
// ref: <https://learn.microsoft.com/en-us/windows/win32/api/libloaderapi/nf-libloaderapi-freelibrary> @@ <https://archive.is/jWCsU>
|
||||
// * *returns* BOOL ~ `FALSE` (aka zero) for fn *failure*; o/w non-zero for fn *success*
|
||||
// * *returns* BOOL ~ `FALSE` (aka zero) for fn *failure*; o/w non-`FALSE` (aka non-zero) for fn *success*
|
||||
unsafe { FreeLibrary(module) }
|
||||
}
|
||||
|
||||
@@ -112,7 +114,7 @@ pub fn WinAPI_FreeLibrary(module: HMODULE /* from `hModule: HMODULE` */) -> BOOL
|
||||
/// - for non-`FALSE` return, contains the number of TCHARs (aka WCHARs) copied to the destination buffer, *not including* the terminating null character
|
||||
/// - for `FALSE` return, contains the buffer size required for the result, *including* the terminating null character
|
||||
///
|
||||
/// *Returns* BOOL ~ `FALSE` (aka zero) for fn *failure*; o/w non-zero for fn *success*.
|
||||
/// *Returns* BOOL ~ `FALSE` (aka zero) for fn *failure*; o/w non-`FALSE` (aka non-zero) for fn *success*.
|
||||
///
|
||||
///### Notes
|
||||
///
|
||||
@@ -139,7 +141,7 @@ where
|
||||
// * `nSize` ~ (in) specifies the size of the destination buffer (*lpBuffer) in TCHARs (aka WCHARs)
|
||||
// * `nSize` ~ (out) on *fn failure* (aka `FALSE` return), receives the buffer size required for the result, *including* the terminating null character
|
||||
// * `nSize` ~ (out) on *fn success*, receives the number of TCHARs (aka WCHARs) copied to the destination buffer, *not including* the terminating null character
|
||||
// * *returns* BOOL ~ `FALSE` (aka zero) for fn *failure*; o/w non-zero for fn *success*
|
||||
// * *returns* BOOL ~ `FALSE` (aka zero) for fn *failure*; o/w non-`FALSE` (aka non-zero) for fn *success*
|
||||
let maybe_buffer = buffer.into();
|
||||
let (buffer_ptr, length) = match maybe_buffer {
|
||||
Some(buf) => (buf.as_mut_ptr(), DWORD::try_from(buf.len()).unwrap_or(0)),
|
||||
@@ -189,7 +191,7 @@ pub fn WinAPI_GetFileVersionInfoSizeW<P: AsRef<PathStr>>(
|
||||
// WinAPI_GetFileVersionInfoW
|
||||
/// Retrieves version information for the specified file (`file_path`); stored into BYTE vector (`data`).
|
||||
///
|
||||
/// *Returns* BOOL ~ `FALSE` (aka zero) for fn *failure*; o/w non-zero for fn *success*.
|
||||
/// *Returns* BOOL ~ `FALSE` (aka zero) for fn *failure*; o/w non-`FALSE` (aka non-zero) for fn *success*.
|
||||
///
|
||||
/// Wraps WinOS [`Version/GetFileVersionInfoW(...)`](https://learn.microsoft.com/en-us/windows/win32/api/winver/nf-winver-getfileversioninfow).
|
||||
#[allow(non_snake_case)]
|
||||
@@ -204,7 +206,7 @@ pub fn WinAPI_GetFileVersionInfoW<P: AsRef<PathStr>>(
|
||||
// ref: <https://learn.microsoft.com/en-us/windows/win32/api/winver/nf-winver-getfileversioninfow> @@ <https://archive.is/4rx6D>
|
||||
// * handle/dwHandle == *ignored*
|
||||
// * length/dwLen == maximum size (in bytes) of buffer at data_ptr/lpData
|
||||
// * *returns* BOOL ~ `FALSE` (aka zero) for fn *failure*, o/w non-zero for fn *success*
|
||||
// * *returns* BOOL ~ `FALSE` (aka zero) for fn *failure*, o/w non-`FALSE` (aka non-zero) for fn *success*
|
||||
let file_path_cws: CWSTR = to_c_wstring(file_path.as_ref());
|
||||
unsafe {
|
||||
GetFileVersionInfoW(
|
||||
@@ -327,7 +329,7 @@ pub fn WinAPI_LoadLibrary<P: AsRef<PathStr>>(
|
||||
/// Compares a set of operating system version requirements (`version_info`, `type_mask`, and `condition_mask`) to the
|
||||
/// corresponding values for the currently running version of the system.
|
||||
///
|
||||
/// *Returns* BOOL ~ `FALSE` (aka zero) if resource is non-existent or requirements are not met; o/w non-`FALSE`
|
||||
/// *Returns* BOOL ~ `FALSE` (aka zero) if resource is non-existent or requirements are not met; o/w non-`FALSE` (aka non-zero)
|
||||
///
|
||||
/// Wraps WinOS [`Kernel32/VerifyVersionInfoW(...)`](https://learn.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-verifyversioninfow).
|
||||
#[allow(non_snake_case)]
|
||||
@@ -342,7 +344,7 @@ pub fn WinAPI_VerifyVersionInfoW(
|
||||
// version_info/lpVersionInformation ~ pointer to (const) version info requirements for comparison
|
||||
// type_mask ~ mask indicating members of version_info to be tested
|
||||
// condition_mask ~ type of comparison for each version_info member to be compared
|
||||
// * returns BOOL ~ FALSE (aka zero), for non-existent resource or invalid requirements; o/w non-zero
|
||||
// * returns BOOL ~ `FALSE` (aka zero) for non-existent resource or invalid requirements; o/w non-`FALSE` (aka non-zero)
|
||||
let version_info_ptr: *const OSVERSIONINFOEXW = version_info;
|
||||
unsafe {
|
||||
VerifyVersionInfoW(
|
||||
@@ -373,7 +375,7 @@ pub fn WinAPI_VerQueryValueW<'a, S: AsRef<str>>(
|
||||
// version_info_ptr/pBlock ~ pointer to (const) version info
|
||||
// info_view/lplpBuffer ~ pointer into version info supplied by version_info_ptr (no new allocations)
|
||||
// info_view_length/puLen ~ pointer to size (in characters [TCHARs/WCHARs] for "version info values", in bytes for translation array or root block)
|
||||
// * returns BOOL ~ `0` (aka `FALSE`), for invalid/non-existent resource; o/w non-zero
|
||||
// * returns BOOL ~ `FALSE` (aka zero) for invalid/non-existent resource; o/w non-`FALSE` (aka non-zero)
|
||||
let version_info_ptr = version_info.as_ptr() as LPCVOID;
|
||||
unsafe {
|
||||
VerQueryValueW(
|
||||
@@ -430,7 +432,7 @@ pub fn WinOsFileVersionInfoQuery_root(
|
||||
// version_info_ptr/pBlock ~ pointer to (const) version info
|
||||
// info_view/lplpBuffer ~ pointer into version info supplied by version_info_ptr (no new allocations)
|
||||
// info_view_length/puLen ~ pointer to size (in characters [TCHARs/WCHARs] for "version info values", in bytes for translation array or root block)
|
||||
// * returns BOOL ~ `FALSE` (aka zero), for invalid/non-existent resource; o/w non-zero for *fn success*
|
||||
// * returns BOOL ~ `FALSE` (aka zero) for invalid/non-existent resource; o/w non-`FALSE` (aka non-zero) for *fn success*
|
||||
|
||||
let version_info_data = &version_info.data;
|
||||
|
||||
@@ -558,6 +560,7 @@ fn structure_clone() {
|
||||
dwFileDateLS: 0,
|
||||
};
|
||||
println!("{:?}", ffi);
|
||||
let ffi_copy = ffi.clone();
|
||||
assert_eq!(ffi_copy, ffi);
|
||||
#[allow(clippy::clone_on_copy)] // ignore `clippy::clone_on_copy` warning for direct testing
|
||||
let ffi_clone = ffi.clone();
|
||||
assert_eq!(ffi_clone, ffi);
|
||||
}
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
// spell-checker:ignore (API) nodename osname sysname
|
||||
|
||||
use regex;
|
||||
|
||||
use platform_info::*;
|
||||
|
||||
#[test]
|
||||
|
||||
Reference in New Issue
Block a user