]> granicus.if.org Git - procps-ng/log
procps-ng
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>
8 years agolibrary: try to minimize the results types, <PIDS> api
Jim Warner [Sun, 15 May 2016 05:00:00 +0000 (00:00 -0500)]
library: try to minimize the results types, <PIDS> api

This is just beginning an effort to minimize/normalize
the sheer variety of results types in use for our API.

In taking these first baby steps, a few anomalies were
found. There'll no doubt be many more yet to discover.

. the _FLT_ (fault) fields were already signed long in
the proc_t (even though their sscanf format used %lu).

. although strtoul will alway return an unsigned long,
all of the _VM_ fields were made signed long just like
other memory fields (& signed sorts more efficiently).

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

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agomisc: adapt others to changes in interface, <PIDS> api
Jim Warner [Sat, 14 May 2016 05:00:00 +0000 (00:00 -0500)]
misc: adapt others to changes in interface, <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>
8 years agolibrary: standardize portions of interface, <PIDS> api
Jim Warner [Sat, 14 May 2016 05:00:00 +0000 (00:00 -0500)]
library: standardize portions of interface, <PIDS> api

This represents a rather major interface redesign. The
following highlights most of the changes/enhancements.

. The 'read' interface (employed by pgrep & pidof) saw
the biggest change. The 'open', 'next' and 'shut' guys
all went bye-bye, replaced by a single 'get' function.

. The items specified at 'new' time no longer serve as
the maximum. In fact, items & numitems are now treated
as optional, should callers prefer to wait until later
when the 'reset' function would then become mandatory.

. Even at 'reset' time, the stacks are not tied to any
sort of maximum. They will grow dynamically as needed.

. The order of some parameters was changed to parallel
that found in our other APIs. Specifically, when items
& numitems are needed they're specified in that order.

. A user will no longer be prevented from concurrently
employing any accessor functions. In other words, that
'get' (old 'read') won't preclude 'reap' and 'select'.

. A duplicate enumerator was found dealing with locked
resident pages. So, the name VM_LOCK was eliminated in
favor of VM_RSS_LOCKED, which is way more descriptive.

. The struct address returned to callers following any
reap() or select() is now more sharable as pids_fetch.

. Some input parameter names were changed to make them
more descriptive of the intended purpose/requirements.

------------------------------------------------------
Internally, there were numerous implementation changes
made that did not directly impact any potential users.

. That #define FPRINT_STACKS was eliminated along with
the associated supporting function and its invocation.

. Addresses returned following 'reap' or 'select' will
now be NULL delimited, so one has the option of stacks
access via the total count or this new NULL fencepost.

. Input params were simplified and generalized in both
oldproc_open() & close() to enable more than 1 PROCTAB
to be open simultaneously, which was required for get.

. The PROCPS_PIDS_logical_end enum was relocated after
the Item_table making the need to keep it synchronized
more apparent (if the table expands it's right there).

. The 'Public function' section of the source file was
subdivided into 1) the three basic required functions;
and 2) functions that can sometimes vary between APIs.

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agolibrary: oldproc_open has always yes check
Craig Small [Sat, 14 May 2016 12:55:16 +0000 (22:55 +1000)]
library: oldproc_open has always yes check

if (info->flags | PROC_UID)
Something OR a non-zero constant is always true.
Looks like it should be and'ed for the standard flag masking
pattern.

References:
  Coverity #99118

Signed-off-by: Craig Small <csmall@dropbear.xyz>
8 years agolibrary: Remove dead branch in file2strvec
Craig Small [Sat, 14 May 2016 12:43:19 +0000 (22:43 +1000)]
library: Remove dead branch in file2strvec

A while loop used n >=0
A branch inside the loop had a test for n<0
That's never going to happen!
So the branch must go. There is similiar code outside
the branch. Yes, I miss pythons while else here.

Also cleaned up the ***-awful indentation this function had.
No wonder that branch lived for so long there.

References:
 Coverity #99119

Signed-off-by: Craig Small <csmall@dropbear.xyz>
8 years agolibrary: slab sort derefence after check
Craig Small [Sat, 14 May 2016 12:32:35 +0000 (22:32 +1000)]
library: slab sort derefence after check

procps_slabnode_stacks_sort() would check if stacks was NULL
*after* the pointer was derefenced in the initialisation of
the variable p.

p is now assigned after the check.

References:
 Coverity #99160

8 years agovmstat: use_format use new stat select
Craig Small [Sat, 14 May 2016 06:28:47 +0000 (16:28 +1000)]
vmstat: use_format use new stat select

While new_format was using the new stat select feature the
use_format did not. This type of format now uses the select setup
for both the meminfo and stat set of information.

8 years agovmstat: use new API for meminfo and stat
Craig Small [Thu, 12 May 2016 12:40:32 +0000 (22:40 +1000)]
vmstat: use new API for meminfo and stat

Update vmstat to use the select functions for both the stat and
memory information.

8 years agolibrary: remove the ull_int result type, <MEMINFO> api
Jim Warner [Thu, 12 May 2016 05:00:00 +0000 (00:00 -0500)]
library: remove the ull_int result type, <MEMINFO> api

Because of the vast quantities of virtual memory which
may be allocated, it initially seemed like a good idea
to provide for a widest possible range through the use
of a 'ull_int' result type. However, on second thought
the implementation was a bit flawed for these reasons:

. that underlying meminfo_data variable 'VmallocTotal'
is 'unsigned long' not a required 'unsigned long long'

. there wasn't a convenient way to value it since each
variable was set with a strtoul() call, not strtoull()

So this patch will standardize on the 'ul_int' results
type (and reduce the associated delta to 's_int' too).
For now, we'll rely on protections under a 64-bit arch
where a 'ull_int' & 'ul_int' yield identical capacity.

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agolibrary: allow negative delta values for 2, <STAT> api
Jim Warner [Wed, 11 May 2016 23:18:18 +0000 (18:18 -0500)]
library: allow negative delta values for 2, <STAT> api

A recent buglet in the <meminfo> interface, where many
delta values could legitimately be negative, suggested
a review of this module where a minus was forced to 0.

As it turns out, there are two delta items that indeed
could be negative. They involve the current processes.

So henceforth, DELTA_PROC_BLOCKED & DELTA_PROC_RUNNING
will now be allowed to go negative. I believe that all
other items can only grow. But, if we find more later,
at least the adaptation approach has been established.

[ this whole business of checking for less than zero ]
[ harks back to an old kernel anomaly where negative ]
[ tics were sometimes experienced. top was affected. ]

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agops: ensuring procps_meminfo_new success, <MEMINFO> api
Jim Warner [Wed, 11 May 2016 21:16:16 +0000 (16:16 -0500)]
ps: ensuring procps_meminfo_new success, <MEMINFO> api

The 'new' function requires a NULL context pointer, so
when existing code worked, it was just a case of luck.

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agolibrary: ain't like your father's delta, <MEMINFO> api
Jim Warner [Wed, 11 May 2016 22:17:17 +0000 (17:17 -0500)]
library: ain't like your father's delta, <MEMINFO> api

When the code for DELTA values (among other stuff) was
stolen from the recently revised <stat> interface, the
concept of ever growing values was propagated too. But
here we must manage both growing and shrinking values.

Thus former protections against a negative delta don't
have any place in this module and are hereby banished.

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agops: Output of nwchan is a number
Craig Small [Thu, 12 May 2016 10:43:49 +0000 (20:43 +1000)]
ps: Output of nwchan is a number

For some time with enough compilier flags I have watched the
following warning drift by:
ps/output.c: In function â€˜pr_nwchan’:
ps/output.c:658:41: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
   return snprintf(outbuf, COLWID, "%x", (unsigned)rSv(WCHAN_NAME, str, pp));

nwchan is supposed to be the address of where the process is sleeping,
not the name. Besides %x is a hex number not a string hence the warning.

nwchan now prints the address, in hex and GCC is happy.

8 years agolibrary: minor fix for procps_meminfo_select
Craig Small [Wed, 11 May 2016 21:52:36 +0000 (07:52 +1000)]
library: minor fix for procps_meminfo_select

Thus function returns a pointer, not an int, so if there is
an error return NULL and not -errno.

proc/meminfo.c: In function â€˜procps_meminfo_select’:
proc/meminfo.c:994:20: warning: return makes pointer from integer
without a cast [-Wint-conversion]
             return -ENOMEM;

References:
 commit 407f1b71de3c4baed23d897b86ad316b64ad1ec9

8 years agovmstat: interface change separate patch, <MEMINFO> api
Jim Warner [Wed, 11 May 2016 17:00:00 +0000 (12:00 -0500)]
vmstat: interface change separate patch, <MEMINFO> api

In view of Craig's work with the vmstat <STAT> change,
adaptation to <MEMINFO> changes is offered separately.

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agomisc: adapted other programs to changes, <MEMINFO> api
Jim Warner [Wed, 11 May 2016 17:00:00 +0000 (12:00 -0500)]
misc: adapted other programs to changes, <MEMINFO> api

This patch just brings *most* other programs into line
with those changes recently made in the <meminfo> API.

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agolibrary: improve/normalize an interface, <MEMINFO> api
Jim Warner [Wed, 11 May 2016 17:00:00 +0000 (12:00 -0500)]
library: improve/normalize an interface, <MEMINFO> api

This represents the refinement of this interface after
the <stat> API was redesigned. We now follow a pattern
of 'get' for single item retrieval & 'select' for when
multiple items are desired, with just 1 function call.

And again following the <stat> lead this interface now
provides for delta values encompassing most items. The
reason I went cuckoo nuts with those deltas is because
they are essentially free. At the cost of a little RAM
and just one memcpy there's no other price to be paid.

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agolibrary: lift item restrictions on 'get()', <STAT> api
Jim Warner [Tue, 10 May 2016 05:00:00 +0000 (00:00 -0500)]
library: lift item restrictions on 'get()', <STAT> api

In the commit referenced below it was acknowledged the
procps_stat_get() function will intentionally restrict
returned values by excluding DELTA items among others.

Upon reflection that decision seemed rather arbitrary,
and so has now been lifted. And, while the initial use
of a DELTA will return 0, subsequent calls to that get
function will now return the difference (providing one
second, at least, has elapsed between any such calls).

Reference(s):
. reference to design decisions
commit abc71a46ada71b790eb526d6cddb91e0d0aed4cb

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agolibrary; add more of my gratuitous changes, <STAT> api
Jim Warner [Tue, 10 May 2016 05:00:00 +0000 (00:00 -0500)]
library; add more of my gratuitous changes, <STAT> api

This commit is just my usual tweaking after an initial
submission, once the dust has settled & some more desk
checking was performed. Here are the changes included:

. get function need not check the 'stat_was_read' flag
( first time in save_sec == 0 so branch always taken )

. some table logic appeared outside the proper section
. cleanup_stack's loop made to work like assign_result
. eliminated an include of procps.h from stat.h header
. removed 'ext_numitems' from the stacks_extent struct
. changed the alignment of three prototypes for stat.h
. reorganized the pointers for 'stacks_extents' struct
. improved types indentation in header for readability

. lastly, some really gratuitous changes made to align
- comments within that private 'stacks_alloc' function

Signed-off-by: Jim Warner <james.warner@comcast.net
8 years agomisc: adapt additional programs to changes, <STAT> api
Jim Warner [Fri, 6 May 2016 05:00:00 +0000 (00:00 -0500)]
misc: adapt additional programs to changes, <STAT> api

This patch brings the ps program (very small impact) &
that vmstat program (major impact) into agreement with
the new <stat> API. In the case of the latter guy, the
many separate calls to 'get' should be replaced by one
single 'select' call obtaining all data in one stroke.

[ but, i was too tired to undertake that enhancement ]

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agotop: adapted this program to those changes, <STAT> api
Jim Warner [Fri, 6 May 2016 05:00:00 +0000 (00:00 -0500)]
top: adapted this program to those changes, <STAT> api

This guy is the real beneficiary of the new <stat> API
especially when it comes to the DELTA items which were
really the only values of interest (beyond some id's).

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agolibrary: improve/standardize one interface, <STAT> api
Jim Warner [Fri, 6 May 2016 05:00:00 +0000 (00:00 -0500)]
library: improve/standardize one interface, <STAT> api

This commit represents a complete redesign of the stat
interface. Gone are the confusing 8 separate accessors
along with their 2 additional read functions. In their
place we have just 3 accessors, with no read required.

That old interface also suffered an inflexibility with
respect to structures.  Now we deal with an unchanging
standard 'result' struct enabling future changes where
the binary interface will no longer need to be broken.

And gone is that former unnecessary typedef, used when
dealing with jiffies. Now the standard C type is used.

Our new API also adds some brand new functionality. If
a caller plans to employ successive 'select' or 'reap'
invocations, then delta values are available (which is
actually only what that top program is interested in).

At some future point a 'sort' function could be easily
introduced to complement the 'reap' function. However,
I saw no need for it at present and so it was omitted.

There were several design decisions which everyone may
not agree with. In support I'll offer these rationals:

. The 'get' function returns a signed long long result
which means a potential loss of some significance. But
I felt the ability to distinguish actual errors (minus
values) from true zero results were worth such a risk.

. The DELTA item enumerators were also made signed and
smaller than their parents. And they are intentionally
grouped as last so as to emphasize those distinctions.

. The SYS type items were excluded from the new 'reap'
function. It would not make sense to duplicate them in
each results stack. They're limited to 'get'/'select'.

. By the same token, some items (DELTA, etc.) will not
be allowed under that 'get' routine. That function was
already open to significant internal overhead (through
subsequent calls like in vmstat.c). That is why it has
been limited via 1 second between reads of /proc/stat.

Lastly, when we finally get around to documenting this
interface there's a real potential toe stubber when it
comes to the numa node portion. The libnuma.so doesn't
really provide any means to retrieve the active nodes.
Thus, any total reported by <stat> is just the highest
node number plus one, as reported by the numa library.

Any unused/inactive nodes are identified through these
. PROCPS_STAT_TIC_ID shows as PROCPS_STAT_NODE_INVALID

By the same token after the STAT_REAP_CPUS_ONLY 'reap'
. PROCPS_STAT_TIC_NUMA_NODE = PROCPS_STAT_NODE_INVALID

Reference(s):
http://www.freelists.org/post/procps/newlib-stat-interface

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agolibrary: remove an obsolete 'jiffs' typedef in sysinfo
Jim Warner [Thu, 28 Apr 2016 05:00:00 +0000 (00:00 -0500)]
library: remove an obsolete 'jiffs' typedef in sysinfo

During work on the new <stat> interface the typedef of
jiffs was eliminated along with the clang warning. The
exact same warning in sysinfo.h now goes bye-bye also.

Reference(s):
./proc/sysinfo.h:16:28: warning: redefinition of typedef 'jiff' is a C11 feature [-Wtypedef-redefinition]
typedef unsigned long long jiff;

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agotop: miscellaneous accumulated tweaks of code/comments
Jim Warner [Tue, 26 Apr 2016 05:00:00 +0000 (00:00 -0500)]
top: miscellaneous accumulated tweaks of code/comments

This commit contains the following changes, which were
prompted by a coverity analysis which Craig initiated:

. comment typo predicting 'String not null terminated'
. eliminate 'Logically dead code' from insp_make_row()

And this tweak unrelated to coverity is also included:

. use more modern (recommended) approach for time call

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agomisc: Few more resource leak fixes
Craig Small [Tue, 3 May 2016 11:58:13 +0000 (21:58 +1000)]
misc: Few more resource leak fixes

free after malloc in signals.c
closedir after opendir in diskstat

8 years agovmstat: free before return
Craig Small [Tue, 3 May 2016 11:57:00 +0000 (21:57 +1000)]
vmstat: free before return

Previous commit the free was added after the return. That doesn't
work as planned.

References:
 commit 6151b794c6a4f1958dee81fb17bad83b65166c8f

8 years agolibrary: Fix LINUX_VERSION macro
Craig Small [Sun, 1 May 2016 07:46:25 +0000 (17:46 +1000)]
library: Fix LINUX_VERSION macro

The previous commit did not take into account operator evaluation
order so always gave 0. Fixed the macro and added some checks for
the macro.

References:
 commit 9abf7d879d07c140a265b9f8efb642fdb5bd06b3

8 years agolibrary: protect against large version numbers.
Craig Small [Sun, 1 May 2016 07:14:48 +0000 (17:14 +1000)]
library: protect against large version numbers.

Linux release numbers are x.y.z we assumed but never protected
against x> 0x7fff and y,z > 0xff before.

Linux release in 1991, 1 major release per 6 years so we're fine
until 7452, unless they do way too many minor rels (max being 39)

8 years agolibrary: procps_uptime() return value is a status
Craig Small [Sun, 1 May 2016 06:50:25 +0000 (16:50 +1000)]
library: procps_uptime() return value is a status

procps_uptime, previously just plain uptime() used to put the
uptime (as a double) in the first argument and return uptime
(as an int).

It meant if you ran
 myuptime2 = procps_uptime(&myuptime1, NULL);
You might get different results for myuptime1 and myuptime2 because
they are different types.

Most library calls use the return value to return the status,
procps_uptime was in the middle.

Until now.

This function will return 0 on success. If you want (for whatever
reason) uptime as an int then cast it.

All of the procps binaries didn't use the return value for uptime
except ps which set a variable to it but never used it anywhere.

8 years agovmstat: Various resource_leak fixes
Craig Small [Sun, 1 May 2016 06:18:10 +0000 (16:18 +1000)]
vmstat: Various resource_leak fixes

Using *_unref to free up the memory. Most of these are one-shot
so not terribly important anyhow.

8 years agolibrary: provide ref and unref for diskstat
Craig Small [Sun, 1 May 2016 06:15:49 +0000 (16:15 +1000)]
library: provide ref and unref for diskstat

While procps_diskstat_ref and procps_diskstat_unref were declared
they actually weren't implemented in the library. Linking some
binary that used these functions gave the following errors:

  CCLD     vmstat
vmstat.o: In function `disksum_format':
vmstat.c:719: undefined reference to `procps_diskstat_unref'
vmstat.o: In function `diskformat':
vmstat.c:591: undefined reference to `procps_diskstat_unref'

8 years agopmap: Do not display error if shmctl(..IPC_RMID) returns EINVAL
Cristian Rodríguez [Thu, 28 Apr 2016 05:22:53 +0000 (02:22 -0300)]
pmap: Do not display error if shmctl(..IPC_RMID) returns EINVAL

The segment may have been destroyed by the kernel automagically
after shmdt(addr)

How to reproduce:

sysctl -w kernel.shm_rmid_forced=1
./pmap 1
shared memory remove: Invalid argument
[..]

8 years agopgrep: some coverity fixes
Craig Small [Wed, 27 Apr 2016 12:50:25 +0000 (22:50 +1000)]
pgrep: some coverity fixes

procps_ns_get_id should be checked for < 0 not -1
strncpy should copy only to buflen-1 not buflen

References:
  Coverity 99117, 99108, 99107

8 years agotop: adapt source to changes with includes, <STAT> api
Jim Warner [Mon, 25 Apr 2016 05:00:00 +0000 (00:00 -0500)]
top: adapt source to changes with includes, <STAT> api

All other programs were able to accommodate the change
in name from readstat.h to stat.h without modification
because they were all using that procps.h header file.

Well now top can too (providing you ignore a comment).

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agolibrary: rename those readstat.c & h sources to 'stat'
Jim Warner [Mon, 25 Apr 2016 05:00:00 +0000 (00:00 -0500)]
library: rename those readstat.c & h sources to 'stat'

In an attempt to normalize the 'stat' interface, we'll
first shed any reminders of the old readproc interface
by changing file names to be more descriptive & brief.

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agolibrary: fix boo-boo left by earlier patch, <PIDS> api
Jim Warner [Mon, 25 Apr 2016 05:00:00 +0000 (00:00 -0500)]
library: fix boo-boo left by earlier patch, <PIDS> api

After the commit referenced below the potential exists
for a SEGV (resulting from an out-of-bounds Item_table
reference if PROCPS_PIDS_physical_end is encountered).

So this patch eliminates that PROCPS_PIDS_physical_end
as no longer necessary and completes the task of using
PROCPS_PIDS_logical_end as a sole necessary fencepost.

Reference(s):
commit e7585992d9c0743246247b3d6ee0041942fe07d5

8 years agolibrary: reorder (alphabetize) some things, <PIDS> api
Jim Warner [Mon, 25 Apr 2016 05:00:00 +0000 (00:00 -0500)]
library: reorder (alphabetize) some things, <PIDS> api

Without breaking either ABI or API just rearrange some
stuff to provide a little more consistent source file.

[ these were prompted by some work on the <stat> API ]
[ in preparation for him borrowing some of our code. ]

Reference(s):

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agolibrary: fix order of operations for %use of slabinfo
Craig Small [Mon, 25 Apr 2016 10:24:20 +0000 (20:24 +1000)]
library: fix order of operations for %use of slabinfo

In some environments, 100 * nr_active_objs is calculated at first,
and lower 32bit of the result is divided by nr_objs.
If 100 * nr_active_objs > 42949672, %use will be incorrect.

Reported by Takayuki Nagata <tnagata@redhat.com> and adopted
his patch for new library (see reference)

References:
 commit 99d71ad5810b8fbfab5c4c6be97f3e86953b6157
 http://www.freelists.org/post/procps/PATCH-bprocps-fix-order-of-operations-for-use-of-slabinfo

8 years agobuild-sys: Enable optional hardening flags
Craig Small [Mon, 25 Apr 2016 07:07:22 +0000 (17:07 +1000)]
build-sys: Enable optional hardening flags

With the configure option --enable-harden-flags the CFLAGS and
LDFLAGS are manipulated to provide some hardening protection
to the binaries.

psmisc uses these flags on by default with no troubles, however
it doesn't have a library in it either.

References:
  https://wiki.debian.org/Hardening

8 years agotest: Update gitlab CI YAML to use shared runner
Craig Small [Wed, 20 Apr 2016 12:20:55 +0000 (22:20 +1000)]
test: Update gitlab CI YAML to use shared runner

8 years agodocs: Additional flags in man pages
Craig Small [Tue, 19 Apr 2016 13:28:53 +0000 (23:28 +1000)]
docs: Additional flags in man pages

More PIDS defintions

8 years agotests: update template and add pids
Craig Small [Tue, 19 Apr 2016 11:33:02 +0000 (21:33 +1000)]
tests: update template and add pids

Generalised the library API tests and created a common
test-runner. Instead of copy and pasting the same code in
each time.

First cut of pids API test, for _new so far.

8 years agomisc: adapt others to a changed identifier, <pids> API
Jim Warner [Mon, 18 Apr 2016 05:00:00 +0000 (00:00 -0500)]
misc: adapt others to a changed identifier, <pids> API

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agolibrary: changed use of 'fill' to 'select', <pids> API
Jim Warner [Mon, 18 Apr 2016 05:00:00 +0000 (00:00 -0500)]
library: changed use of 'fill' to 'select', <pids> API

Remove a remnant of this new API's evolution.  Here we
no longer fill stacks, rather we reap and select them.

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agolibrary: protect against a future breakage, <pids> ABI
Jim Warner [Mon, 18 Apr 2016 05:00:00 +0000 (00:00 -0500)]
library: protect against a future breakage, <pids> ABI

By co-mingling both external/internal identifiers with
actual implementation code, potential future additions
to our API would have been considerably more difficult.

So, this patch will now rely solely on internal/hidden
identifiers serving as fenceposts in validation logic.

And if the following convention is used for new fields
we will maintain that enumerator alphabetic ordering a
a little longer (even though 2 user fields now don't):

. PROCPS_PIDS_XTRA_FOO_A, PROCPS_PIDS_XTRA_FOO_B, etc.

Reference(s):
http://www.freelists.org/post/procps/me-too-newlib,7

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agodocs: Start documenting the pids API
Craig Small [Mon, 18 Apr 2016 12:57:01 +0000 (22:57 +1000)]
docs: Start documenting the pids API

Started with procps_pids_new() and documenting this function
as well as the enum used in this function.

8 years agolibrary: correct the procps_pid_length() +1 distortion
Jim Warner [Sun, 17 Apr 2016 05:00:00 +0000 (00:00 -0500)]
library: correct the procps_pid_length() +1 distortion

Unfortunately, reading that '/proc/sys/kernel/pid_max'
file returns a newline, which we will now account for.

[ also, we should use the existing dedicated buffer ]

Reference(s):
. original 'procps_pid_length' introduction
commit ccb6ae8de14b0cde25b84369ef995bcd69cbf7b6

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agolibrary: remove remaining 'likely' & 'unlikely' macros
Jim Warner [Sun, 17 Apr 2016 05:00:00 +0000 (00:00 -0500)]
library: remove remaining 'likely' & 'unlikely' macros

Say goodbye to the 'makes it hard to read' macro shit.

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

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agopidof: check cmd if space in argv0
Craig Small [Sun, 17 Apr 2016 06:55:44 +0000 (16:55 +1000)]
pidof: check cmd if space in argv0

A difference in behaviour between the sysvinit and procps pidof
was that the procps one would sometimes not find process that
the sysvinit one did.

The difference is that if a space is found in argv[0] then sysvinit
would look at cmd for a match. This isn't perfect and more of a
best guess but does often work.

procps pidof now follows the same "standard". The most obvious
difference is with kde based processes and incoming ssh connections
with sshd.

References:
 Commit 3f5b75035ec4151a5ffe911b0857d0419ffb5a15
 GitLab issue #4
 https://gitlab.com/procps-ng/procps/issues/4
 https://github.com/limingth/sysvinit/blob/master/sysvinit-2.88dsf/src/killall5.c#L800

8 years agolibrary: re-arrange escape commands
Craig Small [Sun, 17 Apr 2016 04:45:19 +0000 (14:45 +1000)]
library: re-arrange escape commands

escaped_copy(): only appears in ps, moved to ps/output.c
escape_strlist() only used in escape.c made static
escape_command() used in library, made internal
procps.h no longer includes escape.h

escape_str() used by library and ps so needs to be exported
definition put into procps.h including the odd define required.
Far from ideal to have it this way, will look at it another time
to have it all in, all out or split nicer so its not in the API;
perhaps a lib/ file?

8 years agolibrary: cleanup of readproc functions
Craig Small [Sun, 17 Apr 2016 04:14:27 +0000 (14:14 +1000)]
library: cleanup of readproc functions

readproc still had some of the old API hanging around that
was good while we were trying it out, but its time to say
goodbye:

readproc.h removed from public procps.h header file
enum ns_type - not used - removed
get_ns_name() - not defined - removed
get_ns_id() - not defined - removed
PROCTAB proc_t only used internal to library
readproctab() and 2,3 friends not used - removed
proc_data_t was used by readproctab23() - removed
readtask() - not used - removed
read_cmdline() - copy,renamed and made generic - remove original
freeproc() - not used - removed
get_proc_status - not used - removed, however there should be
a new function created that does this. Given a PID return data
about it instead of scanning the entire procfs. Maybe it already does.

Left as internal-to-library only functions:
 readproc(), readeither(), look_up_our_self(), openproc(), closeproc()

Updated libprocps.sym to export only what we use.

8 years agotop: some minor tweaks against a few of Craig's tweaks
Jim Warner [Sat, 16 Apr 2016 05:00:00 +0000 (00:00 -0500)]
top: some minor tweaks against a few of Craig's tweaks

Rather than importing NORETURN & MALLOC, it feels more
natural to use the native gcc attribute for NORETURN &
eliminate the use of a questionable MALLOC altogether.

Reference(s):
commit ccb6ae8de14b0cde25b84369ef995bcd69cbf7b6

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agotop: extend 'zero suppression' to out-of-memory fields
Jim Warner [Fri, 15 Apr 2016 05:00:00 +0000 (00:00 -0500)]
top: extend 'zero suppression' to out-of-memory fields

Now that the conditional OOMEM_ENABLE has been removed
and more attention recently paid to the 2 oomem fields
it was revealed that Rc.zero_suppress didn't extend to
them. So this commit will just correct that oversight.

And while we're at it, we'll also extend zero suppress
to that NI (nice value) field, which already should've
had it. Plus we trade those namespaces custom suppress
logic for our now slightly enhanced make_num function.

Reference(s):
. removal of misguided OOMEM_ENABLE
commit 64238730fa45e92bc40b2aa28d107c2469ac29e9
. zero suppression only recently added to namespaces
commit b2853ed1170ff900100fa69fee5a8dfd728bd120

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agotop: normalize 2 former SUSE only out-of-memory fields
Jim Warner [Fri, 15 Apr 2016 05:00:00 +0000 (00:00 -0500)]
top: normalize 2 former SUSE only out-of-memory fields

Now that the conditional OOMEM_ENABLE has been removed
and all users exposed to those 'out of memory' fields,
it's about time we added them to the top man document.

But before doing so, it's long past time that they are
normalized to at last remedy this kind of foolishness:

. excessive width on that oomem score itself (8 vs. 4)
. some potentially confusing names inherited from suse

Reference(s):
. removal of misguided OOMEM_ENABLE
commit 64238730fa45e92bc40b2aa28d107c2469ac29e9

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agolibrary: trade a deprecated oomem field for proper one
Jim Warner [Fri, 15 Apr 2016 05:00:00 +0000 (00:00 -0500)]
library: trade a deprecated oomem field for proper one

Now that the conditional OOMEM_ENABLE has been removed
and, after reviewing current library support, it turns
out we've been using a deprecated /proc/<pid>/oom_adj.

What we should use instead is that more recent tunable
/proc/<pid>/oom_score_adj. This new field will provide
a range of -1000 thru +1000 (former was -17 thru +15).

Reference(s):
. removal of misguided OOMEM_ENABLE
commit 64238730fa45e92bc40b2aa28d107c2469ac29e9
. linux, partial oom_adj revert (Nov, 2012)
commit fa0cbbf145aabbf29c6f28f8a11935c0b0fd86fc
. linux, removal oom_adj (Oct, 2012)
commit 01dc52ebdf472f77cca623ca693ca24cfc0f1bbe

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agotests: Conditionally add prctl to test process
Craig Small [Sat, 16 Apr 2016 23:09:41 +0000 (09:09 +1000)]
tests: Conditionally add prctl to test process

prctl was already bypassed on Cygwin systems. This extends to
non-Linux systems such as kFreeBSD and Hurd.

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

8 years agodocs: Added new man pages to install
Craig Small [Sat, 16 Apr 2016 22:03:35 +0000 (08:03 +1000)]
docs: Added new man pages to install

8 years agolibrary: document and tests for uptime functions
Craig Small [Sat, 16 Apr 2016 12:02:10 +0000 (22:02 +1000)]
library: document and tests for uptime functions

man pages for the three procps_uptime* functions and simple
test scripts for same functions.

8 years agolang: Update language files
Craig Small [Sat, 16 Apr 2016 07:20:06 +0000 (17:20 +1000)]
lang: Update language files

8 years agolibrary: cleanup of library includes
Craig Small [Sat, 16 Apr 2016 07:03:57 +0000 (17:03 +1000)]
library: cleanup of library includes

The includes used to define a lot of things a library include
should not. It was also a bit messy what was exposed in the library
and what was not.

get_pid_digits -> procps_pid_length and exported correctly

MALLOC attribute move into relevant .c files
NORETURN attribute moved to relevant .c, not used in library
PURE attribute removed, it wasn't used
KLONG/KLF/STRTOUKL were fixed for long, so now just use long

HIDDEN attribute removed. It was for 3 functions. The PROCPS_EXPORT
seems to do the same (opposite) thing.

likely/unlikely removed from most places, its highly debateable
this does anything useful as CPUs have gotten smarter about branches.

Re-arranged the includes, ALL external programs should just #include
<proc/procps.h> then proc/procps.h includes headers for files that
have exported functions. procps.h and the headers it includes should
not use items that are not exportable (e.g. hidden functions or
macros) they go in procps-private.h

8 years agodocs: Cleanup procps_linux_version page
Craig Small [Fri, 15 Apr 2016 22:34:08 +0000 (08:34 +1000)]
docs: Cleanup procps_linux_version page

Getting the manual page for procps_linux_version(3) fixed up so
it follows the man-pages(7) and other standards.
Added lgpl license to file, so its the same as the code.