]> granicus.if.org Git - procps-ng/log
procps-ng
8 years agorelated: fix inconsistencies in result type references
Jim Warner [Fri, 5 Aug 2016 05:00:00 +0000 (00:00 -0500)]
related: fix inconsistencies in result type references

This patch is a response to errors found in those type
references now that our library allows for validation.

In two cases, former assignments to a result structure
could no longer employ that VAL macro if validation is
active. Thus, direct reference to some stack was used.

For the record, those instances were to be found here:
. ps - uses PIDS_extra to store the cooked pcpu values
. top - uses PIDS_extra to store the forest view level

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agolibrary: provide for validating result type references
Jim Warner [Fri, 5 Aug 2016 05:00:00 +0000 (00:00 -0500)]
library: provide for validating result type references

During development, we now have a means for validating
that a type referenced in application code matches the
actual type set by the library. The new feature can be
activated through either of the following two methods:

1) ./configure CFLAGS='-DXTRA_PROCPS_DEBUG' (all pgms)

2) an #include <proc/xtra-procps-debug.h> (single pgm)

[ in the future, one could add a formal configure.ac ]
[ provision. but for now a manual approach is safer. ]

Lastly, for any module which provides a sort function,
the handling for both 'noop' & 'extra' enumerators was
made consistent. Now, 'noop' is not sorted and 'extra'
will be sorted as that module's widest supported type.

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agorelated: respond to VAL macro addition of context parm
Jim Warner [Fri, 5 Aug 2016 05:00:00 +0000 (00:00 -0500)]
related: respond to VAL macro addition of context parm

Since the VAL macro now requires a 4th parameter, this
commit simply adds the 'info' context structure to it.

In some cases, that context structure needed to become
global, since it was referenced in multiple functions.

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agolibrary: expand VAL macros to include the context parm
Jim Warner [Fri, 5 Aug 2016 05:00:00 +0000 (00:00 -0500)]
library: expand VAL macros to include the context parm

This patch will set the stage for validating the types
referenced in the result union. For now, the parameter
representing that 'info' structure will remain unused.

[ and while we're at it, let us correct a faulty GET ]
[ macro in the diskstats header. that puppy missed a ]
[ parm which ain't so good if that guy is ever used! ]

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agorelated: adapt for changes in result types, <PIDS> api
Jim Warner [Sun, 31 Jul 2016 05:00:00 +0000 (00:00 -0500)]
related: adapt for changes in result types, <PIDS> api

This patch is the response to changes in <pids> types.

These additional modifications were also incorporated.

. ps -------------------------------------------------
pr_wname was eliminated as it just duplicated pr_wchan
pr_wchan referenced WCHAN_ADDR in error, vs WCHAN_NAME
pr_nwchan referenced WCHAN_NAME, not proper WCHAN_ADDR

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agolibrary: normalize & minimize result types, <PIDS> api
Jim Warner [Sun, 31 Jul 2016 05:00:00 +0000 (00:00 -0500)]
library: normalize & minimize result types, <PIDS> api

This commit attempts to minimize the variety of types
currently used. Plus, the following were also changed:

. the MEM fields were switched to parallel the VM guys
. PIDS_MEM_VIRT -> PIDS_MEM_VIRT_PGS
. PIDS_MEM_VIRT_KIB -> PIDS_MEM_VIRT

. made NICE 's_int' so that it then parallels PRIORITY

. change RTPRIO & SCHED_CLASS from 'ul_int' to 's_int'

. removed Item_table 'oldflags' for an obsoleted field
. PIDS_WCHAN_ADDR

. added calculations like TICS_ALL_C for the following
. PIDS_TICS_USER_C
. PIDS_TICS_SYSTEM_C

. these three new 'TICS' fields have been incorporated
. PIDS_TICS_BLKIO - jiffies spent in block i/o
. PIDS_TICS_GUEST - jiffies spent as a guest
. PIDS_TICS_GUEST_C - as above, includes dead children

. that PIDS_TICS_DELTA was renamed PIDS_TICS_ALL_DELTA
( so it did not hide between TICS_BLKIO & TICS_GUEST )
( and to make clearer what's included: utime + stime )

. eliminated 'sl_int' entirely from that result struct

[ often, the <pids> module changes necessitated that ]
[ readproc header and source files had to change too ]

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agomisc: replace any remaining tab characters in readproc
Jim Warner [Sun, 31 Jul 2016 05:00:00 +0000 (00:00 -0500)]
misc: replace any remaining tab characters in readproc

8 years agotop: provide for expanded potential displayable fields
Jim Warner [Sat, 30 Jul 2016 05:00:00 +0000 (00:00 -0500)]
top: provide for expanded potential displayable fields

This commit provides for raising the total displayable
fields from its current 70 to 86. It also bumps the id
in an rcfile representing the version from 'i' to 'j'.

The increase in number of fields will make sharing the
rcfile with an older top, once it's saved, impossible.

These changes are being done via a #define rather than
hard coded so any such sharing will still be possible.

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agomisc: add simplified chinese manpo to ignore
Craig Small [Thu, 28 Jul 2016 10:48:02 +0000 (20:48 +1000)]
misc: add simplified chinese manpo to ignore

8 years agolibrary: add final remaining sort function, <STAT> api
Jim Warner [Sun, 24 Jul 2016 05:00:00 +0000 (00:00 -0500)]
library: add final remaining sort function, <STAT> api

With this patch, all of the modules which offer a reap
function (pids, diskstats, slabinfo and stat too) will
now also provide for sorting whatever had been reaped.

It was easy to overlook a sort function for our <STAT>
guy given the paucity of CPUs on your typical personal
desktop or laptop. However, out in the world one might
find boxes with hundreds of CPUs plus many NUMA nodes.

Hey, who are we to disallow sorts on something another
person might see as useful under the above conditions?
And, there's always something to be said for symmetry.

[ of course, several minor tweaks were also included ]

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agomisc: tweaks (mostly cosmetic) to several source files
Jim Warner [Sun, 24 Jul 2016 05:00:00 +0000 (00:00 -0500)]
misc: tweaks (mostly cosmetic) to several source files

. a more appropriate error return code was substituted
. a safer form of comparison is utilized in two places
. a STAT_VAL macro replaced by more proper MEMINFO_VAL
. several of the silly 'xerrx' formats had been missed
. a few whitespace changes have also been incorporated

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agorelated: change for lost 'PROCPS_' enumerator prefixes
Jim Warner [Thu, 21 Jul 2016 05:00:00 +0000 (00:00 -0500)]
related: change for lost 'PROCPS_' enumerator prefixes

With this patch we've completed a progression toward a
standard approach to naming conventions which follows:

* Only functions will begin with that 'procps_' prefix
. ........................................... examples
. procps_vmstat_get ()
. procps_diskstats_select ()
- ----------------------------------------------------

* Exposed structures begin with the module/header name
. ........................................... examples
. struct pids_info
. struct stat_reaped
- ----------------------------------------------------

* Item enumerators begin like structs, but capitalized
. ........................................... examples
. VMSTAT_COMPACT_FAIL
. MEMINFO_DELTA_ACTIVE

[ slabinfo varies slightly due to some item variants ]
. SLABINFO_extra
. SLABS_SIZE_ACTIVE
. SLABNODE_OBJS_PER_SLAB
[ could cure with a prefix of SLABINFO, but too long ]
- ----------------------------------------------------

* Other enumerators work exactly like item enumerators
. ........................................... examples
. PIDS_SORT_ASCEND
. STAT_REAP_CPUS_AND_NODES
- ----------------------------------------------------

* Macros and constants begin just like the enumerators
. ........................................... examples
. #define SLABINFO_GET
. #define DISKSTATS_TYPE_DISK
- ----------------------------------------------------

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agolibrary: removed all the 'PROCPS_' enumerator prefixes
Jim Warner [Thu, 21 Jul 2016 05:00:00 +0000 (00:00 -0500)]
library: removed all the 'PROCPS_' enumerator prefixes

Many of our item enumerator identifiers are very long,
especially in that <VMSTAT> module. Additionally, they
all contain the exact same universal 'PROCPS_' prefix.

The origins for this are likely found in the desire to
avoid name clashes with other potential include files.
But with procps-ng newlib, we've probably gone way too
far. Did 'PROCPS_PIDS_TICS_SYSTEM' actually offer more
protection against clash than 'PIDS_TICS_SYSTEM' does?

I don't think so. Besides, no matter how big that name
becomes, one can never guarantee they'll never be some
clash. And, conversely, extremely short names will not
always create conflict. Of course, in either case when
some clash occurs, one can always #undef that problem.

Thus, this commit will eliminate that 'PROCPS_' prefix
making all of those enum identifiers a little shorter.
And, we'll still be well above some ridiculously short
(criminally short) names found in some common headers:

- - - - - - - - - - <term.h>
- 'tab', 'TTY', etc
- - - - - - - - - - - - - - - - <search.h>
- 'ENTER', ENTRY', 'FIND', etc

------------------------------------------------------
Finally, with this as a last of the wholesale changes,
we will have established the naming conventions below:

. only functions will begin with that 'procps_' prefix
. exposed structures begin with the module/header name
. item enumerators begin like structs, but capitalized
. other enumerators work exactly like item enumerators
. macros and constants begin just like the enumerators
------------------------------------------------------

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agorelated: adapt to changes in 'context' structure names
Jim Warner [Thu, 21 Jul 2016 05:00:00 +0000 (00:00 -0500)]
related: adapt to changes in 'context' structure names

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agolibrary: standardize all the 'context' structure names
Jim Warner [Thu, 21 Jul 2016 05:00:00 +0000 (00:00 -0500)]
library: standardize all the 'context' structure names

This patch attempts to standardize the naming of those
most important (declared not defined) context structs.

The present practice represents a hodge podge of names
only some of which reflect the source /proc file name.
And 2 of those file names embed a literal 'info' which
is likely the origin of that required parm identifier.

Now we'll append a universal '_info' to such structure
names, while including the names of those /proc pseudo
files where possible. In any case, that context struct
will *always* begin with the actual module/header file
name. And only the following two sound a little weird!

---------> 'meminfo_info' + 'slabinfo_info' <---------

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agovmstat: adapted for changes in an i/f, <DISKSTATS> api
Jim Warner [Wed, 20 Jul 2016 05:00:00 +0000 (00:00 -0500)]
vmstat: adapted for changes in an i/f, <DISKSTATS> api

This patch is a response to changes to the <diskstats>
interface. And the following represents the summary of
significant unrelated alterations that were also made.

+ corrected that 'milli weighted IO' output, which has
been wrong since that original patch referenced below.
as implemented, it duplicated 'milli spent IO' output.

+ restored original commit intent regarding disks with
a partition switch as represented in references below.

+ moved all item enumerators up near the source start.

+ removed all remaining tabs and inconsistent indents.

+ reformatted the silly style applied to 'xerrx' uses.

Reference(s):
. disallowed 'disks' under 'partition' switch
commit 7df7795b929c2c0911127d9fff64e62fe9e2975f
. original commit with disk/partition rational
commit e445f7e6c5539594600ace7a722dafa3b91a5374

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agolibrary: normalize/standardize an i/f, <DISKSTATS> api
Jim Warner [Wed, 20 Jul 2016 05:00:00 +0000 (00:00 -0500)]
library: normalize/standardize an i/f, <DISKSTATS> api

This patch will bring this interface up to our 3rd gen
standards. The following summarizes the major changes.

* New delta provisions have been added to most fields.

There are, of course, some fields for which a delta is
inappropriate. They include the identifying items such
as name, type, major and minor. Plus the io_inprogress
field which already acts, in effect, as a delta value.

* To provide delta support, dev_node historical values
have become persistent. By the same token, the library
must provide for future removal of disks/partitions. A
timestamp is used to detect 'stale' data which will be
deleted so as not to satisfy some get, select or reap.

* Such persistent support is provided by a linked list
which, by default, grows from the bottom down so as to
maintain compatibility with the /proc/diskstats order.

Initially, I was tempted to use the GNU tsearch (tree)
provisions until I discovered the overhead of building
that tree plus costs of a subsequent 'twalk'. Besides,
walking such a tree means retrieval order would differ
from an order required/expected by the vmstat program.

* The '/sys/block' directory is no longer scanned with
every refresh cycle. Rather, it's only accessed when a
node is first encountered. Then, that node's 'type' is
persistent for its lifetime like several other fields.

* A sort provision was included, at virtually no cost,
even though such a provision was not currently needed.

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agolibrary: rename 'diskstat' source as 'diskstats' files
Jim Warner [Wed, 20 Jul 2016 05:00:00 +0000 (00:00 -0500)]
library: rename 'diskstat' source as 'diskstats' files

Where possible, libprocps files convey the name of the
actual source pseudo file under the '/proc' directory.

This brings diskstats into line with such an approach.

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agomisc: just eliminate several 'unused' warning messages
Jim Warner [Tue, 19 Jul 2016 05:00:00 +0000 (00:00 -0500)]
misc: just eliminate several 'unused' warning messages

[ plus we also play catch up on some earlier changes ]
[ that impacted skill.c, after using --enable-skill! ]

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agotop: make compilation possible under netbsd-curses too
Jim Warner [Sat, 16 Jul 2016 05:00:00 +0000 (00:00 -0500)]
top: make compilation possible under netbsd-curses too

Whoa, I had never considered an alternative to ncurses
until the issue referenced below was raised. Thus, I'm
surprised to find that 'tparm' was the only impediment
to ultimately utilizing this alternate curses library.

And, while we could have substituted that non-standard
'tiparm' with only 2 arguments, we'll utilize the full
parms compliment in the spirit of that original patch.

Frankly, the task of developing an alternative library
to that ncurses implementation really boggles my mind.

Congratulations to rofl0r, whoever that masked man is.

Reference(s):
. issue raised
https://gitlab.com/procps-ng/procps/issues/38
. netbsd-curses home
https://github.com/sabotage-linux/netbsd-curses

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agolibrary: some minor miscellaeous improvements, 3rd gen
Jim Warner [Wed, 13 Jul 2016 05:00:00 +0000 (00:00 -0500)]
library: some minor miscellaeous improvements, 3rd gen

A collection of miscellaneous code and comment tweaks.

[ such changes will stop when desk checking ends too ]

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agotop: due to <STAT> api, relocate that NUMA stderr hack
Jim Warner [Tue, 12 Jul 2016 05:00:00 +0000 (00:00 -0500)]
top: due to <STAT> api, relocate that NUMA stderr hack

So as to avoid that potential (and inappropriate) numa
library spew to stderr, plus some resulting corruption
of top's display, top buffered stderr output until the
program ended. However, under our new library, timings
have changed meaning the corruption could occur again.

So this patch just relocates the stderr redirect to an
earlier startup point ahead of the 1st call to <STAT>.

[ plus we also fiddle just a tad with a few comments ]

Reference(s):
. original libnuma fix
commit 35dc6dcc49cc9cf8cff4300cb03a38dbe44c05db
. original redhat discussion
https://bugzilla.redhat.com/show_bug.cgi?id=998678

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agovmstat: disallow 'disks' under that 'partition' switch
Jim Warner [Mon, 11 Jul 2016 05:00:00 +0000 (00:00 -0500)]
vmstat: disallow 'disks' under that 'partition' switch

Emulating the presumed proper behavior of the original
program, when the -p switch is used we will now report
an error if that provided name matches some disk name.

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agovmstat: correct that wide-format when displaying disks
Jim Warner [Mon, 11 Jul 2016 05:00:00 +0000 (00:00 -0500)]
vmstat: correct that wide-format when displaying disks

Back in July of last year, when vmstat was modified to
exploit the 2nd gen <slabinfo> alloc & sort provision,
yours truly introduced this bug (in the commit below).

Reference(s):
commit 8d9612f7827959363b572742172b6b4b18796bdf

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agolibrary: recycle the QUICK_THREADS #define, <PIDS> api
Jim Warner [Sun, 10 Jul 2016 05:00:00 +0000 (00:00 -0500)]
library: recycle the QUICK_THREADS #define, <PIDS> api

That #define QUICK_THREADS was impossible to implement
under the new <pids> interface. Plus it was also found
to distort some thread information (referenced below).

So, it's always been inactive under the newlib branch.

However, it will (with small changes) still serve some
useful purpose in our library. Now, when the redefined
FALSE_THREADS is active, those special strings showing
"[ duplicate ENUM ]" will appear for any child thread.

Note: the real reason for such strings appearing isn't
being exercised, only their mechanics. In actual usage
they are substituted when a user duplicates such items
in a results stack & only the 1st instance can own it.

With this patch, we are simply fooling the <pids> code
into thinking an item was duplicated via a NULL value.

Reference(s):
. from master branch
commit 25a6ecdbfb3262261465ce1dd0e0e758cf3ac497

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agowatch: fix process_ansi typo
Craig Small [Sat, 9 Jul 2016 05:57:11 +0000 (15:57 +1000)]
watch: fix process_ansi typo

When I had to apply Josh's ansi fix a few commits below I put the
return before the setattr

References:
 commit 261c571acafed88d03ebdb5c5fa3d7e084daf25b

8 years agobuild-sys: cleanup of tests
Craig Small [Sat, 9 Jul 2016 05:06:32 +0000 (15:06 +1000)]
build-sys: cleanup of tests

Removed dependencies on test_nsutils as they are not used in
newlib.

Had two TESTS lines due to master merge, now only one.

8 years agowatch: Don't attempt to ungetc parts of unknown ANSI escape sequences
Josh Triplett [Fri, 8 Jul 2016 07:32:59 +0000 (00:32 -0700)]
watch: Don't attempt to ungetc parts of unknown ANSI escape sequences

If process_ansi encountered an unknown character when processing an ANSI
escape sequence, it would ungetc all the characters read so far, except
for the character just read, and the opening '\033['.  ungetting the
middle of the escape sequence does not produce useful results, and also
relies on the unportable assumption that ungetc works on multiple
characters (which glibc does not support).  Discard the characters
instead.

Signed-off-by: Josh Triplett <josh@joshtriplett.org>
8 years agowatch: Fix ANSI escape sequence termination
Josh Triplett [Fri, 8 Jul 2016 07:29:59 +0000 (00:29 -0700)]
watch: Fix ANSI escape sequence termination

process_ansi stopped processing an ANSI escape sequence if
(c < '0' && c > '9' && c != ';'), which will never happen.  Fix the
range check to use || instead.

Signed-off-by: Josh Triplett <josh@joshtriplett.org>
8 years agowatch: Don't process additional numbers in unknown ANSI color escapes
Josh Triplett [Sat, 9 Jul 2016 04:52:54 +0000 (14:52 +1000)]
watch: Don't process additional numbers in unknown ANSI color escapes

process_ansi assumed all numbers in a color control sequence correspond
to colors or attributes, which breaks badly if it encounters a
ISO-8613-3 escape sequence (such as for truecolor RGB).  For instance,
the sequence "\x1b[38;2;10;20;30m" sets the foreground color to
rgb(10,20,30), but watch will interpret all five numbers in the sequence
as colors or attributes themselves.

Stop processing the entire escape sequence if watch encounters any
number it doesn't understand, as that number may change the meaning of
the rest of the sequence.

8 years agobuild-sys: Revert noinst and check programs
Craig Small [Sat, 9 Jul 2016 04:35:06 +0000 (14:35 +1000)]
build-sys: Revert noinst and check programs

Previously there was a commit to change all noinst_PROGRAMS into
check_PROGRAMS. This was not a good idea.

check_PROGRAMS are built before TESTS are run. However they are
NOT build before the dejagnu tests are run, causing those tests
to fail.

So:
If the program is required for dejagnu, it needs to go into
noinst_PROGRAMS
If the program is required for TESTS or is one of those TESTS,
it needs to go into check_PROGRAMS

8 years agobuild-sys: Make check programs before check
Craig Small [Sat, 9 Jul 2016 04:11:06 +0000 (14:11 +1000)]
build-sys: Make check programs before check

For some unknown reason, check_PROGRAMS are not built before check.
They are built before recheck and after check, which isn't very
useful.

This means any tests by dejagnu that need those programs will fail.
On my console I get a build error, the CI merrily reports the error
but considers the build OK; go figure.

The kludge adds check_PROGRAMS to be a dependency to check.
Note, TESTS don't need to be included in this, because they are
properly compliled after the dejagnu tests but before they are
run.

8 years agowatch: fix 8bit regression
Craig Small [Sat, 9 Jul 2016 03:27:23 +0000 (13:27 +1000)]
watch: fix 8bit regression

As part of the fix to truncate the command in non-8bit, watch had
the function for output_header changed (much for scope cleanliness
and cohesiveness than anything; so I'm going to blame Meyer)...

Anyhow the 8bit enabled version did not have that update which
meant watch failed to compile. Thanks to @asavah for issue #37
and the patch.

References:
 commit 5a40c7970d8185fcf322575de9fed69d4cdedd93

8 years agobuild sys: update configure.ac for the latest autoscan
Jim Warner [Thu, 7 Jul 2016 05:00:00 +0000 (00:00 -0500)]
build sys: update configure.ac for the latest autoscan

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agomisc: eliminated every instance of trailing whitespace
Jim Warner [Thu, 7 Jul 2016 05:00:00 +0000 (00:00 -0500)]
misc: eliminated every instance of trailing whitespace

[ alas, there were only two instances (1 file) found ]

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agolibrary: the overlooked twerks (oops, tweaks), 3rd gen
Jim Warner [Thu, 7 Jul 2016 05:00:00 +0000 (00:00 -0500)]
library: the overlooked twerks (oops, tweaks), 3rd gen

Yes, all of these changes are strictly cosmetic. It is
likely symptomatic of some deep-seated character flaw.

[ or, it might be because of a certain pride in this ]
[ new library and the desire to make it even better! ]

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agolibrary: some tweaks to 2 file read functions, 3rd gen
Jim Warner [Sun, 3 Jul 2016 05:00:00 +0000 (00:00 -0500)]
library: some tweaks to 2 file read functions, 3rd gen

Ever since their introduction, plus continuing through
several evolutions, both the meminfo and vmstat 'read'
functions employed a 'do while' loop for /proc access.

However, that loop construct was wrong since identical
tests were already done (twice!) within each loop body
itself, then accompanied by its own 'break' statement.

So, we will now transform them both into forever loops
which will help us to emphasize such break statements.

[ plus, let's return an error should nothing be read ]

[ lastly, eliminate 1 erroneous PROCPS_EXPORT prefix ]

Reference(s):
. original meminfo introduction
commit a20e88e4e72067c1138721c6e15e2d1130bc9595
. original vmstat introduction
commit a410e236abb47c7c43194e61d0566686f81513af

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agotop: eliminate 2 author sections from the man document
Jim Warner [Sun, 3 Jul 2016 05:00:00 +0000 (00:00 -0500)]
top: eliminate 2 author sections from the man document

We'll follow Craig's lead and whack some author stuff.

[ and we'll honor the SEE ALSO guideline for periods ]
[ but essentially ignore all the other busybody crap ]
[ which, to be honest, we pretty much follow already ]

[ actually, if you're told to follow a certain style ]
[ in program examples, you've gone way past busybody ]
[ crap and have entered the realm of anal retentive! ]

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agodocumentation: Update watch man page
Craig Small [Sun, 3 Jul 2016 06:16:28 +0000 (16:16 +1000)]
documentation: Update watch man page

Added locale details and fixed this manual page to follow standards
including ordering it the right way, keeping the names of things
consistent and removing authors section.

Signed-off-by: Craig Small <csmall@enc.com.au>
8 years agowatch,free: interpet intervals in non-locale way
Craig Small [Sun, 3 Jul 2016 06:14:36 +0000 (16:14 +1000)]
watch,free: interpet intervals in non-locale way

Both watch and free used the locale to determine the required delay
interval for subsequent updates. It's preferable to not care about
locale and accept both 12.34 and 12,34 as meaning 12 seconds and
340 microseconds.

References:
 https://bugs.debian.org/692113

Signed-off-by: Craig Small <csmall@enc.com.au>
8 years agodocumentation: rewrite for shared in free
Craig Small [Sun, 3 Jul 2016 00:36:58 +0000 (10:36 +1000)]
documentation: rewrite for shared in free

Minor tweaks in the free manual page
* Removed author section. It's wrong and strongly discouraged
  by the man page standards.
* Moved note about shared not in old kernels into bugs sections
as this is not relevant for most people and declutters the top
sections.

References:
 https://bugs.debian.org/755233

Signed-off-by: Craig Small <csmall@enc.com.au>
8 years agolibrary: find tty device name of process quicker
Simon Tatham [Sun, 3 Jul 2016 00:08:18 +0000 (10:08 +1000)]
library: find tty device name of process quicker

The procps library attempts to work out the tty of a process
through several methods. For things like /dev/tty123 or
/dev/foo it works fine.

For tty devices that put the minor number in a directory
of the major name this fails. So then we have to fallback
to stating things like the processes STDERR and try again.

Considering a lot of processes sit on ttys such as
/dev/pts/3 this is a lot of wasted time. At the point of
entering driver_name we know "/dev/pts" and we know "3"
we just didn't join them up the right way as this is old
code.

This change now looks for /dev/pts/3 as well. It does it
after looking for /dev/pts3 so the behaviour is the same.

References:
 https://bugs.debian.org/770215

Signed-off-by: Craig Small <csmall@enc.com.au>
8 years agolibrary: refactor exposed pointers management, 3rd gen
Jim Warner [Fri, 1 Jul 2016 05:00:00 +0000 (00:00 -0500)]
library: refactor exposed pointers management, 3rd gen

This commit brings all of those 'fetch' type functions
(supporting some form of 'reap') into closer alignment
with one another. The biggest impact is to be found in
the <stat> module, which now provides for the separate
copy of stack pointers which will be exposed to users.

The reason such a copy was not employed initially with
<stat>, unlike those for <pids> and <slabinfo>, is due
to the fact that such stacks were never sortable. Thus
the original raw consolidated extent pointers wouldn't
have been disturbed. But that meant no NULL delimiter.

So with this commit, all reap/fetch operations now use
pointer copies when returning results to callers. And,
all such arrays are now NULL delimited meaning callers
can choose their own access fencepost: totals or NULL.

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agolibrary: reduce copies of items to minimum, <STAT> api
Jim Warner [Fri, 1 Jul 2016 05:00:00 +0000 (00:00 -0500)]
library: reduce copies of items to minimum, <STAT> api

This commit will consolidate the three separate copies
of the item enumerators currently supporting that reap
function (summary, cpus & nodes) into one shared copy.

That select function will continue to maintain its own
dedicated items copy, albeit via a new item structure.

[ and while we're at it, we'll move the 'select' guy ]
[ to its proper alphabetical place, after our 'reap' ]

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agolibrary: stop treating lxcname differently, <PIDS> api
Jim Warner [Fri, 1 Jul 2016 05:00:00 +0000 (00:00 -0500)]
library: stop treating lxcname differently, <PIDS> api

Unlike other cached string fields (such as USER name),
that lxcname field was defined as 'const char *'. This
required a custom 'set' function using a cast in order
to avoid a compiler warning regarding that assignment.

So this commit brings lxcname into line with all those
other cached string fields. And while we're at it, the
reason some string fields have no 'freefunc' will also
be explained with some new comments in the Item_table.

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agolibrary: standardize extents_free_all() logic, 3rd gen
Jim Warner [Fri, 1 Jul 2016 05:00:00 +0000 (00:00 -0500)]
library: standardize extents_free_all() logic, 3rd gen

As those 3rd generation newlib APIs evolved so too did
the extents_free_all() function. Most versions of this
function required the callers to first verify that the
extents anchor wasn't empty, which was poor etiquette.

This simple function should have been much more robust
and forgiving. With this commit, it fnally becomes so.

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agowatch: truncate command in non-8 bit mode
Craig Small [Sat, 2 Jul 2016 06:07:56 +0000 (16:07 +1000)]
watch: truncate command in non-8 bit mode

When the screen width is not long enough to display the entire
command, watch puts three dots ... like elipses at the end of
the truncated line.

It's been like that for years, perhaps noone uses non 8-bit
watch?

References:
 commit 367b8bb616c6d52513b594ccb936d322a3f8b6c1

Signed-off-by: Craig Small <csmall@enc.com.au>
8 years agowatch: Add hostname to the header
Jesse Hathaway [Sat, 2 Jul 2016 05:45:36 +0000 (15:45 +1000)]
watch: Add hostname to the header

watch has the hostname added to the header so you know what device
if you have many it is running on.

Signed-off-by: Craig Small <csmall@enc.com.au>
8 years agokill: Correct pid type
Craig Small [Sat, 2 Jul 2016 05:04:22 +0000 (15:04 +1000)]
kill: Correct pid type

Previous commit used a pid type of int in the printf, this should
be a long.

References:
 commit 5e9c522eeade3a2cb1f5679db84d8164b405860d

8 years agolibrary: Cater for 32 char device names
Craig Small [Sat, 2 Jul 2016 05:01:11 +0000 (15:01 +1000)]
library: Cater for 32 char device names

The new library has this boundary set in a define.
Also fixed the off-by-one problem with the buffer and scanf

References:
 commit 1794875ab679809dabb2e1a7d6fa21f23b100d4d

8 years agokill: report error if cannot kill process
Craig Small [Sat, 2 Jul 2016 04:49:51 +0000 (14:49 +1000)]
kill: report error if cannot kill process

Shell kill would report a problem if you tried to kill a process
while procps kill was silent. This meant it looked like kill worked
when it actually failed.

References:
 commit 07642b8ea6d4d61518808de2e5e7f713a2f36618
 https://bugs.debian.org/733172

8 years agomisc: adapt others to struct layout change, <PIDS> api
Jim Warner [Thu, 23 Jun 2016 05:00:00 +0000 (00:00 -0500)]
misc: adapt others to struct layout change, <PIDS> api

With the change to struct pids_fetch, we'll just trade
some dot ('.') code for some pointer to ('->') syntax.

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agolibrary: more pids_fetch struct opaqueness, <PIDS> api
Jim Warner [Thu, 23 Jun 2016 05:00:00 +0000 (00:00 -0500)]
library: more pids_fetch struct opaqueness, <PIDS> api

With all our 3rd generation interfaces, we're now well
positioned to preserve binary compatibility should new
fields be added to any public structure (assuming that
the 'result' union already contains its largest type).

This remains true even for the <pids> interface, which
unlike the others, has one structure embedded within a
separate struct rather than declaring a pointer to it.

The counts struct was positioned after the stacks ptrs
array so as to preserve that ABI if ever new ints were
added. Logically, however, the counts (especially that
total) should precede the stacks array if we wished to
properly place a horse (total) before a cart (stacks).

So to enable relocating those counts we will no longer
embed that structure, but provide a pointer to it. And
this will make accessing syntax feel more natural too.

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agolibrary: partial revert of that numa 'fix', <STAT> api
Jim Warner [Wed, 22 Jun 2016 05:00:00 +0000 (00:00 -0500)]
library: partial revert of that numa 'fix', <STAT> api

This patch represents the partial revert of the commit
referenced below. And, so that yours truly (the author
for goodness sake) doesn't shoot his tootsies again in
the future, a cautionary programmer comment was added.

Reference(s):
commit dea403341886d7cc8338fd14461835794625b6a1

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agolibrary: a couple of miscellaneous changes, <PIDS> api
Jim Warner [Sat, 18 Jun 2016 05:00:00 +0000 (00:00 -0500)]
library: a couple of miscellaneous changes, <PIDS> api

This patch represents the following minor adjustments:

. old PROCTAB used with select & reap more descriptive

. reformatted PROCPS_PIDS_VAL macro like other 3rd gen

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agomisc: adapt others to the changes in 'get' return type
Jim Warner [Sat, 18 Jun 2016 05:00:00 +0000 (00:00 -0500)]
misc: adapt others to the changes in 'get' return type

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agolibrary: <SLABINFO> api, change that 'get' return type
Jim Warner [Sat, 18 Jun 2016 05:00:00 +0000 (00:00 -0500)]
library: <SLABINFO> api, change that 'get' return type

The following commit message is shared with 4 patches.
------------------------------------------------------

Under the newlib interface most of our 'get' functions
represent a bit of a compromise in that the actual raw
values are coerced into one (probably ok) return type.

That approach creates the possibility of truncation at
best, and wouldn't serve future needs should something
other than numeric data be added to the 'get' results.

This commit trades the current compromise for a return
value guaranteed to satisfy all future needs, namely a
pointer to a particular api's specific results struct.

The impact on existing programs is minimal, especially
when using a new supplied macro. Otherwise, native 'C'
syntax could be used, but may feel somewhat unnatural.

[ as an aside, this new approach allows us to delete ]
[ all 'getsfunc' table entries & the supporting code ]

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agolibrary: <MEMINFO> api, changed that 'get' return type
Jim Warner [Sat, 18 Jun 2016 05:00:00 +0000 (00:00 -0500)]
library: <MEMINFO> api, changed that 'get' return type

The following commit message is shared with 4 patches.
------------------------------------------------------

Under the newlib interface most of our 'get' functions
represent a bit of a compromise in that the actual raw
values are coerced into one (probably ok) return type.

That approach creates the possibility of truncation at
best, and wouldn't serve future needs should something
other than numeric data be added to the 'get' results.

This commit trades the current compromise for a return
value guaranteed to satisfy all future needs, namely a
pointer to a particular api's specific results struct.

The impact on existing programs is minimal, especially
when using a new supplied macro. Otherwise, native 'C'
syntax could be used, but may feel somewhat unnatural.

[ as an aside, this new approach allows us to delete ]
[ all 'getsfunc' table entries & the supporting code ]

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agolibrary: <VMSTAT> api, change in the 'get' return type
Jim Warner [Sat, 18 Jun 2016 05:00:00 +0000 (00:00 -0500)]
library: <VMSTAT> api, change in the 'get' return type

The following commit message is shared with 4 patches.
------------------------------------------------------

Under the newlib interface most of our 'get' functions
represent a bit of a compromise in that the actual raw
values are coerced into one (probably ok) return type.

That approach creates the possibility of truncation at
best, and wouldn't serve future needs should something
other than numeric data be added to the 'get' results.

This commit trades the current compromise for a return
value guaranteed to satisfy all future needs, namely a
pointer to a particular api's specific results struct.

The impact on existing programs is minimal, especially
when using a new supplied macro. Otherwise, native 'C'
syntax could be used, but may feel somewhat unnatural.

[ as an aside, this new approach allows us to delete ]
[ all 'getsfunc' table entries & the supporting code ]

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agolibrary: <STAT> api, change for that 'get' return type
Jim Warner [Sat, 18 Jun 2016 05:00:00 +0000 (00:00 -0500)]
library: <STAT> api, change for that 'get' return type

The following commit message is shared with 4 patches.
------------------------------------------------------

Under the newlib interface most of our 'get' functions
represent a bit of a compromise in that the actual raw
values are coerced into one (probably ok) return type.

That approach creates the possibility of truncation at
best, and wouldn't serve future needs should something
other than numeric data be added to the 'get' results.

This commit trades the current compromise for a return
value guaranteed to satisfy all future needs, namely a
pointer to a particular api's specific results struct.

The impact on existing programs is minimal, especially
when using a new supplied macro. Otherwise, native 'C'
syntax could be used, but may feel somewhat unnatural.

[ as an aside, this new approach allows us to delete ]
[ all 'getsfunc' table entries & the supporting code ]

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agolibrary: bug fix if libnuma.so unavailable, <STAT> api
Jim Warner [Fri, 17 Jun 2016 05:00:00 +0000 (00:00 -0500)]
library: bug fix if libnuma.so unavailable, <STAT> api

All our numa logic was well encapsulated under #ifndef
NUMA_DISABLE (as ./configure --disable-numa), with the
exception of 1 case label. The reason it didn't create
any problems is because the sole consumer (top) itself
responded to the presence of #define NUMA_DISABLE too.

But if that option wasn't used, an oops still awaited.

When experimenting with a 32-bit library plus a 64-bit
kernel, a bug was revealed should the numa library not
have been found. Our 'reap' function must tolerate the
potential of a 0 return from that stacks_fetch_tics().

Now, if numa is desired but not possible, we'll be ok.

[ and, we'll build numa history from fresher sources ]

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agolibrary: rename clashing pwcache functions
Craig Small [Fri, 17 Jun 2016 22:17:45 +0000 (08:17 +1000)]
library: rename clashing pwcache functions

On MacOS the system already has user_from_uid and group_from_gid.
These are renamed pwcache_get_user and pwcache_get_group.

They were also exported but did not appear in the symbol file
or used by any of the procps binaries. They are no longer exported.

References:
 https://gitlab.com/procps-ng/procps/issues/34

Signed-off-by: Craig Small <csmall@enc.com.au>
8 years ago- Fixing incorrect memory usage assessment due to skipping vmflags parsing
Jan Rybar [Wed, 15 Jun 2016 12:12:59 +0000 (14:12 +0200)]
- Fixing incorrect memory usage assessment due to skipping vmflags parsing
- Resolves Red Hat Bugzilla #1262864, affecting upstream

8 years agotop: some miscellaneous tweaks to code and/or comments
Jim Warner [Thu, 16 Jun 2016 05:00:00 +0000 (00:00 -0500)]
top: some miscellaneous tweaks to code and/or comments

This patch contains the following collection of stuff:

. an identifier Pids_read is now Pids_reap like <stat>
. eliminate redundant param from the <stat> VAL macros
. eliminate the unneeded tailored <stat> SUM_VAL macro
. corrected comment spelling for 'gouped' to 'grouped'

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agolibrary: optional parms protection missing, <PIDS> api
Jim Warner [Wed, 15 Jun 2016 05:00:00 +0000 (00:00 -0500)]
library: optional parms protection missing, <PIDS> api

When those items were made dynamic at 'new' time, some
other functions, previously assured of their presence,
failed to verify a 'reset' had acually been requested.

This commit just corrects that oversight and avoids an
attempt to 'assign_results' when no items are present.

Reference(s):
. when items/numitems became optional
commit 9ebadc1438a6665a98a9f0782523b0f9a2a6248f

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agotop: improved that #define PRETENDNOCAP implementation
Jim Warner [Wed, 15 Jun 2016 05:00:00 +0000 (00:00 -0500)]
top: improved that #define PRETENDNOCAP implementation

This development (only) define can be used to turn top
into a simple text program, disabling termcap effects.
But input (at screen bottom) suffers from a line wrap.

So, this commit just makes the input prompt processing
a little more effective by adding one leading newline.

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agolibrary: more tweaks for code and/or comments, 3rd gen
Jim Warner [Tue, 14 Jun 2016 05:00:00 +0000 (00:00 -0500)]
library: more tweaks for code and/or comments, 3rd gen

Following is a summary of significant changes (if any)
to each of these now upgraded 3rd gen library modules.

<meminfo> ............................................
. eliminated duplicate decl of 'struct procps_meminfo'
. standardized/normalized results struct union members
. added 'std' & 'var' dividers in .c file, like <pids>
. how did i miss relocating all these friggin' #undefs
. cleanup 'get' return logic (remove a redundant 'if')

<pids> ...............................................
. repositioned the procps_pidsinfo structure in header
. removed the extra trailing comma from enum pids_item
. standardized/normalized results struct union members

<slabinfo> ...........................................
. corrected comment typo (jeeze, in an 'aligned' para)
. standardized/normalized results struct union members
. added 'std' & 'var' dividers in .c file, like <pids>
. removed an obsolete #undef from procps_slabinfo_sort
. cleanup 'get' return logic (remove a redundant 'if')

<stat> ...............................................
. how did i miss relocating all these friggin' #undefs
. corrected an initialization fencepost used with numa <=== see Craig, here's a bug fix
. removed the extra trailing comma from enum stat_item
. standardized/normalized results struct union members
. added 'std' & 'var' dividers in .c file, like <pids>
. strengthen those parm checks in procps_stat_get func
. cleanup 'get' return logic (remove a redundant 'if')

<vmstat> .............................................
. standardized/normalized results struct union members
. added 'std' & 'var' dividers in .c file, like <pids>
. cleanup 'get' return logic (remove a redundant 'if')

[ virtually all of these tweaks reflect the author's ]
[ continuing pursuit of an unreasonable goal -- that ]
[ of a 'perfect' (plus 'pretty') C language program! ]

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agotop: swat nasty obscure bug associated with numa nodes
Jim Warner [Tue, 14 Jun 2016 05:00:00 +0000 (00:00 -0500)]
top: swat nasty obscure bug associated with numa nodes

When experimenting with two macro constants for stat.c
(#define STACKS_INCR & #define NEWOLD_INCR), a bug was
revealed in top, only surfacing if both were set to 1.

At those settings an absolute minimum number of stacks
would be allocated for CPUs & numa NODEs. This in turn
led top to overrun the lessor number of nodes since he
used the cpu index when accessing those numa stack(s).

What he should have been accessing was the cpu stacks.

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agolibrary: file now parsed with 'hsearch', <MEMINFO> api
Jim Warner [Fri, 10 Jun 2016 05:00:00 +0000 (00:00 -0500)]
library: file now parsed with 'hsearch', <MEMINFO> api

After reviewing the hsearch code in glibc, performance
will almost certainly benefit from abandoning a strcmp
approach in favor of hashing, just like that <vmstat>.

[ As an aside, now having struggled toward that goal ]
[ of opaqueness & making our API as user friendly as ]
[ possible, haven't we earned the rights to evaluate ]
[ other implementations? For example, GNU's hsearch? ]

[ We expose none of our 'info' struct details to the ]
[ users, but GNU exposes their 'hsearch_data' thingy ]
[ right there in <search.h>. But worse, they require ]
[ the user to zero it out before 1st use. Jeeze, you ]
[ mean that a function called hcreate_r could not do ]
[ its own memset? Aw, come on GNU! What's with that? ]

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agolibrary: final tweaks to code and/or comments, 3rd gen
Jim Warner [Thu, 9 Jun 2016 05:00:00 +0000 (00:00 -0500)]
library: final tweaks to code and/or comments, 3rd gen

With the dust now settling on all those 3rd generation
upgrades, this patch tries to provide some consistency
among the separate modules involved. Someday we should
consider a 4th generation where all redundant code has
been removed and isolated in a new shared source file.

Following is a summary of significant changes (if any)
to each of these now upgraded 3rd gen library modules.

<meminfo> ............................................
. strictly formatting/comment changes, code unaffected

<pids> ...............................................
. replaced a local mkSTR macro with existing STRINGIFY
. added fetch narrative explaining duplicate addresses

<slabinfo> ...........................................
. rearranged some free logic for procps_slabinfo_unref
. added fetch narrative explaining duplicate addresses

<stat> ...............................................
. added #define ENFORCE_LOGICAL, just as in <slabinfo>
. replaced a local mkSTR macro with existing STRINGIFY
. alphabetized the function declarations in the header

<vmstat> .............................................
. made one coverity concession with read_vmstat_failed

[ several of these changes may reflect this author's ]
[ continuing pursuit of an unreasonable goal -- that ]
[ of a 'perfect' (plus 'pretty') C language program! ]

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agolibrary: please keep procps-private.h free of #include
Jim Warner [Thu, 9 Jun 2016 05:00:00 +0000 (00:00 -0500)]
library: please keep procps-private.h free of #include

The 'procps.h' header includes all other headers which
contain exported (public) functions, while this header
has some (private) macros required for implementation.

If we mix the two, by including procps.h in this file,
we'll lose all hope of the compiler catching the kinds
of errors corrected in an immediately preceding patch.

[ we must be diligent, always constantly striving to ]
[ protect jimmy from ill effects due to copy & paste ]

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agolibrary: overcome effect of copy/paste, <SLABINFO> api
Jim Warner [Thu, 9 Jun 2016 05:00:00 +0000 (00:00 -0500)]
library: overcome effect of copy/paste, <SLABINFO> api

Needless to say, when one copies and then pastes, it's
always better when those results are refined somewhat.

The qsort callback declarations used the wrong results
type and 2 of their 3 input parameters were wrong too.

So this patch will fix that & generalize declarations.

[ plus add comment guidance about noop & extra enums ]
[ & provide for 'noop' sorting, as is done in <PIDS> ]

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agolibrary: adjust 'noop' callback definition, <PIDS> api
Jim Warner [Thu, 9 Jun 2016 05:00:00 +0000 (00:00 -0500)]
library: adjust 'noop' callback definition, <PIDS> api

Though all those callback's parameters are ignored and
qsort treats them as pointers to void, it's wrong when
3rd parm is 'enum pids_item', not 'struct sort_parms'.

So we will fix it in a way that lessens the likelihood
of another such a mistake when some new type is added.

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agoslabtop: correct the sort behavior for that NAME field
Jim Warner [Thu, 9 Jun 2016 05:00:00 +0000 (00:00 -0500)]
slabtop: correct the sort behavior for that NAME field

When our <SLABINFO> was recently re-designed, the sort
callback functions became table driven, whereas before
a single callback used switch/case constructs based on
an 'item'. Thus, sorting was made a tad more efficient
but, it introduced a buglet into that slabtop program.

The root cause of this bug was the fact that the field
NAME required a low-to-high sort and all other slabtop
fields used high-to-low. Fortunately, along with those
<SLABINFO> table driven sort changes, that i/f offered
users the option of either low-to-high or high-to-low.

So this patch just exploits that choice. And, it means
that such responsibilities are now properly located in
calling code, not in what's a general purpose library.

Reference(s):
. most recent lib sort enhancement & breakage
commit 5d5a52a3804f912f7be8c15f18bf87fe45bbcd99

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agotop: share the rcfile between master & newlib branches
Jim Warner [Tue, 7 Jun 2016 05:00:00 +0000 (00:00 -0500)]
top: share the rcfile between master & newlib branches

Since the decision was made to also add that Linux-4.5
support (was only in this newlib branch) to our master
branch, a tweak to newlib's top is necessary. In order
to share the rcfile between them, any fields unique to
a branch must appear last in it's list of enumerators.

And the troublesome field in question above is CGNAME.

It doesn't matter if a unique field is on or off, only
that it, as a higher enum/char, appear after all other
shared fields. Otherwise one risks the 'corrupt' error
message from the top without that field or the display
of the wrong column in the top with that unique field.

[ and strictly speaking, the changes under top_nls.c ]
[ were technically not really necessary. however, we ]
[ choose to maintain strict ordering via enum value. ]

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agomisc: adapt pgms to pids_sort_order change, <PIDS> api
Jim Warner [Mon, 6 Jun 2016 05:00:00 +0000 (00:00 -0500)]
misc: adapt pgms to pids_sort_order change, <PIDS> api

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agolibrary: misc tweaks for code and comments, <PIDS> api
Jim Warner [Mon, 6 Jun 2016 05:00:00 +0000 (00:00 -0500)]
library: misc tweaks for code and comments, <PIDS> api

This commit simply tries to keep naming plus formating
conventions on a par with the continuing climb up that
learning curve. These changes were suggested following
<slabinfo> sources upgrade from 2nd to 3rd generation.

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agolibrary: make struct name more descriptive, <STAT> api
Jim Warner [Mon, 6 Jun 2016 05:00:00 +0000 (00:00 -0500)]
library: make struct name more descriptive, <STAT> api

After normalizing the <SLABINFO> module, much of which
was based on this module, a structure which is crucial
to concurrent select/reap support is renamed the same.

Such a need for concurrent support was revealed during
slabtop testing. That program requests (select) global
data after calling for individual node data (reap) but
before those stacks have been accessed. Therefore, one
set of 'items'/'extents' could not possibly be shared.

So now we will know the former struct fetch_support as
ext_support. The former name was potentially confusing
since the struct was used by both 'select' and 'reap'.
However, only 'reap' ever called the 'fetch' function.

[ this <STAT> already accommodated concurrent usage. ]
[ in fact it contains 3 separate sets of items/exts. ]

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agolibrary: fix upper bounds enum delimiter, <VMSTAT> api
Jim Warner [Mon, 6 Jun 2016 05:00:00 +0000 (00:00 -0500)]
library: fix upper bounds enum delimiter, <VMSTAT> api

Oops, the PROCPS_VMSTAT_logical_end enum reflected the
source state before all those DELTA enum's were added.

[ plus add a couple of overlooked #undef directives, ]
[ and whack an unneeded stacks_alloc assignment too! ]

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agolibrary: whack a superfluous assignment, <MEMINFO> api
Jim Warner [Mon, 6 Jun 2016 05:00:00 +0000 (00:00 -0500)]
library: whack a superfluous assignment, <MEMINFO> api

This patch was prompted through work on the <slabinfo>
upgrade from 2nd gen to 3rd. And while this assignment
caused no real harm, it most certainly was misleading.

[ plus add a couple of overlooked #undef directives! ]

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agomisc: adapted other pgms to changes in, <SLABINFO> api
Jim Warner [Sun, 5 Jun 2016 05:00:00 +0000 (00:00 -0500)]
misc: adapted other pgms to changes in, <SLABINFO> api

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agolibrary: normalize/standardize the i/f, <SLABINFO> api
Jim Warner [Sun, 5 Jun 2016 05:00:00 +0000 (00:00 -0500)]
library: normalize/standardize the i/f, <SLABINFO> api

Before this major redesign, the slabs interface likely
was our messiest 2nd generation attempt at opaqueness.
Beyond the standard 'new', 'ref' & 'unref', there were
a total of 12 exported functions. Now, there are four.

The 1st step was to remove several of those functions.
These were quick to go since they were not used (yet):
. procps_slabnode_count
. procps_slabnode_getname
. procps_slabnode_getstack

Then, the following were internalized so users needn't
be burdened with implementation details in the future:
. procps_slabinfo_read (renamed: read_slabinfo_failed)
. procps_slabnode_stacks_alloc (renamed: stacks_alloc)

Still others evolved into the minimal interface we had
strived for in the other upgraded 3rd generation APIs:
. procps_slabnode_get -----------> procps_slabinfo_get
. separate stack_alloc/fill --> procps_slabinfo_select
. separate stacks_alloc/fill ---> procps_slabinfo_reap
. procps_slabnode_stacks_sort --> procps_slabinfo_sort

------------------------------------------------------
Beyond those reductions, the major modifications were:

. This API tries to be as forgiving as possible and as
such won't throw errors when a caller request makes no
sense. For example, if a 'get' or 'select' requested a
SLABNODE item (with no current means to id that node),
results will be zero. By the same token, should 'reap'
include a global SLABS item (meaning those values will
be duplicated in *every* node stack) it'll be allowed.

. If the above behavior is undesired, a new #define of
ENFORCE_LOGICAL can be used to restrict certain items.

. Permission problems will now be caught at 'new' time
thanks to a priming 'read' call. That read also serves
to make DELTA values potentially useful at 1st access.

. Separate slab/slabnode enumerators were consolidated
into one, simplifying validation & the results struct.

. Several internal parameter checks were relaxed since
they were already checked by the caller. Besides if we
cannot trust our own code we might as well hang it up.

. That sort provision was made more efficient and will
offer the ascending choice, in addition to descending.

------------------------------------------------------
Lastly, some additional thoughts regarding the future:

. It would not be difficult to expand 'select' to also
accept a nodeid, or to clone it as 'select_node'. And,
should the same be extended to 'get', a results struct
could be returned instead of signed long accommodating
the extra data type(s) like a node name (string data).

. The 'get' function is not currently affected by that
 define ENFORCE_LOGICAL. However, at some future point
perhaps -EINVAL would be more appropriate than a zero.

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agolibrary: rename the 'slab' sources as 'slabinfo' files
Jim Warner [Sun, 5 Jun 2016 05:00:00 +0000 (00:00 -0500)]
library: rename the 'slab' sources as 'slabinfo' files

Where possible, libprocps files convey the name of the
actual source pseudo file under the '/proc' directory.

This patch brings slab into line with such a standard.

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agolibrary: fix new and unref pids test
Craig Small [Tue, 7 Jun 2016 11:13:57 +0000 (21:13 +1000)]
library: fix new and unref pids test

The original test did not NULL the unallocated info pointer. This
was incorrectly calling the procps_pids_new() function.

Signed-off-by: Craig Small <csmall@dropbear.xyz>
8 years agovmstat: adapted to the interface changes, <VMSTAT> api
Jim Warner [Sat, 4 Jun 2016 05:00:00 +0000 (00:00 -0500)]
vmstat: adapted to the interface changes, <VMSTAT> api

This commit just eliminates all the procps_vmstat_read
calls since the interface now handles that requirement
as needed when the 'get' and 'select' guys are called.

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agolibrary: normalize/standardize interface, <VMSTAT> api
Jim Warner [Sat, 4 Jun 2016 05:00:00 +0000 (00:00 -0500)]
library: normalize/standardize interface, <VMSTAT> api

This interface represented a 2nd generation attempt at
the opaque newlib approach. In other words, it did not
involve the 1st generation 'chains'. Instead, 'stacks'
were employed. But the interface wasn't user friendly.

Users were required to create their own stacks, before
calling 'getstack' to retrieve multiple results with a
single call. Even worse, sometimes 'read' was required
before calling 'get' when working with single results.

So this commit represents the 3rd generation approach.
We eliminate the burden of 'read' and creating stacks.
Rather, beyond those standard 'new', 'ref' and 'unref'
functions, we'll offer just 'get' (single result) plus
a 'select' function (for multiple results in 1 stack).

And along the way, this commit vastly expands the data
extracted from /proc/vmstat. All values that currently
exist (and their delta equivalents) are now available.
Deltas were included for everything because there's no
real runtime costs beyond using a little extra memory.

The only problem is a lack of documentation for all of
those fields, as is reflected in the references below.
Oh well, maybe someday someone will dig through kernel
sources & finally plug that rather large document gap.

[ as an aside, rather than using a 'strcmp' approach ]
[ when parsing the /proc/vmstat file, as is found in ]
[ the <meminfo> module, we exploit those hash search ]
[ provisions that are found in the <search.h> header ]

Reference(s):
http://www.spinics.net/lists/linux-man/msg09096.html
http://www.linuxinsight.com/proc_vmstat.html

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agovmstat: fix 1st time enumerators so zeros aren't shown
Jim Warner [Thu, 2 Jun 2016 05:00:00 +0000 (00:00 -0500)]
vmstat: fix 1st time enumerators so zeros aren't shown

Some DELTA versions were used where raw totals needed.

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agotop: just miscellaneous tweaks to code and/or comments
Jim Warner [Wed, 1 Jun 2016 05:00:00 +0000 (00:00 -0500)]
top: just miscellaneous tweaks to code and/or comments

This patch represents the following minor adjustments:

. the official PROCPS_MEMINFO_VAL macro has become the
basis for our own abbreviated MEM_VAL derivative macro
just like was done for all the other newlib interfaces

. it felt like time to change those forest_?? function
names while maintaining their special relationships to
one another (alphabetic, with each 1 longer than prev)

. and some whitespace was altered and some lines added

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agolibrary: improve internal 'get' processing, <STAT> api
Jim Warner [Wed, 1 Jun 2016 05:00:00 +0000 (00:00 -0500)]
library: improve internal 'get' processing, <STAT> api

With an eye to the future, rather than managing a long
switch/case construct in the procps_stat_get function,
we'll adopt the approach used in the <meminfo> module.

By making 'get' processing table driven too, just like
'select' is already, that may ease future maintenance.

Along the way a rather large boo-boo was fixed dealing
with that /proc/stat 'procs_running' field which crept
in with the commit referenced below. It wasn't spelled
correctly and thus was never captured as PROC_RUNNING.

Reference(s):
commit abc71a46ada71b790eb526d6cddb91e0d0aed4cb

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agolibrary: add parameter checks for 'get', <MEMINFO> api
Jim Warner [Wed, 1 Jun 2016 05:00:00 +0000 (00:00 -0500)]
library: add parameter checks for 'get', <MEMINFO> api

When this interface was normalized/standardized, under
the commit referenced below, the parameters were never
validated in the 'get' function. Let's plug that hole.

Reference(s):
commit 407f1b71de3c4baed23d897b86ad316b64ad1ec9

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agolibrary: Fix pids API tests
Craig Small [Sun, 22 May 2016 12:12:54 +0000 (22:12 +1000)]
library: Fix pids API tests

Update the pids tests for tweaked API. Unsure why the toomany
test doesn't work, may point to a problem in the change as it used
to trigger, or the library has flexibility.

8 years agolibrary: eliminated a final potential NULL, <PIDS> api
Jim Warner [Thu, 19 May 2016 05:00:00 +0000 (00:00 -0500)]
library: eliminated a final potential NULL, <PIDS> api

In that reference below a specific systemd problem was
fixed in the commit shown. However lurking deep within
the <pids> interface was yet one final case where NULL
could be returned, involving 'strv' and the following:

. a user requested both a single string vector (always
returned as a normal string) & the vectorized version,
as with PROCPS_PIDS_CMDLINE and PROCPS_PIDS_CMDLINE_V.

. a user simply duplicated some vectorized enum items.

The root of that NULL problem is the fact those single
string vectors shared the same proc_t field with their
true vectorized version. So while multiple occurrences
for most strings could be satisfied with strdup versus
the normal ownership usurpation, those true vectorized
fields could not be quite so easily copied/duplicated.

Thus newlib chose to return a NULL result.strv pointer
under either of the above scenarios (which perhaps was
just a user boo-boo in the first place). In any event,
the NULL was a potential for true string vectors only.

Now, since newlib is the sole caller into the readproc
module, separate fields have been created for what are
just normal strings (never vectorized) and those which
remain the true vectorized versions. And, former flags
which only worked if combined, now act as stand alone.

Thus, both PROCPS_PIDS_CMDLINE & PROCPS_PIDS_CMDLINE_V
can be used simultaneously (as they should have been).

Also with this patch, items which a user duplicates in
the stack (beyond the first such item) will return the
the string "[ duplicate ENUM_ID ]". This practice will
apply to both single strings and true vectorized ones.
In addition to informing users of their error, it will
also mean potential NULLs need now never be a concern.

Reference(s);
http://www.freelists.org/post/procps/systemd-binary-vs-library
commit 0580a7b4c67d0297629d37281b4f690894429626

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agolibrary: move QUICK_THREADS hack before return
Craig Small [Tue, 17 May 2016 11:56:21 +0000 (21:56 +1000)]
library: move QUICK_THREADS hack before return

Minor complaint where a line to stop GCC from complaining occured
after the return.

8 years agopmap: Minor fixes
Craig Small [Tue, 17 May 2016 11:55:14 +0000 (21:55 +1000)]
pmap: Minor fixes

Some reasource leaks and a bunch of flags not explictly set.

References:
 Coverity 99162, 99146, 99145

8 years agolibrary: respond to coverity (reluctantly), <PIDS> api
Jim Warner [Mon, 16 May 2016 19:14:14 +0000 (14:14 -0500)]
library: respond to coverity (reluctantly), <PIDS> api

Calls to free() have now been reintroduce in the new()
function to quiet coverity warnings. Those free's were
removed originally as that library 'new' was returning
with a fatal error and a caller should end abnormally.

Plus, it is virtually impossible to fail a malloc call
under linux. And lastly, they required braces with the
if statement making the code considerably less pretty.

[ commit also includes 2 unrelated whitespace tweaks ]

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agolibrary: avoid any --with-systemd conflict, <PIDS> api
Jim Warner [Mon, 16 May 2016 11:06:06 +0000 (06:06 -0500)]
library: avoid any --with-systemd conflict, <PIDS> api

A potential conflict arises should should some program
attempt to access systemd data using our library built
without that support (--disable-systemd). And while we
could argue that all callers should check against NULL
string pointers, it's not expected of libprocps users.

So we'll guarantee 'em valid string consisting of "?".

Reference(s):
http://www.freelists.org/post/procps/systemd-binary-vs-library

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agovmstat: sys variables are unsigned longs
Craig Small [Mon, 16 May 2016 10:03:11 +0000 (20:03 +1000)]
vmstat: sys variables are unsigned longs

When the API changed for the use_format the type changed for the
system variables out of stat, but the printf format was not changed
along with it.

vmstat.c:868:14: warning: format ‘%lld’ expects argument of type ‘long
long int’, but argument 2 has type ‘long unsigned int’ [-Wformat=]
     printf(_("%13lld interrupts\n"), SYSv(sstat_INT));

References:
 commit 2e6435a39dd8260462652b999c1bb45e15ae0d62

Signed-off-by: Craig Small <csmall@dropbear.xyz>
8 years agopmap: finally silence a warning without creating a bug
Jim Warner [Mon, 16 May 2016 05:00:00 +0000 (00:00 -0500)]
pmap: finally silence a warning without creating a bug

The patch referenced below silenced an 'uninitialized'
compiler warning but it also created a bug where zeros
appeared under the Address column with that -x option.

So this commit swats that bug and avoids any warnings.

[ while yours truly created that bug, in his defense ]
[ let's at least acknowledge the god awful loop code ]
[ which was the root of the problem & wrong solution ]

[ so the ugliness of this most recent solution is in ]
[ perfect harmony with the *really* ugly loop itself ]

Reference(s):
commit 0299bd15b0d6f0e8c3524b0383ce0bbcab66c4c5

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agolibrary: try different alignment for types, <PIDS> api
Jim Warner [Sun, 15 May 2016 05:00:00 +0000 (00:00 -0500)]
library: try different alignment for types, <PIDS> api

Rather than adopt an approach offered below, involving
changing all enumerator names to convey types, perhaps
this much more modest change is a worthwhile 1st step.

By just changing the comments to 'right justification'
it dramatically improves readability, at least it does
to my eye.  Perhaps such an approach can postpone that
massive alternative effort for the foreseeable future.

Reference(s):
http://www.freelists.org/post/procps/newlib-drip-drip,4

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agops+top: adapt for changes in results types, <PIDS> api
Jim Warner [Sun, 15 May 2016 05:00:00 +0000 (00:00 -0500)]
ps+top: adapt for changes in results types, <PIDS> api

I've got nothing to add to the commit message but that
doesn't mean I won't produce perfectly justified text.

Signed-off-by: Jim Warner <james.warner@comcast.net>