+/*
+ * libprocps - Library to read proc filesystem
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
#include <errno.h>
+#include <fcntl.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
+
#include <sys/types.h>
#include <sys/stat.h>
-#include <fcntl.h>
#include <proc/vmstat.h>
#include "procps-private.h"
return info->data.pswpin;
case PROCPS_VMSTAT_PSWPOUT:
return info->data.pswpout;
+ default:
+ return 0;
}
- return 0;
}
-PROCPS_EXPORT int procps_vmstat_get_chain (
+PROCPS_EXPORT int procps_vmstat_getstack (
struct procps_vmstat *info,
- struct vmstat_result *item)
+ struct vmstat_result *these)
{
- if (item == NULL)
+ if (these == NULL)
return -EINVAL;
- do {
- switch (item->item) {
+ for (;;) {
+ switch (these->item) {
case PROCPS_VMSTAT_PGPGIN:
- item->result = info->data.pgpgin;
+ these->result.ul_int = info->data.pgpgin;
break;
case PROCPS_VMSTAT_PGPGOUT:
- item->result = info->data.pgpgout;
+ these->result.ul_int = info->data.pgpgout;
break;
case PROCPS_VMSTAT_PSWPIN:
- item->result = info->data.pswpin;
+ these->result.ul_int = info->data.pswpin;
break;
case PROCPS_VMSTAT_PSWPOUT:
- item->result = info->data.pswpout;
+ these->result.ul_int = info->data.pswpout;
+ break;
+ case PROCPS_VMSTAT_noop:
+ // don't disturb potential user data in the result struct
break;
+ case PROCPS_VMSTAT_stack_end:
+ return 0;
default:
return -EINVAL;
}
- item = item->next;
- } while (item);
-
- return 0;
+ ++these;
+ }
}
__BEGIN_DECLS
enum vmstat_item {
- PROCPS_VMSTAT_PGPGIN,
- PROCPS_VMSTAT_PGPGOUT,
- PROCPS_VMSTAT_PSWPIN,
- PROCPS_VMSTAT_PSWPOUT
+ PROCPS_VMSTAT_PGPGIN, // ul_int
+ PROCPS_VMSTAT_PGPGOUT, // ul_int
+ PROCPS_VMSTAT_PSWPIN, // ul_int
+ PROCPS_VMSTAT_PSWPOUT, // ul_int
+ PROCPS_VMSTAT_noop, // n/a
+ PROCPS_VMSTAT_stack_end // n/a
};
struct vmstat_result {
enum vmstat_item item;
- unsigned long result;
- struct vmstat_result *next;
+ union {
+ unsigned long ul_int;
+ } result;
};
struct procps_vmstat;
int procps_vmstat_ref (struct procps_vmstat *info);
int procps_vmstat_unref (struct procps_vmstat **info);
-unsigned long procps_vmstat_get (struct procps_vmstat *info, enum vmstat_item item);
-int procps_vmstat_get_chain (struct procps_vmstat *info, struct vmstat_result *item);
+unsigned long procps_vmstat_get (
+ struct procps_vmstat *info,
+ enum vmstat_item item);
+
+int procps_vmstat_getstack (
+ struct procps_vmstat *info,
+ struct vmstat_result *these);
__END_DECLS
#endif