Commit 2d187d58 authored by Alexander Kapshuk's avatar Alexander Kapshuk Committed by Greg Kroah-Hartman

ver_linux: complete awk implementation

The algorithm that extracts the version number of the utility being
queried, and prints the name of the utility and its version number is
currently implemented in awk. The code is used throughout the script,
making its use repetative. The proposed implementation confines the
algorithm in question to a function, which makes the script easier to
read overall, as well as considerably reduces the number of lines of
code. Every attempt has been made to retain the look and the format
generated by the current implementation.
Signed-off-by: default avatarAlexander Kapshuk <alexander.kapshuk@gmail.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent a46b195c
#!/bin/awk -f
# Before running this script please ensure that your PATH is
# typical as you use for compilation/installation. I use
# /bin /sbin /usr/bin /usr/sbin /usr/local/bin, but it may
# differ on your system.
BEGIN {
usage = "If some fields are empty or look unusual you may have an old version.\n"
usage = usage "Compare to the current minimal requirements in Documentation/Changes.\n"
print usage
system("uname -a")
printf("\n")
printversion("GNU C", version("gcc -dumpversion 2>&1"))
printversion("GNU Make", version("make --version 2>&1"))
printversion("Binutils", version("ld -v 2>&1"))
printversion("Util-linux", version("mount --version 2>&1"))
printversion("Mount", version("mount --version 2>&1"))
printversion("Module-init-tools", version("depmod -V 2>&1"))
printversion("E2fsprogs", version("tune2fs 2>&1"))
printversion("Jfsutils", version("fsck.jfs -V 2>&1"))
printversion("Reiserfsprogs", version("reiserfsck -V 2>&1"))
printversion("Reiser4fsprogs", version("fsck.reiser4 -V 2>&1"))
printversion("Xfsprogs", version("xfs_db -V 2>&1"))
printversion("Pcmciautils", version("pccardctl -V 2>&1"))
printversion("Pcmcia-cs", version("cardmgr -V 2>&1"))
printversion("Quota-tools", version("quota -V 2>&1"))
printversion("PPP", version("pppd --version 2>&1"))
printversion("Isdn4k-utils", version("isdnctrl 2>&1"))
printversion("Nfs-utils", version("showmount --version 2>&1"))
if (system("test -r /proc/self/maps") == 0) {
while (getline <"/proc/self/maps" > 0) {
n = split($0, procmaps, "/")
if (/libc.*so$/ && match(procmaps[n], /[0-9]+([.]?[0-9]+)+/)) {
ver = substr(procmaps[n], RSTART, RLENGTH)
printversion("Linux C Library", ver)
break
}
}
}
printversion("Dynamic linker (ldd)", version("ldd --version 2>&1"))
while ("ldconfig -p 2>/dev/null" | getline > 0) {
if (/(libg|stdc)[+]+\.so/) {
libcpp = $NF
break
}
}
if (system("test -r " libcpp) == 0)
printversion("Linux C++ Library", version("readlink " libcpp))
printversion("Procps", version("ps --version 2>&1"))
printversion("Net-tools", version("ifconfig --version 2>&1"))
printversion("Kbd", version("loadkeys -V 2>&1"))
printversion("Console-tools", version("loadkeys -V 2>&1"))
printversion("Oprofile", version("oprofiled --version 2>&1"))
printversion("Sh-utils", version("expr --v 2>&1"))
printversion("Udev", version("udevadm --version 2>&1"))
printversion("Wireless-tools", version("iwconfig --version 2>&1"))
if (system("test -r /proc/modules") == 0) {
while ("sort /proc/modules" | getline > 0) {
mods = mods sep $1
sep = " "
}
printversion("Modules Loaded", mods)
}
}
function version(cmd, ver) {
while (cmd | getline > 0) {
if (!/ver_linux/ && match($0, /[0-9]+([.]?[0-9]+)+/)) {
ver = substr($0, RSTART, RLENGTH)
break
}
}
close(cmd)
return ver
}
function printversion(name, value, ofmt) {
if (value != "") {
ofmt = "%-20s\t%s\n"
printf(ofmt, name, value)
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment