-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
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: Alexander Kapshuk <alexander.kapshuk@gmail.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
- Loading branch information
Alexander Kapshuk
authored and
Greg Kroah-Hartman
committed
Aug 31, 2016
1 parent
a46b195
commit 2d187d5
Showing
1 changed file
with
89 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,89 @@ | ||
#!/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) | ||
} | ||
} |