This fixes "(portability) scanf without field width limits can crash with
huge input data on some versions of libc" warning from cppcheck.
We choose 10 as the field width limit as it is the number of characters in
2^31-1, the largest int.
Note that this was a fork of the earlier 1998-05-02 version and didn't
contain the later changes. Therefore we merge the best of both versions.
wmtime had some additional unnecessary dummy variables, so we use the wmmon
version.
Previously, if we attempted to build using C99 or later, we got "inline
function declared but never defined" warnings and eventual "undefined
reference" errors. As a result, it fails to build from source using gcc5.
However, if we move the definitions to list.h and add "extern inline"
declarations to list.c, which does compile using C99 and later, then it no
longer compiles using gnu90, the default for gcc4.
To avoid this mess, we remove the inline keywords altogether.
Note that this fixes Debian bugs for wmifs [1], wmppp.app [2], and
wmtime [3].
[1] https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=778170
[2] https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=778172
[3] https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=778174
- When executing a command, control flow would fall through to the
display cycle code, changing the display.
- When display cycling was prevented by the user (via -l), command
execution was also disabled.
Added -b flag to include buffers and cache in total memory usage.
Added global show_buffers, -b parsing code, associated logic in
update_stat_mem(), and usage information.
wmmon.1
Added -b documentation.
TODO: Still need to fix dependencies.
wmmon.c:
Updated version string to 1.2b2 (forgot this for 1.2b1).
Fixed compiler warnings: added error checking for filesystem calls
and commented out some preprocessor/C code that was apparently used
to hardcode test cases.
TODO: remove completely soon if no ill effect.
wmmon/CHANGES:
Updated for 1.2b1.
wmmon/Makefile:
Added debug build with -g3; default build with -O3. Note:
This makefile isn't perfect. You must "make clean" when switching
between "make" and "make debug" otherwise objects won't compile.
I'm sure it's a simple dependency issue, but I am not an expert with
Makefiles. I intend to fix this, but it's a low priority.
wmmon/wmmon/wmmon.c:
Updated changelog. Added #define HISTORY_ENTRIES to replace hardcoded
values.
DrawStats_io():
Removed static variable global_io_scale. Replaced with a local
variable. This should improve graphing - scale was growing, but
never shrinking, meaning as time passed, graphed values were
downscaled and not displayed.
Fixed rounding errors caused by use of integer types which were
causing very small values not to appear on graph. Added code to
round very low values up, so they will appear on meter and graph.
We are making a reasonable compromise between readability and
accuracy. Side effect is that small peaks (greater than 0 but less
than our rounded-up tiny values) will actually appear as dips
instead of peaks. I feel this is acceptable, since it still conveys
an impression of "jitter" to the user. Fixing this would have
involved further modifying the data before we graph it, which would
defeat the purpose of improving accuracy.
Tweaked load bar scaling algorithm for reabality and sensitivity.
update_stat_io():
Added a "stale" timeout for static long maxdiskio (determines
scaling of load bar). New behaviour is that every couple of minutes
we discard our saved peak value and resample. This prevents an
anomalously huge I/O spike from making more typical values fail to
trigger the load bar for the rest of the app's lifetime. Side
effect will be that every couple of minutes, we will get an
anomalous spike in the load bar as it recalibrates. This anomaly
only affects the bar, not the graph.
getWidth():
Fixed integer rounding issue similar to that in DrawStats_io().
Added similar rounding code to round up very small values so we
don't have the illusion of an idle system following a huge spike.