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>
* Read the data out of /proc/meminfo putting the information
* into the supplied info structure
*/
-PROCPS_EXPORT int read_meminfo_failed (
+static int read_meminfo_failed (
struct procps_meminfo *info)
{
/* a 'memory history reference' macro for readability,
break;
}
if (size == 0)
- return 0;
+ return -1;
buf[size] = '\0';
head = buf;
- do {
+ for (;;) {
static ENTRY e; // just to keep coverity off our backs (e.data)
ENTRY *ep;
valptr = ep->data;
head = tail+1;
- if (valptr) {
+ if (valptr)
*valptr = strtoul(head, &tail, 10);
- }
tail = strchr(head, '\n');
if (!tail)
break;
head = tail + 1;
- } while(tail);
+ }
if (0 == mHr(MemAvailable))
mHr(MemAvailable) = mHr(MemFree);
break;
}
if (size == 0)
- return 0;
+ return -1;
buf[size] = '\0';
head = buf;
- do {
+ for (;;) {
static ENTRY e; // just to keep coverity off our backs (e.data)
ENTRY *ep;
break;
head = tail + 1;
- } while(tail);
+ }
// let's not distort the deltas the first time thru ...
if (!info->vmstat_was_read)