Blame sysdeps/linux/glibtop_private.h

Packit d37888
/* Copyright (C) 2004 BenoƮt Dejean
Packit d37888
   This file is part of LibGTop 2.0.
Packit d37888
Packit d37888
   LibGTop is free software; you can redistribute it and/or modify it
Packit d37888
   under the terms of the GNU General Public License as published by
Packit d37888
   the Free Software Foundation; either version 2 of the License,
Packit d37888
   or (at your option) any later version.
Packit d37888
Packit d37888
   LibGTop is distributed in the hope that it will be useful, but WITHOUT
Packit d37888
   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
Packit d37888
   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
Packit d37888
   for more details.
Packit d37888
Packit d37888
   You should have received a copy of the GNU General Public License
Packit d37888
   along with LibGTop; see the file COPYING. If not, write to the
Packit d37888
   Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Packit d37888
   Boston, MA 02110-1301, USA.
Packit d37888
*/
Packit d37888
Packit d37888
#ifndef __LINUX__GLIBTOP_PRIVATE_H__
Packit d37888
#define __LINUX__GLIBTOP_PRIVATE_H__
Packit d37888
Packit d37888
#include <glibtop.h>
Packit d37888
#include <glibtop/error.h>
Packit d37888
Packit d37888
#include <glib.h>
Packit d37888
Packit d37888
#include <fcntl.h>
Packit d37888
#include <ctype.h>
Packit d37888
#include <string.h>
Packit d37888
Packit d37888
G_BEGIN_DECLS
Packit d37888
Packit d37888
#define LINUX_VERSION_CODE(x,y,z)   (0x10000*(x) + 0x100*(y) + z)
Packit d37888
Packit d37888
Packit d37888
static inline char*
Packit d37888
next_token(const char *p)
Packit d37888
{
Packit d37888
	while (g_ascii_isspace(*p)) p++;
Packit d37888
	return (char*) p;
Packit d37888
}
Packit d37888
Packit d37888
char *
Packit d37888
skip_token (const char *p);
Packit d37888
Packit d37888
static inline char *
Packit d37888
skip_multiple_token (const char *p, size_t count)
Packit d37888
{
Packit d37888
	while(count--)
Packit d37888
		p = skip_token (p);
Packit d37888
Packit d37888
	return (char *)p;
Packit d37888
}
Packit d37888
Packit d37888
Packit d37888
static inline char *
Packit d37888
skip_line (const char *p)
Packit d37888
{
Packit d37888
	while (*p && *p != '\n') p++;
Packit d37888
	return (char *) (*p ? p+1 : p);
Packit d37888
}
Packit d37888
Packit d37888
/*
Packit d37888
 * Smart strtoul which handles binary suffixes
Packit d37888
 * e.g: get_scaled("Size: 32 kB", "Size:") == 32768
Packit d37888
 * key can be NULL if there's not prefix to strip (or prefix size is known
Packit d37888
 */
Packit d37888
unsigned long long
Packit d37888
get_scaled(const char *buffer, const char *key);
Packit d37888
Packit d37888
Packit d37888
/* aborts on error */
Packit d37888
void
Packit d37888
file_to_buffer(glibtop *server, char *buffer, size_t bufsiz, const char *filename);
Packit d37888
Packit d37888
/* return < 0 on error, otherwise 0 on success */
Packit d37888
int
Packit d37888
try_file_to_buffer(char *buffer, size_t bufsiz, const char *format, ...) G_GNUC_PRINTF(3, 4);
Packit d37888
Packit d37888
Packit d37888
/* some inline functions that wrap proc path
Packit d37888
 * as fast as macros :)
Packit d37888
 */
Packit d37888
Packit d37888
static inline int
Packit d37888
proc_file_to_buffer (char *buffer, size_t bufsiz, const char *fmt, pid_t pid)
Packit d37888
{
Packit d37888
	return try_file_to_buffer(buffer, bufsiz, fmt, pid);
Packit d37888
}
Packit d37888
Packit d37888
static inline int
Packit d37888
proc_stat_to_buffer (char *buffer, size_t bufsiz, pid_t pid)
Packit d37888
{
Packit d37888
	return proc_file_to_buffer(buffer, bufsiz, "/proc/%d/stat", pid);
Packit d37888
}
Packit d37888
Packit d37888
static inline int
Packit d37888
proc_status_to_buffer (char *buffer, size_t bufsiz, pid_t pid)
Packit d37888
{
Packit d37888
	return proc_file_to_buffer(buffer, bufsiz, "/proc/%d/status", pid);
Packit d37888
}
Packit d37888
Packit d37888
static inline int
Packit d37888
proc_statm_to_buffer (char *buffer, size_t bufsiz, pid_t pid)
Packit d37888
{
Packit d37888
	return proc_file_to_buffer(buffer, bufsiz, "/proc/%d/statm", pid);
Packit d37888
}
Packit d37888
Packit d37888
Packit d37888
static inline char *
Packit d37888
proc_stat_after_cmd (char *p)
Packit d37888
{
Packit d37888
	p = strrchr (p, ')');
Packit d37888
	if (G_LIKELY(p))
Packit d37888
		*p++ = '\0';
Packit d37888
	return p;
Packit d37888
}
Packit d37888
Packit d37888
Packit d37888
unsigned long
Packit d37888
get_boot_time(glibtop *server);
Packit d37888
Packit d37888
Packit d37888
gboolean
Packit d37888
check_cpu_line(glibtop *server, const char *line, unsigned n);
Packit d37888
Packit d37888
Packit d37888
static inline gboolean
Packit d37888
check_cpu_line_warn(glibtop *server, const char *line, unsigned i)
Packit d37888
{
Packit d37888
	gboolean ret;
Packit d37888
Packit d37888
	ret = check_cpu_line(server, line, i);
Packit d37888
Packit d37888
	if (G_UNLIKELY(!ret))
Packit d37888
		glibtop_warn_io_r(server,
Packit d37888
				  "'%s' does not start with 'cpu%u'",
Packit d37888
				  line, i);
Packit d37888
Packit d37888
	return ret;
Packit d37888
}
Packit d37888
Packit d37888
Packit d37888
gboolean
Packit d37888
has_sysfs(void) G_GNUC_CONST;
Packit d37888
Packit d37888
gboolean safe_readlink(const char *path, char *buf, size_t bufsiz);
Packit d37888
Packit d37888
Packit d37888
G_END_DECLS
Packit d37888
Packit d37888
#endif /* __LINUX__GLIBTOP_PRIVATE_H__ */