Blame sysdeps/common/procargs.c

Packit d37888
#include <config.h>
Packit d37888
#include <glibtop/procargs.h>
Packit d37888
Packit d37888
#include <glib.h>
Packit d37888
#include <string.h>
Packit d37888
Packit d37888
/*
Packit d37888
  Splitting args0
Packit d37888
  * args0 [......0..   ....0.........0]
Packit d37888
  * Returned value must be free with g_strfreev
Packit d37888
  * args0 is g_free()d
Packit d37888
  */
Packit d37888
static char **
Packit d37888
split_args0(const char * const args0, size_t size)
Packit d37888
{
Packit d37888
	GPtrArray *argv = g_ptr_array_new();
Packit d37888
	const char *arg;
Packit d37888
Packit d37888
	/* remember that if there were no args, args0 == NULL and size == 0 */
Packit d37888
	for (arg = args0; arg < (args0 + size); arg += strlen(arg) + 1) {
Packit d37888
		g_ptr_array_add(argv, g_strdup(arg));
Packit d37888
	}
Packit d37888
Packit d37888
	g_ptr_array_add(argv, NULL);
Packit d37888
Packit d37888
	g_free((void* /* remove constness */) args0);
Packit d37888
Packit d37888
	return (char**) g_ptr_array_free(argv, FALSE);
Packit d37888
}
Packit d37888
Packit d37888
Packit d37888
Packit d37888
Packit d37888
/*
Packit d37888
 * public functions
Packit d37888
 */
Packit d37888
Packit d37888
char **
Packit d37888
glibtop_get_proc_argv_l (glibtop *server, glibtop_proc_args *buf,
Packit d37888
			 pid_t pid, unsigned max_len)
Packit d37888
{
Packit d37888
	const char * const args0 = glibtop_get_proc_args_l(server, buf, pid, max_len);
Packit d37888
	return split_args0(args0, buf->size);
Packit d37888
}