|
Packit |
d37888 |
/* lib.c */
|
|
Packit |
d37888 |
/* This is a generated file. Please modify `lib.pl' */
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
#include <config.h>
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
#include <glibtop.h>
|
|
Packit |
d37888 |
#include <glibtop/error.h>
|
|
Packit |
d37888 |
#include <glibtop/open.h>
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
#include <glibtop/sysdeps.h>
|
|
Packit |
d37888 |
#include <glibtop/union.h>
|
|
Packit |
d37888 |
#include <glib/gi18n-lib.h>
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
#include <glibtop/command.h>
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
/* Some required fields are missing. */
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
static void
|
|
Packit |
d37888 |
_glibtop_missing_feature (glibtop *server, const char *feature,
|
|
Packit |
d37888 |
const guint64 present, guint64 *required)
|
|
Packit |
d37888 |
{
|
|
Packit |
d37888 |
guint64 old_required = *required;
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
/* Return if we have all required fields. */
|
|
Packit |
d37888 |
if ((~present & old_required) == 0)
|
|
Packit |
d37888 |
return;
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
switch (server->error_method) {
|
|
Packit |
d37888 |
case GLIBTOP_ERROR_METHOD_WARN_ONCE:
|
|
Packit |
d37888 |
*required &= present;
|
|
Packit |
d37888 |
case GLIBTOP_ERROR_METHOD_WARN:
|
|
Packit |
d37888 |
glibtop_warn_r (server,
|
|
Packit |
d37888 |
_("glibtop_get_%s (): Client requested "
|
|
Packit |
d37888 |
"field mask %05lx, but only have %05lx."),
|
|
Packit |
d37888 |
feature, (unsigned long) old_required,
|
|
Packit |
d37888 |
(unsigned long) present);
|
|
Packit |
d37888 |
break;
|
|
Packit |
d37888 |
case GLIBTOP_ERROR_METHOD_ABORT:
|
|
Packit |
d37888 |
glibtop_error_r (server,
|
|
Packit |
d37888 |
_("glibtop_get_%s (): Client requested "
|
|
Packit |
d37888 |
"field mask %05lx, but only have %05lx."),
|
|
Packit |
d37888 |
feature, (unsigned long) old_required,
|
|
Packit |
d37888 |
(unsigned long) present);
|
|
Packit |
d37888 |
break;
|
|
Packit |
d37888 |
}
|
|
Packit |
d37888 |
}
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
/* Library functions. */
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
void
|
|
Packit |
d37888 |
glibtop_get_cpu_l (glibtop *server, glibtop_cpu *buf)
|
|
Packit |
d37888 |
{
|
|
Packit |
d37888 |
glibtop_init_r (&server, (1 << GLIBTOP_SYSDEPS_CPU), 0);
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
/* If neccessary, we ask the server for the requested
|
|
Packit |
d37888 |
* feature. If not, we call the sysdeps function. */
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
if ((server->flags & _GLIBTOP_INIT_STATE_SERVER) &&
|
|
Packit |
d37888 |
(server->features & (1 << GLIBTOP_SYSDEPS_CPU)))
|
|
Packit |
d37888 |
{
|
|
Packit |
d37888 |
const void *send_ptr = NULL;
|
|
Packit |
d37888 |
const size_t send_size = 0;
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
glibtop_call_l (server, GLIBTOP_CMND_CPU,
|
|
Packit |
d37888 |
send_size, send_ptr,
|
|
Packit |
d37888 |
sizeof (glibtop_cpu), buf);
|
|
Packit |
d37888 |
} else {
|
|
Packit |
d37888 |
#if (!GLIBTOP_SUID_CPU)
|
|
Packit |
d37888 |
glibtop_get_cpu_s (server, buf);
|
|
Packit |
d37888 |
#else
|
|
Packit |
d37888 |
errno = ENOSYS;
|
|
Packit |
d37888 |
glibtop_error_io_r (server, "glibtop_get_cpu");
|
|
Packit |
d37888 |
#endif
|
|
Packit |
d37888 |
}
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
/* Make sure that all required fields are present. */
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
if (buf->flags & server->required.cpu)
|
|
Packit |
d37888 |
_glibtop_missing_feature (server, "cpu", buf->flags,
|
|
Packit |
d37888 |
&server->required.cpu);
|
|
Packit |
d37888 |
}
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
void
|
|
Packit |
d37888 |
glibtop_get_mem_l (glibtop *server, glibtop_mem *buf)
|
|
Packit |
d37888 |
{
|
|
Packit |
d37888 |
glibtop_init_r (&server, (1 << GLIBTOP_SYSDEPS_MEM), 0);
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
/* If neccessary, we ask the server for the requested
|
|
Packit |
d37888 |
* feature. If not, we call the sysdeps function. */
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
if ((server->flags & _GLIBTOP_INIT_STATE_SERVER) &&
|
|
Packit |
d37888 |
(server->features & (1 << GLIBTOP_SYSDEPS_MEM)))
|
|
Packit |
d37888 |
{
|
|
Packit |
d37888 |
const void *send_ptr = NULL;
|
|
Packit |
d37888 |
const size_t send_size = 0;
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
glibtop_call_l (server, GLIBTOP_CMND_MEM,
|
|
Packit |
d37888 |
send_size, send_ptr,
|
|
Packit |
d37888 |
sizeof (glibtop_mem), buf);
|
|
Packit |
d37888 |
} else {
|
|
Packit |
d37888 |
#if (!GLIBTOP_SUID_MEM)
|
|
Packit |
d37888 |
glibtop_get_mem_s (server, buf);
|
|
Packit |
d37888 |
#else
|
|
Packit |
d37888 |
errno = ENOSYS;
|
|
Packit |
d37888 |
glibtop_error_io_r (server, "glibtop_get_mem");
|
|
Packit |
d37888 |
#endif
|
|
Packit |
d37888 |
}
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
/* Make sure that all required fields are present. */
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
if (buf->flags & server->required.mem)
|
|
Packit |
d37888 |
_glibtop_missing_feature (server, "mem", buf->flags,
|
|
Packit |
d37888 |
&server->required.mem);
|
|
Packit |
d37888 |
}
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
void
|
|
Packit |
d37888 |
glibtop_get_swap_l (glibtop *server, glibtop_swap *buf)
|
|
Packit |
d37888 |
{
|
|
Packit |
d37888 |
glibtop_init_r (&server, (1 << GLIBTOP_SYSDEPS_SWAP), 0);
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
/* If neccessary, we ask the server for the requested
|
|
Packit |
d37888 |
* feature. If not, we call the sysdeps function. */
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
if ((server->flags & _GLIBTOP_INIT_STATE_SERVER) &&
|
|
Packit |
d37888 |
(server->features & (1 << GLIBTOP_SYSDEPS_SWAP)))
|
|
Packit |
d37888 |
{
|
|
Packit |
d37888 |
const void *send_ptr = NULL;
|
|
Packit |
d37888 |
const size_t send_size = 0;
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
glibtop_call_l (server, GLIBTOP_CMND_SWAP,
|
|
Packit |
d37888 |
send_size, send_ptr,
|
|
Packit |
d37888 |
sizeof (glibtop_swap), buf);
|
|
Packit |
d37888 |
} else {
|
|
Packit |
d37888 |
#if (!GLIBTOP_SUID_SWAP)
|
|
Packit |
d37888 |
glibtop_get_swap_s (server, buf);
|
|
Packit |
d37888 |
#else
|
|
Packit |
d37888 |
errno = ENOSYS;
|
|
Packit |
d37888 |
glibtop_error_io_r (server, "glibtop_get_swap");
|
|
Packit |
d37888 |
#endif
|
|
Packit |
d37888 |
}
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
/* Make sure that all required fields are present. */
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
if (buf->flags & server->required.swap)
|
|
Packit |
d37888 |
_glibtop_missing_feature (server, "swap", buf->flags,
|
|
Packit |
d37888 |
&server->required.swap);
|
|
Packit |
d37888 |
}
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
void
|
|
Packit |
d37888 |
glibtop_get_uptime_l (glibtop *server, glibtop_uptime *buf)
|
|
Packit |
d37888 |
{
|
|
Packit |
d37888 |
glibtop_init_r (&server, (1 << GLIBTOP_SYSDEPS_UPTIME), 0);
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
/* If neccessary, we ask the server for the requested
|
|
Packit |
d37888 |
* feature. If not, we call the sysdeps function. */
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
if ((server->flags & _GLIBTOP_INIT_STATE_SERVER) &&
|
|
Packit |
d37888 |
(server->features & (1 << GLIBTOP_SYSDEPS_UPTIME)))
|
|
Packit |
d37888 |
{
|
|
Packit |
d37888 |
const void *send_ptr = NULL;
|
|
Packit |
d37888 |
const size_t send_size = 0;
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
glibtop_call_l (server, GLIBTOP_CMND_UPTIME,
|
|
Packit |
d37888 |
send_size, send_ptr,
|
|
Packit |
d37888 |
sizeof (glibtop_uptime), buf);
|
|
Packit |
d37888 |
} else {
|
|
Packit |
d37888 |
#if (!GLIBTOP_SUID_UPTIME)
|
|
Packit |
d37888 |
glibtop_get_uptime_s (server, buf);
|
|
Packit |
d37888 |
#else
|
|
Packit |
d37888 |
errno = ENOSYS;
|
|
Packit |
d37888 |
glibtop_error_io_r (server, "glibtop_get_uptime");
|
|
Packit |
d37888 |
#endif
|
|
Packit |
d37888 |
}
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
/* Make sure that all required fields are present. */
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
if (buf->flags & server->required.uptime)
|
|
Packit |
d37888 |
_glibtop_missing_feature (server, "uptime", buf->flags,
|
|
Packit |
d37888 |
&server->required.uptime);
|
|
Packit |
d37888 |
}
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
void
|
|
Packit |
d37888 |
glibtop_get_loadavg_l (glibtop *server, glibtop_loadavg *buf)
|
|
Packit |
d37888 |
{
|
|
Packit |
d37888 |
glibtop_init_r (&server, (1 << GLIBTOP_SYSDEPS_LOADAVG), 0);
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
/* If neccessary, we ask the server for the requested
|
|
Packit |
d37888 |
* feature. If not, we call the sysdeps function. */
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
if ((server->flags & _GLIBTOP_INIT_STATE_SERVER) &&
|
|
Packit |
d37888 |
(server->features & (1 << GLIBTOP_SYSDEPS_LOADAVG)))
|
|
Packit |
d37888 |
{
|
|
Packit |
d37888 |
const void *send_ptr = NULL;
|
|
Packit |
d37888 |
const size_t send_size = 0;
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
glibtop_call_l (server, GLIBTOP_CMND_LOADAVG,
|
|
Packit |
d37888 |
send_size, send_ptr,
|
|
Packit |
d37888 |
sizeof (glibtop_loadavg), buf);
|
|
Packit |
d37888 |
} else {
|
|
Packit |
d37888 |
#if (!GLIBTOP_SUID_LOADAVG)
|
|
Packit |
d37888 |
glibtop_get_loadavg_s (server, buf);
|
|
Packit |
d37888 |
#else
|
|
Packit |
d37888 |
errno = ENOSYS;
|
|
Packit |
d37888 |
glibtop_error_io_r (server, "glibtop_get_loadavg");
|
|
Packit |
d37888 |
#endif
|
|
Packit |
d37888 |
}
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
/* Make sure that all required fields are present. */
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
if (buf->flags & server->required.loadavg)
|
|
Packit |
d37888 |
_glibtop_missing_feature (server, "loadavg", buf->flags,
|
|
Packit |
d37888 |
&server->required.loadavg);
|
|
Packit |
d37888 |
}
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
void
|
|
Packit |
d37888 |
glibtop_get_shm_limits_l (glibtop *server, glibtop_shm_limits *buf)
|
|
Packit |
d37888 |
{
|
|
Packit |
d37888 |
glibtop_init_r (&server, (1 << GLIBTOP_SYSDEPS_SHM_LIMITS), 0);
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
/* If neccessary, we ask the server for the requested
|
|
Packit |
d37888 |
* feature. If not, we call the sysdeps function. */
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
if ((server->flags & _GLIBTOP_INIT_STATE_SERVER) &&
|
|
Packit |
d37888 |
(server->features & (1 << GLIBTOP_SYSDEPS_SHM_LIMITS)))
|
|
Packit |
d37888 |
{
|
|
Packit |
d37888 |
const void *send_ptr = NULL;
|
|
Packit |
d37888 |
const size_t send_size = 0;
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
glibtop_call_l (server, GLIBTOP_CMND_SHM_LIMITS,
|
|
Packit |
d37888 |
send_size, send_ptr,
|
|
Packit |
d37888 |
sizeof (glibtop_shm_limits), buf);
|
|
Packit |
d37888 |
} else {
|
|
Packit |
d37888 |
#if (!GLIBTOP_SUID_SHM_LIMITS)
|
|
Packit |
d37888 |
glibtop_get_shm_limits_s (server, buf);
|
|
Packit |
d37888 |
#else
|
|
Packit |
d37888 |
errno = ENOSYS;
|
|
Packit |
d37888 |
glibtop_error_io_r (server, "glibtop_get_shm_limits");
|
|
Packit |
d37888 |
#endif
|
|
Packit |
d37888 |
}
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
/* Make sure that all required fields are present. */
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
if (buf->flags & server->required.shm_limits)
|
|
Packit |
d37888 |
_glibtop_missing_feature (server, "shm_limits", buf->flags,
|
|
Packit |
d37888 |
&server->required.shm_limits);
|
|
Packit |
d37888 |
}
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
void
|
|
Packit |
d37888 |
glibtop_get_msg_limits_l (glibtop *server, glibtop_msg_limits *buf)
|
|
Packit |
d37888 |
{
|
|
Packit |
d37888 |
glibtop_init_r (&server, (1 << GLIBTOP_SYSDEPS_MSG_LIMITS), 0);
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
/* If neccessary, we ask the server for the requested
|
|
Packit |
d37888 |
* feature. If not, we call the sysdeps function. */
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
if ((server->flags & _GLIBTOP_INIT_STATE_SERVER) &&
|
|
Packit |
d37888 |
(server->features & (1 << GLIBTOP_SYSDEPS_MSG_LIMITS)))
|
|
Packit |
d37888 |
{
|
|
Packit |
d37888 |
const void *send_ptr = NULL;
|
|
Packit |
d37888 |
const size_t send_size = 0;
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
glibtop_call_l (server, GLIBTOP_CMND_MSG_LIMITS,
|
|
Packit |
d37888 |
send_size, send_ptr,
|
|
Packit |
d37888 |
sizeof (glibtop_msg_limits), buf);
|
|
Packit |
d37888 |
} else {
|
|
Packit |
d37888 |
#if (!GLIBTOP_SUID_MSG_LIMITS)
|
|
Packit |
d37888 |
glibtop_get_msg_limits_s (server, buf);
|
|
Packit |
d37888 |
#else
|
|
Packit |
d37888 |
errno = ENOSYS;
|
|
Packit |
d37888 |
glibtop_error_io_r (server, "glibtop_get_msg_limits");
|
|
Packit |
d37888 |
#endif
|
|
Packit |
d37888 |
}
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
/* Make sure that all required fields are present. */
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
if (buf->flags & server->required.msg_limits)
|
|
Packit |
d37888 |
_glibtop_missing_feature (server, "msg_limits", buf->flags,
|
|
Packit |
d37888 |
&server->required.msg_limits);
|
|
Packit |
d37888 |
}
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
void
|
|
Packit |
d37888 |
glibtop_get_sem_limits_l (glibtop *server, glibtop_sem_limits *buf)
|
|
Packit |
d37888 |
{
|
|
Packit |
d37888 |
glibtop_init_r (&server, (1 << GLIBTOP_SYSDEPS_SEM_LIMITS), 0);
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
/* If neccessary, we ask the server for the requested
|
|
Packit |
d37888 |
* feature. If not, we call the sysdeps function. */
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
if ((server->flags & _GLIBTOP_INIT_STATE_SERVER) &&
|
|
Packit |
d37888 |
(server->features & (1 << GLIBTOP_SYSDEPS_SEM_LIMITS)))
|
|
Packit |
d37888 |
{
|
|
Packit |
d37888 |
const void *send_ptr = NULL;
|
|
Packit |
d37888 |
const size_t send_size = 0;
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
glibtop_call_l (server, GLIBTOP_CMND_SEM_LIMITS,
|
|
Packit |
d37888 |
send_size, send_ptr,
|
|
Packit |
d37888 |
sizeof (glibtop_sem_limits), buf);
|
|
Packit |
d37888 |
} else {
|
|
Packit |
d37888 |
#if (!GLIBTOP_SUID_SEM_LIMITS)
|
|
Packit |
d37888 |
glibtop_get_sem_limits_s (server, buf);
|
|
Packit |
d37888 |
#else
|
|
Packit |
d37888 |
errno = ENOSYS;
|
|
Packit |
d37888 |
glibtop_error_io_r (server, "glibtop_get_sem_limits");
|
|
Packit |
d37888 |
#endif
|
|
Packit |
d37888 |
}
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
/* Make sure that all required fields are present. */
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
if (buf->flags & server->required.sem_limits)
|
|
Packit |
d37888 |
_glibtop_missing_feature (server, "sem_limits", buf->flags,
|
|
Packit |
d37888 |
&server->required.sem_limits);
|
|
Packit |
d37888 |
}
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
pid_t*
|
|
Packit |
d37888 |
glibtop_get_proclist_l (glibtop *server, glibtop_proclist *buf,
|
|
Packit |
d37888 |
gint64 which, gint64 arg)
|
|
Packit |
d37888 |
{
|
|
Packit |
d37888 |
pid_t* retval = (pid_t*) 0;
|
|
Packit |
d37888 |
glibtop_init_r (&server, (1 << GLIBTOP_SYSDEPS_PROCLIST), 0);
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
/* If neccessary, we ask the server for the requested
|
|
Packit |
d37888 |
* feature. If not, we call the sysdeps function. */
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
if ((server->flags & _GLIBTOP_INIT_STATE_SERVER) &&
|
|
Packit |
d37888 |
(server->features & (1 << GLIBTOP_SYSDEPS_PROCLIST)))
|
|
Packit |
d37888 |
{
|
|
Packit |
d37888 |
struct {
|
|
Packit |
d37888 |
gint64 buf_which;
|
|
Packit |
d37888 |
gint64 buf_arg;
|
|
Packit |
d37888 |
} param_buf;
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
param_buf.buf_which = which;
|
|
Packit |
d37888 |
param_buf.buf_arg = arg;
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
const void *send_ptr = ¶m_buf;
|
|
Packit |
d37888 |
const size_t send_size = sizeof param_buf;
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
retval = glibtop_call_l (server, GLIBTOP_CMND_PROCLIST,
|
|
Packit |
d37888 |
send_size, send_ptr,
|
|
Packit |
d37888 |
sizeof (glibtop_proclist), buf);
|
|
Packit |
d37888 |
} else {
|
|
Packit |
d37888 |
#if (!GLIBTOP_SUID_PROCLIST)
|
|
Packit |
d37888 |
retval = glibtop_get_proclist_s (server, buf, which, arg);
|
|
Packit |
d37888 |
#else
|
|
Packit |
d37888 |
errno = ENOSYS;
|
|
Packit |
d37888 |
glibtop_error_io_r (server, "glibtop_get_proclist");
|
|
Packit |
d37888 |
#endif
|
|
Packit |
d37888 |
}
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
/* Make sure that all required fields are present. */
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
if (buf->flags & server->required.proclist)
|
|
Packit |
d37888 |
_glibtop_missing_feature (server, "proclist", buf->flags,
|
|
Packit |
d37888 |
&server->required.proclist);
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
/* Now we can return. */
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
return retval;
|
|
Packit |
d37888 |
}
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
void
|
|
Packit |
d37888 |
glibtop_get_proc_state_l (glibtop *server, glibtop_proc_state *buf,
|
|
Packit |
d37888 |
pid_t pid)
|
|
Packit |
d37888 |
{
|
|
Packit |
d37888 |
glibtop_init_r (&server, (1 << GLIBTOP_SYSDEPS_PROC_STATE), 0);
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
/* If neccessary, we ask the server for the requested
|
|
Packit |
d37888 |
* feature. If not, we call the sysdeps function. */
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
if ((server->flags & _GLIBTOP_INIT_STATE_SERVER) &&
|
|
Packit |
d37888 |
(server->features & (1 << GLIBTOP_SYSDEPS_PROC_STATE)))
|
|
Packit |
d37888 |
{
|
|
Packit |
d37888 |
struct {
|
|
Packit |
d37888 |
pid_t buf_pid;
|
|
Packit |
d37888 |
} param_buf;
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
param_buf.buf_pid = pid;
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
const void *send_ptr = ¶m_buf;
|
|
Packit |
d37888 |
const size_t send_size = sizeof param_buf;
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
glibtop_call_l (server, GLIBTOP_CMND_PROC_STATE,
|
|
Packit |
d37888 |
send_size, send_ptr,
|
|
Packit |
d37888 |
sizeof (glibtop_proc_state), buf);
|
|
Packit |
d37888 |
} else {
|
|
Packit |
d37888 |
#if (!GLIBTOP_SUID_PROC_STATE)
|
|
Packit |
d37888 |
glibtop_get_proc_state_s (server, buf, pid);
|
|
Packit |
d37888 |
#else
|
|
Packit |
d37888 |
errno = ENOSYS;
|
|
Packit |
d37888 |
glibtop_error_io_r (server, "glibtop_get_proc_state");
|
|
Packit |
d37888 |
#endif
|
|
Packit |
d37888 |
}
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
/* Make sure that all required fields are present. */
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
if (buf->flags & server->required.proc_state)
|
|
Packit |
d37888 |
_glibtop_missing_feature (server, "proc_state", buf->flags,
|
|
Packit |
d37888 |
&server->required.proc_state);
|
|
Packit |
d37888 |
}
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
void
|
|
Packit |
d37888 |
glibtop_get_proc_uid_l (glibtop *server, glibtop_proc_uid *buf,
|
|
Packit |
d37888 |
pid_t pid)
|
|
Packit |
d37888 |
{
|
|
Packit |
d37888 |
glibtop_init_r (&server, (1 << GLIBTOP_SYSDEPS_PROC_UID), 0);
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
/* If neccessary, we ask the server for the requested
|
|
Packit |
d37888 |
* feature. If not, we call the sysdeps function. */
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
if ((server->flags & _GLIBTOP_INIT_STATE_SERVER) &&
|
|
Packit |
d37888 |
(server->features & (1 << GLIBTOP_SYSDEPS_PROC_UID)))
|
|
Packit |
d37888 |
{
|
|
Packit |
d37888 |
struct {
|
|
Packit |
d37888 |
pid_t buf_pid;
|
|
Packit |
d37888 |
} param_buf;
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
param_buf.buf_pid = pid;
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
const void *send_ptr = ¶m_buf;
|
|
Packit |
d37888 |
const size_t send_size = sizeof param_buf;
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
glibtop_call_l (server, GLIBTOP_CMND_PROC_UID,
|
|
Packit |
d37888 |
send_size, send_ptr,
|
|
Packit |
d37888 |
sizeof (glibtop_proc_uid), buf);
|
|
Packit |
d37888 |
} else {
|
|
Packit |
d37888 |
#if (!GLIBTOP_SUID_PROC_UID)
|
|
Packit |
d37888 |
glibtop_get_proc_uid_s (server, buf, pid);
|
|
Packit |
d37888 |
#else
|
|
Packit |
d37888 |
errno = ENOSYS;
|
|
Packit |
d37888 |
glibtop_error_io_r (server, "glibtop_get_proc_uid");
|
|
Packit |
d37888 |
#endif
|
|
Packit |
d37888 |
}
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
/* Make sure that all required fields are present. */
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
if (buf->flags & server->required.proc_uid)
|
|
Packit |
d37888 |
_glibtop_missing_feature (server, "proc_uid", buf->flags,
|
|
Packit |
d37888 |
&server->required.proc_uid);
|
|
Packit |
d37888 |
}
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
void
|
|
Packit |
d37888 |
glibtop_get_proc_mem_l (glibtop *server, glibtop_proc_mem *buf,
|
|
Packit |
d37888 |
pid_t pid)
|
|
Packit |
d37888 |
{
|
|
Packit |
d37888 |
glibtop_init_r (&server, (1 << GLIBTOP_SYSDEPS_PROC_MEM), 0);
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
/* If neccessary, we ask the server for the requested
|
|
Packit |
d37888 |
* feature. If not, we call the sysdeps function. */
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
if ((server->flags & _GLIBTOP_INIT_STATE_SERVER) &&
|
|
Packit |
d37888 |
(server->features & (1 << GLIBTOP_SYSDEPS_PROC_MEM)))
|
|
Packit |
d37888 |
{
|
|
Packit |
d37888 |
struct {
|
|
Packit |
d37888 |
pid_t buf_pid;
|
|
Packit |
d37888 |
} param_buf;
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
param_buf.buf_pid = pid;
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
const void *send_ptr = ¶m_buf;
|
|
Packit |
d37888 |
const size_t send_size = sizeof param_buf;
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
glibtop_call_l (server, GLIBTOP_CMND_PROC_MEM,
|
|
Packit |
d37888 |
send_size, send_ptr,
|
|
Packit |
d37888 |
sizeof (glibtop_proc_mem), buf);
|
|
Packit |
d37888 |
} else {
|
|
Packit |
d37888 |
#if (!GLIBTOP_SUID_PROC_MEM)
|
|
Packit |
d37888 |
glibtop_get_proc_mem_s (server, buf, pid);
|
|
Packit |
d37888 |
#else
|
|
Packit |
d37888 |
errno = ENOSYS;
|
|
Packit |
d37888 |
glibtop_error_io_r (server, "glibtop_get_proc_mem");
|
|
Packit |
d37888 |
#endif
|
|
Packit |
d37888 |
}
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
/* Make sure that all required fields are present. */
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
if (buf->flags & server->required.proc_mem)
|
|
Packit |
d37888 |
_glibtop_missing_feature (server, "proc_mem", buf->flags,
|
|
Packit |
d37888 |
&server->required.proc_mem);
|
|
Packit |
d37888 |
}
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
void
|
|
Packit |
d37888 |
glibtop_get_proc_time_l (glibtop *server, glibtop_proc_time *buf,
|
|
Packit |
d37888 |
pid_t pid)
|
|
Packit |
d37888 |
{
|
|
Packit |
d37888 |
glibtop_init_r (&server, (1 << GLIBTOP_SYSDEPS_PROC_TIME), 0);
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
/* If neccessary, we ask the server for the requested
|
|
Packit |
d37888 |
* feature. If not, we call the sysdeps function. */
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
if ((server->flags & _GLIBTOP_INIT_STATE_SERVER) &&
|
|
Packit |
d37888 |
(server->features & (1 << GLIBTOP_SYSDEPS_PROC_TIME)))
|
|
Packit |
d37888 |
{
|
|
Packit |
d37888 |
struct {
|
|
Packit |
d37888 |
pid_t buf_pid;
|
|
Packit |
d37888 |
} param_buf;
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
param_buf.buf_pid = pid;
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
const void *send_ptr = ¶m_buf;
|
|
Packit |
d37888 |
const size_t send_size = sizeof param_buf;
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
glibtop_call_l (server, GLIBTOP_CMND_PROC_TIME,
|
|
Packit |
d37888 |
send_size, send_ptr,
|
|
Packit |
d37888 |
sizeof (glibtop_proc_time), buf);
|
|
Packit |
d37888 |
} else {
|
|
Packit |
d37888 |
#if (!GLIBTOP_SUID_PROC_TIME)
|
|
Packit |
d37888 |
glibtop_get_proc_time_s (server, buf, pid);
|
|
Packit |
d37888 |
#else
|
|
Packit |
d37888 |
errno = ENOSYS;
|
|
Packit |
d37888 |
glibtop_error_io_r (server, "glibtop_get_proc_time");
|
|
Packit |
d37888 |
#endif
|
|
Packit |
d37888 |
}
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
/* Make sure that all required fields are present. */
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
if (buf->flags & server->required.proc_time)
|
|
Packit |
d37888 |
_glibtop_missing_feature (server, "proc_time", buf->flags,
|
|
Packit |
d37888 |
&server->required.proc_time);
|
|
Packit |
d37888 |
}
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
void
|
|
Packit |
d37888 |
glibtop_get_proc_signal_l (glibtop *server, glibtop_proc_signal *buf,
|
|
Packit |
d37888 |
pid_t pid)
|
|
Packit |
d37888 |
{
|
|
Packit |
d37888 |
glibtop_init_r (&server, (1 << GLIBTOP_SYSDEPS_PROC_SIGNAL), 0);
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
/* If neccessary, we ask the server for the requested
|
|
Packit |
d37888 |
* feature. If not, we call the sysdeps function. */
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
if ((server->flags & _GLIBTOP_INIT_STATE_SERVER) &&
|
|
Packit |
d37888 |
(server->features & (1 << GLIBTOP_SYSDEPS_PROC_SIGNAL)))
|
|
Packit |
d37888 |
{
|
|
Packit |
d37888 |
struct {
|
|
Packit |
d37888 |
pid_t buf_pid;
|
|
Packit |
d37888 |
} param_buf;
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
param_buf.buf_pid = pid;
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
const void *send_ptr = ¶m_buf;
|
|
Packit |
d37888 |
const size_t send_size = sizeof param_buf;
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
glibtop_call_l (server, GLIBTOP_CMND_PROC_SIGNAL,
|
|
Packit |
d37888 |
send_size, send_ptr,
|
|
Packit |
d37888 |
sizeof (glibtop_proc_signal), buf);
|
|
Packit |
d37888 |
} else {
|
|
Packit |
d37888 |
#if (!GLIBTOP_SUID_PROC_SIGNAL)
|
|
Packit |
d37888 |
glibtop_get_proc_signal_s (server, buf, pid);
|
|
Packit |
d37888 |
#else
|
|
Packit |
d37888 |
errno = ENOSYS;
|
|
Packit |
d37888 |
glibtop_error_io_r (server, "glibtop_get_proc_signal");
|
|
Packit |
d37888 |
#endif
|
|
Packit |
d37888 |
}
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
/* Make sure that all required fields are present. */
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
if (buf->flags & server->required.proc_signal)
|
|
Packit |
d37888 |
_glibtop_missing_feature (server, "proc_signal", buf->flags,
|
|
Packit |
d37888 |
&server->required.proc_signal);
|
|
Packit |
d37888 |
}
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
void
|
|
Packit |
d37888 |
glibtop_get_proc_kernel_l (glibtop *server, glibtop_proc_kernel *buf,
|
|
Packit |
d37888 |
pid_t pid)
|
|
Packit |
d37888 |
{
|
|
Packit |
d37888 |
glibtop_init_r (&server, (1 << GLIBTOP_SYSDEPS_PROC_KERNEL), 0);
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
/* If neccessary, we ask the server for the requested
|
|
Packit |
d37888 |
* feature. If not, we call the sysdeps function. */
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
if ((server->flags & _GLIBTOP_INIT_STATE_SERVER) &&
|
|
Packit |
d37888 |
(server->features & (1 << GLIBTOP_SYSDEPS_PROC_KERNEL)))
|
|
Packit |
d37888 |
{
|
|
Packit |
d37888 |
struct {
|
|
Packit |
d37888 |
pid_t buf_pid;
|
|
Packit |
d37888 |
} param_buf;
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
param_buf.buf_pid = pid;
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
const void *send_ptr = ¶m_buf;
|
|
Packit |
d37888 |
const size_t send_size = sizeof param_buf;
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
glibtop_call_l (server, GLIBTOP_CMND_PROC_KERNEL,
|
|
Packit |
d37888 |
send_size, send_ptr,
|
|
Packit |
d37888 |
sizeof (glibtop_proc_kernel), buf);
|
|
Packit |
d37888 |
} else {
|
|
Packit |
d37888 |
#if (!GLIBTOP_SUID_PROC_KERNEL)
|
|
Packit |
d37888 |
glibtop_get_proc_kernel_s (server, buf, pid);
|
|
Packit |
d37888 |
#else
|
|
Packit |
d37888 |
errno = ENOSYS;
|
|
Packit |
d37888 |
glibtop_error_io_r (server, "glibtop_get_proc_kernel");
|
|
Packit |
d37888 |
#endif
|
|
Packit |
d37888 |
}
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
/* Make sure that all required fields are present. */
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
if (buf->flags & server->required.proc_kernel)
|
|
Packit |
d37888 |
_glibtop_missing_feature (server, "proc_kernel", buf->flags,
|
|
Packit |
d37888 |
&server->required.proc_kernel);
|
|
Packit |
d37888 |
}
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
void
|
|
Packit |
d37888 |
glibtop_get_proc_segment_l (glibtop *server, glibtop_proc_segment *buf,
|
|
Packit |
d37888 |
pid_t pid)
|
|
Packit |
d37888 |
{
|
|
Packit |
d37888 |
glibtop_init_r (&server, (1 << GLIBTOP_SYSDEPS_PROC_SEGMENT), 0);
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
/* If neccessary, we ask the server for the requested
|
|
Packit |
d37888 |
* feature. If not, we call the sysdeps function. */
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
if ((server->flags & _GLIBTOP_INIT_STATE_SERVER) &&
|
|
Packit |
d37888 |
(server->features & (1 << GLIBTOP_SYSDEPS_PROC_SEGMENT)))
|
|
Packit |
d37888 |
{
|
|
Packit |
d37888 |
struct {
|
|
Packit |
d37888 |
pid_t buf_pid;
|
|
Packit |
d37888 |
} param_buf;
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
param_buf.buf_pid = pid;
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
const void *send_ptr = ¶m_buf;
|
|
Packit |
d37888 |
const size_t send_size = sizeof param_buf;
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
glibtop_call_l (server, GLIBTOP_CMND_PROC_SEGMENT,
|
|
Packit |
d37888 |
send_size, send_ptr,
|
|
Packit |
d37888 |
sizeof (glibtop_proc_segment), buf);
|
|
Packit |
d37888 |
} else {
|
|
Packit |
d37888 |
#if (!GLIBTOP_SUID_PROC_SEGMENT)
|
|
Packit |
d37888 |
glibtop_get_proc_segment_s (server, buf, pid);
|
|
Packit |
d37888 |
#else
|
|
Packit |
d37888 |
errno = ENOSYS;
|
|
Packit |
d37888 |
glibtop_error_io_r (server, "glibtop_get_proc_segment");
|
|
Packit |
d37888 |
#endif
|
|
Packit |
d37888 |
}
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
/* Make sure that all required fields are present. */
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
if (buf->flags & server->required.proc_segment)
|
|
Packit |
d37888 |
_glibtop_missing_feature (server, "proc_segment", buf->flags,
|
|
Packit |
d37888 |
&server->required.proc_segment);
|
|
Packit |
d37888 |
}
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
char *
|
|
Packit |
d37888 |
glibtop_get_proc_args_l (glibtop *server, glibtop_proc_args *buf,
|
|
Packit |
d37888 |
pid_t pid, unsigned max_len)
|
|
Packit |
d37888 |
{
|
|
Packit |
d37888 |
char * retval = (char *) 0;
|
|
Packit |
d37888 |
glibtop_init_r (&server, (1 << GLIBTOP_SYSDEPS_PROC_ARGS), 0);
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
/* If neccessary, we ask the server for the requested
|
|
Packit |
d37888 |
* feature. If not, we call the sysdeps function. */
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
if ((server->flags & _GLIBTOP_INIT_STATE_SERVER) &&
|
|
Packit |
d37888 |
(server->features & (1 << GLIBTOP_SYSDEPS_PROC_ARGS)))
|
|
Packit |
d37888 |
{
|
|
Packit |
d37888 |
struct {
|
|
Packit |
d37888 |
pid_t buf_pid;
|
|
Packit |
d37888 |
unsigned buf_max_len;
|
|
Packit |
d37888 |
} param_buf;
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
param_buf.buf_pid = pid;
|
|
Packit |
d37888 |
param_buf.buf_max_len = max_len;
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
const void *send_ptr = ¶m_buf;
|
|
Packit |
d37888 |
const size_t send_size = sizeof param_buf;
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
retval = glibtop_call_l (server, GLIBTOP_CMND_PROC_ARGS,
|
|
Packit |
d37888 |
send_size, send_ptr,
|
|
Packit |
d37888 |
sizeof (glibtop_proc_args), buf);
|
|
Packit |
d37888 |
} else {
|
|
Packit |
d37888 |
#if (!GLIBTOP_SUID_PROC_ARGS)
|
|
Packit |
d37888 |
retval = glibtop_get_proc_args_s (server, buf, pid, max_len);
|
|
Packit |
d37888 |
#else
|
|
Packit |
d37888 |
errno = ENOSYS;
|
|
Packit |
d37888 |
glibtop_error_io_r (server, "glibtop_get_proc_args");
|
|
Packit |
d37888 |
#endif
|
|
Packit |
d37888 |
}
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
/* Make sure that all required fields are present. */
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
if (buf->flags & server->required.proc_args)
|
|
Packit |
d37888 |
_glibtop_missing_feature (server, "proc_args", buf->flags,
|
|
Packit |
d37888 |
&server->required.proc_args);
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
/* Now we can return. */
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
return retval;
|
|
Packit |
d37888 |
}
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
glibtop_map_entry *
|
|
Packit |
d37888 |
glibtop_get_proc_map_l (glibtop *server, glibtop_proc_map *buf,
|
|
Packit |
d37888 |
pid_t pid)
|
|
Packit |
d37888 |
{
|
|
Packit |
d37888 |
glibtop_map_entry * retval = (glibtop_map_entry *) 0;
|
|
Packit |
d37888 |
glibtop_init_r (&server, (1 << GLIBTOP_SYSDEPS_PROC_MAP), 0);
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
/* If neccessary, we ask the server for the requested
|
|
Packit |
d37888 |
* feature. If not, we call the sysdeps function. */
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
if ((server->flags & _GLIBTOP_INIT_STATE_SERVER) &&
|
|
Packit |
d37888 |
(server->features & (1 << GLIBTOP_SYSDEPS_PROC_MAP)))
|
|
Packit |
d37888 |
{
|
|
Packit |
d37888 |
struct {
|
|
Packit |
d37888 |
pid_t buf_pid;
|
|
Packit |
d37888 |
} param_buf;
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
param_buf.buf_pid = pid;
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
const void *send_ptr = ¶m_buf;
|
|
Packit |
d37888 |
const size_t send_size = sizeof param_buf;
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
retval = glibtop_call_l (server, GLIBTOP_CMND_PROC_MAP,
|
|
Packit |
d37888 |
send_size, send_ptr,
|
|
Packit |
d37888 |
sizeof (glibtop_proc_map), buf);
|
|
Packit |
d37888 |
} else {
|
|
Packit |
d37888 |
#if (!GLIBTOP_SUID_PROC_MAP)
|
|
Packit |
d37888 |
retval = glibtop_get_proc_map_s (server, buf, pid);
|
|
Packit |
d37888 |
#else
|
|
Packit |
d37888 |
errno = ENOSYS;
|
|
Packit |
d37888 |
glibtop_error_io_r (server, "glibtop_get_proc_map");
|
|
Packit |
d37888 |
#endif
|
|
Packit |
d37888 |
}
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
/* Make sure that all required fields are present. */
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
if (buf->flags & server->required.proc_map)
|
|
Packit |
d37888 |
_glibtop_missing_feature (server, "proc_map", buf->flags,
|
|
Packit |
d37888 |
&server->required.proc_map);
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
/* Now we can return. */
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
return retval;
|
|
Packit |
d37888 |
}
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
glibtop_open_files_entry *
|
|
Packit |
d37888 |
glibtop_get_proc_open_files_l (glibtop *server, glibtop_proc_open_files *buf,
|
|
Packit |
d37888 |
pid_t pid)
|
|
Packit |
d37888 |
{
|
|
Packit |
d37888 |
glibtop_open_files_entry * retval = (glibtop_open_files_entry *) 0;
|
|
Packit |
d37888 |
glibtop_init_r (&server, (1 << GLIBTOP_SYSDEPS_PROC_OPEN_FILES), 0);
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
/* If neccessary, we ask the server for the requested
|
|
Packit |
d37888 |
* feature. If not, we call the sysdeps function. */
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
if ((server->flags & _GLIBTOP_INIT_STATE_SERVER) &&
|
|
Packit |
d37888 |
(server->features & (1 << GLIBTOP_SYSDEPS_PROC_OPEN_FILES)))
|
|
Packit |
d37888 |
{
|
|
Packit |
d37888 |
struct {
|
|
Packit |
d37888 |
pid_t buf_pid;
|
|
Packit |
d37888 |
} param_buf;
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
param_buf.buf_pid = pid;
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
const void *send_ptr = ¶m_buf;
|
|
Packit |
d37888 |
const size_t send_size = sizeof param_buf;
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
retval = glibtop_call_l (server, GLIBTOP_CMND_PROC_OPEN_FILES,
|
|
Packit |
d37888 |
send_size, send_ptr,
|
|
Packit |
d37888 |
sizeof (glibtop_proc_open_files), buf);
|
|
Packit |
d37888 |
} else {
|
|
Packit |
d37888 |
#if (!GLIBTOP_SUID_PROC_OPEN_FILES)
|
|
Packit |
d37888 |
retval = glibtop_get_proc_open_files_s (server, buf, pid);
|
|
Packit |
d37888 |
#else
|
|
Packit |
d37888 |
errno = ENOSYS;
|
|
Packit |
d37888 |
glibtop_error_io_r (server, "glibtop_get_proc_open_files");
|
|
Packit |
d37888 |
#endif
|
|
Packit |
d37888 |
}
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
/* Make sure that all required fields are present. */
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
if (buf->flags & server->required.proc_open_files)
|
|
Packit |
d37888 |
_glibtop_missing_feature (server, "proc_open_files", buf->flags,
|
|
Packit |
d37888 |
&server->required.proc_open_files);
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
/* Now we can return. */
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
return retval;
|
|
Packit |
d37888 |
}
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
glibtop_mountentry *
|
|
Packit |
d37888 |
glibtop_get_mountlist_l (glibtop *server, glibtop_mountlist *buf,
|
|
Packit |
d37888 |
int all_fs)
|
|
Packit |
d37888 |
{
|
|
Packit |
d37888 |
glibtop_mountentry * retval = (glibtop_mountentry *) 0;
|
|
Packit |
d37888 |
glibtop_init_r (&server, (1 << GLIBTOP_SYSDEPS_MOUNTLIST), 0);
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
/* If neccessary, we ask the server for the requested
|
|
Packit |
d37888 |
* feature. If not, we call the sysdeps function. */
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
if ((server->flags & _GLIBTOP_INIT_STATE_SERVER) &&
|
|
Packit |
d37888 |
(server->features & (1 << GLIBTOP_SYSDEPS_MOUNTLIST)))
|
|
Packit |
d37888 |
{
|
|
Packit |
d37888 |
struct {
|
|
Packit |
d37888 |
int buf_all_fs;
|
|
Packit |
d37888 |
} param_buf;
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
param_buf.buf_all_fs = all_fs;
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
const void *send_ptr = ¶m_buf;
|
|
Packit |
d37888 |
const size_t send_size = sizeof param_buf;
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
retval = glibtop_call_l (server, GLIBTOP_CMND_MOUNTLIST,
|
|
Packit |
d37888 |
send_size, send_ptr,
|
|
Packit |
d37888 |
sizeof (glibtop_mountlist), buf);
|
|
Packit |
d37888 |
} else {
|
|
Packit |
d37888 |
retval = glibtop_get_mountlist_s (server, buf, all_fs);
|
|
Packit |
d37888 |
}
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
/* Make sure that all required fields are present. */
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
if (buf->flags & server->required.mountlist)
|
|
Packit |
d37888 |
_glibtop_missing_feature (server, "mountlist", buf->flags,
|
|
Packit |
d37888 |
&server->required.mountlist);
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
/* Now we can return. */
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
return retval;
|
|
Packit |
d37888 |
}
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
void
|
|
Packit |
d37888 |
glibtop_get_fsusage_l (glibtop *server, glibtop_fsusage *buf,
|
|
Packit |
d37888 |
const char *mount_dir)
|
|
Packit |
d37888 |
{
|
|
Packit |
d37888 |
glibtop_init_r (&server, (1 << GLIBTOP_SYSDEPS_FSUSAGE), 0);
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
/* If neccessary, we ask the server for the requested
|
|
Packit |
d37888 |
* feature. If not, we call the sysdeps function. */
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
if ((server->flags & _GLIBTOP_INIT_STATE_SERVER) &&
|
|
Packit |
d37888 |
(server->features & (1 << GLIBTOP_SYSDEPS_FSUSAGE)))
|
|
Packit |
d37888 |
{
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
const void *send_ptr = mount_dir;
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
const size_t send_size =
|
|
Packit |
d37888 |
strlen (mount_dir) + 1;
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
glibtop_call_l (server, GLIBTOP_CMND_FSUSAGE,
|
|
Packit |
d37888 |
send_size, send_ptr,
|
|
Packit |
d37888 |
sizeof (glibtop_fsusage), buf);
|
|
Packit |
d37888 |
} else {
|
|
Packit |
d37888 |
glibtop_get_fsusage_s (server, buf, mount_dir);
|
|
Packit |
d37888 |
}
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
/* Make sure that all required fields are present. */
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
if (buf->flags & server->required.fsusage)
|
|
Packit |
d37888 |
_glibtop_missing_feature (server, "fsusage", buf->flags,
|
|
Packit |
d37888 |
&server->required.fsusage);
|
|
Packit |
d37888 |
}
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
void
|
|
Packit |
d37888 |
glibtop_get_netload_l (glibtop *server, glibtop_netload *buf,
|
|
Packit |
d37888 |
const char *interface)
|
|
Packit |
d37888 |
{
|
|
Packit |
d37888 |
glibtop_init_r (&server, (1 << GLIBTOP_SYSDEPS_NETLOAD), 0);
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
/* If neccessary, we ask the server for the requested
|
|
Packit |
d37888 |
* feature. If not, we call the sysdeps function. */
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
if ((server->flags & _GLIBTOP_INIT_STATE_SERVER) &&
|
|
Packit |
d37888 |
(server->features & (1 << GLIBTOP_SYSDEPS_NETLOAD)))
|
|
Packit |
d37888 |
{
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
const void *send_ptr = interface;
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
const size_t send_size =
|
|
Packit |
d37888 |
strlen (interface) + 1;
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
glibtop_call_l (server, GLIBTOP_CMND_NETLOAD,
|
|
Packit |
d37888 |
send_size, send_ptr,
|
|
Packit |
d37888 |
sizeof (glibtop_netload), buf);
|
|
Packit |
d37888 |
} else {
|
|
Packit |
d37888 |
#if (!GLIBTOP_SUID_NETLOAD)
|
|
Packit |
d37888 |
glibtop_get_netload_s (server, buf, interface);
|
|
Packit |
d37888 |
#else
|
|
Packit |
d37888 |
errno = ENOSYS;
|
|
Packit |
d37888 |
glibtop_error_io_r (server, "glibtop_get_netload");
|
|
Packit |
d37888 |
#endif
|
|
Packit |
d37888 |
}
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
/* Make sure that all required fields are present. */
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
if (buf->flags & server->required.netload)
|
|
Packit |
d37888 |
_glibtop_missing_feature (server, "netload", buf->flags,
|
|
Packit |
d37888 |
&server->required.netload);
|
|
Packit |
d37888 |
}
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
void
|
|
Packit |
d37888 |
glibtop_get_ppp_l (glibtop *server, glibtop_ppp *buf,
|
|
Packit |
d37888 |
unsigned short device)
|
|
Packit |
d37888 |
{
|
|
Packit |
d37888 |
glibtop_init_r (&server, (1 << GLIBTOP_SYSDEPS_PPP), 0);
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
/* If neccessary, we ask the server for the requested
|
|
Packit |
d37888 |
* feature. If not, we call the sysdeps function. */
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
if ((server->flags & _GLIBTOP_INIT_STATE_SERVER) &&
|
|
Packit |
d37888 |
(server->features & (1 << GLIBTOP_SYSDEPS_PPP)))
|
|
Packit |
d37888 |
{
|
|
Packit |
d37888 |
struct {
|
|
Packit |
d37888 |
unsigned short buf_device;
|
|
Packit |
d37888 |
} param_buf;
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
param_buf.buf_device = device;
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
const void *send_ptr = ¶m_buf;
|
|
Packit |
d37888 |
const size_t send_size = sizeof param_buf;
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
glibtop_call_l (server, GLIBTOP_CMND_PPP,
|
|
Packit |
d37888 |
send_size, send_ptr,
|
|
Packit |
d37888 |
sizeof (glibtop_ppp), buf);
|
|
Packit |
d37888 |
} else {
|
|
Packit |
d37888 |
#if (!GLIBTOP_SUID_PPP)
|
|
Packit |
d37888 |
glibtop_get_ppp_s (server, buf, device);
|
|
Packit |
d37888 |
#else
|
|
Packit |
d37888 |
errno = ENOSYS;
|
|
Packit |
d37888 |
glibtop_error_io_r (server, "glibtop_get_ppp");
|
|
Packit |
d37888 |
#endif
|
|
Packit |
d37888 |
}
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
/* Make sure that all required fields are present. */
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
if (buf->flags & server->required.ppp)
|
|
Packit |
d37888 |
_glibtop_missing_feature (server, "ppp", buf->flags,
|
|
Packit |
d37888 |
&server->required.ppp);
|
|
Packit |
d37888 |
}
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
char **
|
|
Packit |
d37888 |
glibtop_get_netlist_l (glibtop *server, glibtop_netlist *buf)
|
|
Packit |
d37888 |
{
|
|
Packit |
d37888 |
char ** retval = (char **) 0;
|
|
Packit |
d37888 |
glibtop_init_r (&server, (1 << GLIBTOP_SYSDEPS_NETLIST), 0);
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
/* If neccessary, we ask the server for the requested
|
|
Packit |
d37888 |
* feature. If not, we call the sysdeps function. */
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
if ((server->flags & _GLIBTOP_INIT_STATE_SERVER) &&
|
|
Packit |
d37888 |
(server->features & (1 << GLIBTOP_SYSDEPS_NETLIST)))
|
|
Packit |
d37888 |
{
|
|
Packit |
d37888 |
const void *send_ptr = NULL;
|
|
Packit |
d37888 |
const size_t send_size = 0;
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
retval = glibtop_call_l (server, GLIBTOP_CMND_NETLIST,
|
|
Packit |
d37888 |
send_size, send_ptr,
|
|
Packit |
d37888 |
sizeof (glibtop_netlist), buf);
|
|
Packit |
d37888 |
} else {
|
|
Packit |
d37888 |
#if (!GLIBTOP_SUID_NETLIST)
|
|
Packit |
d37888 |
retval = glibtop_get_netlist_s (server, buf);
|
|
Packit |
d37888 |
#else
|
|
Packit |
d37888 |
errno = ENOSYS;
|
|
Packit |
d37888 |
glibtop_error_io_r (server, "glibtop_get_netlist");
|
|
Packit |
d37888 |
#endif
|
|
Packit |
d37888 |
}
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
/* Make sure that all required fields are present. */
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
if (buf->flags & server->required.netlist)
|
|
Packit |
d37888 |
_glibtop_missing_feature (server, "netlist", buf->flags,
|
|
Packit |
d37888 |
&server->required.netlist);
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
/* Now we can return. */
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
return retval;
|
|
Packit |
d37888 |
}
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
char **
|
|
Packit |
d37888 |
glibtop_get_proc_wd_l (glibtop *server, glibtop_proc_wd *buf,
|
|
Packit |
d37888 |
pid_t pid)
|
|
Packit |
d37888 |
{
|
|
Packit |
d37888 |
char ** retval = (char **) 0;
|
|
Packit |
d37888 |
glibtop_init_r (&server, (1 << GLIBTOP_SYSDEPS_PROC_WD), 0);
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
/* If neccessary, we ask the server for the requested
|
|
Packit |
d37888 |
* feature. If not, we call the sysdeps function. */
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
if ((server->flags & _GLIBTOP_INIT_STATE_SERVER) &&
|
|
Packit |
d37888 |
(server->features & (1 << GLIBTOP_SYSDEPS_PROC_WD)))
|
|
Packit |
d37888 |
{
|
|
Packit |
d37888 |
struct {
|
|
Packit |
d37888 |
pid_t buf_pid;
|
|
Packit |
d37888 |
} param_buf;
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
param_buf.buf_pid = pid;
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
const void *send_ptr = ¶m_buf;
|
|
Packit |
d37888 |
const size_t send_size = sizeof param_buf;
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
retval = glibtop_call_l (server, GLIBTOP_CMND_PROC_WD,
|
|
Packit |
d37888 |
send_size, send_ptr,
|
|
Packit |
d37888 |
sizeof (glibtop_proc_wd), buf);
|
|
Packit |
d37888 |
} else {
|
|
Packit |
d37888 |
#if (!GLIBTOP_SUID_PROC_WD)
|
|
Packit |
d37888 |
retval = glibtop_get_proc_wd_s (server, buf, pid);
|
|
Packit |
d37888 |
#else
|
|
Packit |
d37888 |
errno = ENOSYS;
|
|
Packit |
d37888 |
glibtop_error_io_r (server, "glibtop_get_proc_wd");
|
|
Packit |
d37888 |
#endif
|
|
Packit |
d37888 |
}
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
/* Make sure that all required fields are present. */
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
if (buf->flags & server->required.proc_wd)
|
|
Packit |
d37888 |
_glibtop_missing_feature (server, "proc_wd", buf->flags,
|
|
Packit |
d37888 |
&server->required.proc_wd);
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
/* Now we can return. */
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
return retval;
|
|
Packit |
d37888 |
}
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
guint16*
|
|
Packit |
d37888 |
glibtop_get_proc_affinity_l (glibtop *server, glibtop_proc_affinity *buf,
|
|
Packit |
d37888 |
pid_t pid)
|
|
Packit |
d37888 |
{
|
|
Packit |
d37888 |
guint16* retval = (guint16*) 0;
|
|
Packit |
d37888 |
glibtop_init_r (&server, (1 << GLIBTOP_SYSDEPS_PROC_AFFINITY), 0);
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
/* If neccessary, we ask the server for the requested
|
|
Packit |
d37888 |
* feature. If not, we call the sysdeps function. */
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
if ((server->flags & _GLIBTOP_INIT_STATE_SERVER) &&
|
|
Packit |
d37888 |
(server->features & (1 << GLIBTOP_SYSDEPS_PROC_AFFINITY)))
|
|
Packit |
d37888 |
{
|
|
Packit |
d37888 |
struct {
|
|
Packit |
d37888 |
pid_t buf_pid;
|
|
Packit |
d37888 |
} param_buf;
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
param_buf.buf_pid = pid;
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
const void *send_ptr = ¶m_buf;
|
|
Packit |
d37888 |
const size_t send_size = sizeof param_buf;
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
retval = glibtop_call_l (server, GLIBTOP_CMND_PROC_AFFINITY,
|
|
Packit |
d37888 |
send_size, send_ptr,
|
|
Packit |
d37888 |
sizeof (glibtop_proc_affinity), buf);
|
|
Packit |
d37888 |
} else {
|
|
Packit |
d37888 |
#if (!GLIBTOP_SUID_PROC_AFFINITY)
|
|
Packit |
d37888 |
retval = glibtop_get_proc_affinity_s (server, buf, pid);
|
|
Packit |
d37888 |
#else
|
|
Packit |
d37888 |
errno = ENOSYS;
|
|
Packit |
d37888 |
glibtop_error_io_r (server, "glibtop_get_proc_affinity");
|
|
Packit |
d37888 |
#endif
|
|
Packit |
d37888 |
}
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
/* Make sure that all required fields are present. */
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
if (buf->flags & server->required.proc_affinity)
|
|
Packit |
d37888 |
_glibtop_missing_feature (server, "proc_affinity", buf->flags,
|
|
Packit |
d37888 |
&server->required.proc_affinity);
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
/* Now we can return. */
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
return retval;
|
|
Packit |
d37888 |
}
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
void
|
|
Packit |
d37888 |
glibtop_get_proc_io_l (glibtop *server, glibtop_proc_io *buf,
|
|
Packit |
d37888 |
pid_t pid)
|
|
Packit |
d37888 |
{
|
|
Packit |
d37888 |
glibtop_init_r (&server, (1 << GLIBTOP_SYSDEPS_PROC_IO), 0);
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
/* If neccessary, we ask the server for the requested
|
|
Packit |
d37888 |
* feature. If not, we call the sysdeps function. */
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
if ((server->flags & _GLIBTOP_INIT_STATE_SERVER) &&
|
|
Packit |
d37888 |
(server->features & (1 << GLIBTOP_SYSDEPS_PROC_IO)))
|
|
Packit |
d37888 |
{
|
|
Packit |
d37888 |
struct {
|
|
Packit |
d37888 |
pid_t buf_pid;
|
|
Packit |
d37888 |
} param_buf;
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
param_buf.buf_pid = pid;
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
const void *send_ptr = ¶m_buf;
|
|
Packit |
d37888 |
const size_t send_size = sizeof param_buf;
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
glibtop_call_l (server, GLIBTOP_CMND_PROC_IO,
|
|
Packit |
d37888 |
send_size, send_ptr,
|
|
Packit |
d37888 |
sizeof (glibtop_proc_io), buf);
|
|
Packit |
d37888 |
} else {
|
|
Packit |
d37888 |
#if (!GLIBTOP_SUID_PROC_IO)
|
|
Packit |
d37888 |
glibtop_get_proc_io_s (server, buf, pid);
|
|
Packit |
d37888 |
#else
|
|
Packit |
d37888 |
errno = ENOSYS;
|
|
Packit |
d37888 |
glibtop_error_io_r (server, "glibtop_get_proc_io");
|
|
Packit |
d37888 |
#endif
|
|
Packit |
d37888 |
}
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
/* Make sure that all required fields are present. */
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
if (buf->flags & server->required.proc_io)
|
|
Packit |
d37888 |
_glibtop_missing_feature (server, "proc_io", buf->flags,
|
|
Packit |
d37888 |
&server->required.proc_io);
|
|
Packit |
d37888 |
}
|
|
Packit |
d37888 |
|