[ltt-dev] [UST PATCH] Rename libustcmd to libustctl
David Goulet
david.goulet at polymtl.ca
Sat Jan 29 10:11:36 EST 2011
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Agree! Good Idea!
Acked-by: David Goulet <david.goulet at polymtl.ca>
David
On 11-01-28 03:55 AM, Nils Carlson wrote:
> This patch renames libustcmd to libustctl mostly because libustctl
> sounds much better but also to clarify the connection between ustctl
> and libustctl.
>
> Signed-off-by: Nils Carlson <nils.carlson at ericsson.com>
> ---
> Makefile.am | 2 +-
> README | 4 +-
> configure.ac | 4 +-
> doc/info/ust.texi | 2 +-
> include/Makefile.am | 2 +-
> include/ust/ustcmd.h | 76 ---
> include/ust/ustctl.h | 76 +++
> libustcmd/Makefile.am | 14 -
> libustcmd/README | 2 -
> libustcmd/ustcmd.c | 671 --------------------
> libustctl/Makefile.am | 14 +
> libustctl/README | 2 +
> libustctl/libustctl.c | 671 ++++++++++++++++++++
> tests/Makefile.am | 2 +-
> tests/libustctl_function_tests/Makefile.am | 10 +
> .../libustctl_function_tests.c | 184 ++++++
> tests/runtests | 2 +-
> tests/ustcmd_function_tests/Makefile.am | 10 -
> .../ustcmd_function_tests/ustcmd_function_tests.c | 184 ------
> ustctl/Makefile.am | 4 +-
> ustctl/channel_cmds.c | 10 +-
> ustctl/marker_cmds.c | 10 +-
> ustctl/scanning_functions.c | 2 +-
> ustctl/trace_cmds.c | 14 +-
> ustctl/ustctl.c | 10 +-
> 25 files changed, 991 insertions(+), 991 deletions(-)
> delete mode 100644 include/ust/ustcmd.h
> create mode 100644 include/ust/ustctl.h
> delete mode 100644 libustcmd/Makefile.am
> delete mode 100644 libustcmd/README
> delete mode 100644 libustcmd/ustcmd.c
> create mode 100644 libustctl/Makefile.am
> create mode 100644 libustctl/README
> create mode 100644 libustctl/libustctl.c
> create mode 100644 tests/libustctl_function_tests/Makefile.am
> create mode 100644 tests/libustctl_function_tests/libustctl_function_tests.c
> delete mode 100644 tests/ustcmd_function_tests/Makefile.am
> delete mode 100644 tests/ustcmd_function_tests/ustcmd_function_tests.c
>
> diff --git a/Makefile.am b/Makefile.am
> index 249bf02..6957f07 100644
> --- a/Makefile.am
> +++ b/Makefile.am
> @@ -5,7 +5,7 @@ ACLOCAL_AMFLAGS = -I config
> # libust and '.' (that contains the linker script). However, '.'
> # must be installed after libust so it can overwrite libust.so with
> # the linker script.
> -SUBDIRS = snprintf libustcomm libustcmd libust . tests libustinstr-malloc libustconsumer ust-consumerd ustctl libustfork include doc
> +SUBDIRS = snprintf libustcomm libustctl libust . tests libustinstr-malloc libustconsumer ust-consumerd ustctl libustfork include doc
>
> EXTRA_DIST = libust.ldscript.in libust-initializer.c libust-initializer.h
> dist_bin_SCRIPTS = usttrace
> diff --git a/README b/README
> index a381c95..b09a1ab 100644
> --- a/README
> +++ b/README
> @@ -79,11 +79,11 @@ PACKAGE CONTENTS:
> calls in order to trace across these calls. It _has_ to be LD_PRELOAD'ed
> in order to hijack calls. In contrast, libust may be linked at build time.
>
> - - libustcmd
> + - libustctl
> A library to control tracing in other processes. Used by ustctl.
>
> - libustcomm
> - A static library shared between libust, ust-consumerd and libustcmd, that
> + A static library shared between libust, ust-consumerd and libustctl, that
> provides functions that allow these components to communicate together.
>
> - libustconsumer
> diff --git a/configure.ac b/configure.ac
> index c7d966b..2b2962a 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -130,14 +130,14 @@ AC_CONFIG_FILES([
> tests/tracepoint/Makefile
> tests/tracepoint/benchmark/Makefile
> tests/register_test/Makefile
> - tests/ustcmd_function_tests/Makefile
> + tests/libustctl_function_tests/Makefile
> libustinstr-malloc/Makefile
> libustfork/Makefile
> libustconsumer/Makefile
> ust-consumerd/Makefile
> ustctl/Makefile
> libustcomm/Makefile
> - libustcmd/Makefile
> + libustctl/Makefile
> snprintf/Makefile
> ])
> AC_OUTPUT
> diff --git a/doc/info/ust.texi b/doc/info/ust.texi
> index 73a8bcd..83c91e0 100644
> --- a/doc/info/ust.texi
> +++ b/doc/info/ust.texi
> @@ -91,7 +91,7 @@ Components licensed as LGPL v2.1:
> Components licensed as GPL v2:
> @itemize @bullet
> @item ustctl
> - at item libustcmd
> + at item libustctl
> @item ust-consumerd
> @end itemize
>
> diff --git a/include/Makefile.am b/include/Makefile.am
> index 400e8b1..e703ffd 100644
> --- a/include/Makefile.am
> +++ b/include/Makefile.am
> @@ -17,7 +17,7 @@ nobase_include_HEADERS = \
> ust/kcompat/simple.h \
> ust/kcompat/types.h \
> ust/kcompat/stringify.h \
> - ust/ustcmd.h \
> + ust/ustctl.h \
> ust/ustconsumer.h
>
> noinst_HEADERS = share.h usterr.h ust_snprintf.h
> diff --git a/include/ust/ustcmd.h b/include/ust/ustcmd.h
> deleted file mode 100644
> index 6273575..0000000
> --- a/include/ust/ustcmd.h
> +++ /dev/null
> @@ -1,76 +0,0 @@
> -/* Copyright (C) 2009 Pierre-Marc Fournier
> - *
> - * 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
> - */
> -
> -#ifndef _USTCMD_H
> -#define _USTCMD_H
> -
> -#include <stdio.h>
> -#include <unistd.h>
> -#include <getopt.h>
> -#include <stdlib.h>
> -#include <fcntl.h>
> -
> -#define USTCMD_ERR_CONN 1 /* Process connection error */
> -#define USTCMD_ERR_ARG 2 /* Invalid function argument */
> -#define USTCMD_ERR_GEN 3 /* General ustcmd error */
> -
> -#define USTCMD_MS_CHR_OFF '0' /* Marker state 'on' character */
> -#define USTCMD_MS_CHR_ON '1' /* Marker state 'on' character */
> -#define USTCMD_MS_OFF 0 /* Marker state 'on' value */
> -#define USTCMD_MS_ON 1 /* Marker state 'on' value */
> -
> -#define USTCMD_SOCK_PATH "/tmp/socks/"
> -
> -/* Channel/marker/state/format string (cmsf) info. structure */
> -struct marker_status {
> - char *channel; /* Channel name (end of marker_status array if NULL) */
> - char *marker; /* Marker name (end of marker_status array if NULL) */
> - int state; /* State (0 := marker disabled, 1 := marker enabled) */
> - char *fs; /* Format string (end of marker_status array if NULL) */
> -};
> -
> -struct trace_event_status {
> - char *name;
> -};
> -
> -extern pid_t *ustcmd_get_online_pids(void);
> -extern int ustcmd_set_marker_state(const char *trace, const char *channel,
> - const char *marker, int state, pid_t pid);
> -extern int ustcmd_set_subbuf_size(const char *trace, const char *channel,
> - unsigned int subbuf_size, pid_t pid);
> -extern int ustcmd_set_subbuf_num(const char *trace, const char *channel,
> - unsigned int num, pid_t pid);
> -extern int ustcmd_get_subbuf_size(const char *trace, const char *channel,
> - pid_t pid);
> -extern int ustcmd_get_subbuf_num(const char *trace, const char *channel,
> - pid_t pid);
> -extern int ustcmd_destroy_trace(const char *trace, pid_t pid);
> -extern int ustcmd_setup_and_start(const char *trace, pid_t pid);
> -extern int ustcmd_stop_trace(const char *trace, pid_t pid);
> -extern int ustcmd_create_trace(const char *trace, pid_t pid);
> -extern int ustcmd_start_trace(const char *trace, pid_t pid);
> -extern int ustcmd_alloc_trace(const char *trace, pid_t pid);
> -extern int ustcmd_free_cmsf(struct marker_status *);
> -extern unsigned int ustcmd_count_nl(const char *);
> -extern int ustcmd_get_cmsf(struct marker_status **, pid_t);
> -extern int ustcmd_free_tes(struct trace_event_status *);
> -extern int ustcmd_get_tes(struct trace_event_status **, pid_t);
> -extern int ustcmd_set_sock_path(const char *sock_path, pid_t pid);
> -extern int ustcmd_get_sock_path(char **sock_path, pid_t pid);
> -extern int ustcmd_force_switch(pid_t pid);
> -
> -#endif /* _USTCMD_H */
> diff --git a/include/ust/ustctl.h b/include/ust/ustctl.h
> new file mode 100644
> index 0000000..195ee26
> --- /dev/null
> +++ b/include/ust/ustctl.h
> @@ -0,0 +1,76 @@
> +/* Copyright (C) 2009 Pierre-Marc Fournier
> + *
> + * 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
> + */
> +
> +#ifndef _USTCTL_H
> +#define _USTCTL_H
> +
> +#include <stdio.h>
> +#include <unistd.h>
> +#include <getopt.h>
> +#include <stdlib.h>
> +#include <fcntl.h>
> +
> +#define USTCTL_ERR_CONN 1 /* Process connection error */
> +#define USTCTL_ERR_ARG 2 /* Invalid function argument */
> +#define USTCTL_ERR_GEN 3 /* General ustctl error */
> +
> +#define USTCTL_MS_CHR_OFF '0' /* Marker state 'on' character */
> +#define USTCTL_MS_CHR_ON '1' /* Marker state 'on' character */
> +#define USTCTL_MS_OFF 0 /* Marker state 'on' value */
> +#define USTCTL_MS_ON 1 /* Marker state 'on' value */
> +
> +#define USTCTL_SOCK_PATH "/tmp/socks/"
> +
> +/* Channel/marker/state/format string (cmsf) info. structure */
> +struct marker_status {
> + char *channel; /* Channel name (end of marker_status array if NULL) */
> + char *marker; /* Marker name (end of marker_status array if NULL) */
> + int state; /* State (0 := marker disabled, 1 := marker enabled) */
> + char *fs; /* Format string (end of marker_status array if NULL) */
> +};
> +
> +struct trace_event_status {
> + char *name;
> +};
> +
> +extern pid_t *ustctl_get_online_pids(void);
> +extern int ustctl_set_marker_state(const char *trace, const char *channel,
> + const char *marker, int state, pid_t pid);
> +extern int ustctl_set_subbuf_size(const char *trace, const char *channel,
> + unsigned int subbuf_size, pid_t pid);
> +extern int ustctl_set_subbuf_num(const char *trace, const char *channel,
> + unsigned int num, pid_t pid);
> +extern int ustctl_get_subbuf_size(const char *trace, const char *channel,
> + pid_t pid);
> +extern int ustctl_get_subbuf_num(const char *trace, const char *channel,
> + pid_t pid);
> +extern int ustctl_destroy_trace(const char *trace, pid_t pid);
> +extern int ustctl_setup_and_start(const char *trace, pid_t pid);
> +extern int ustctl_stop_trace(const char *trace, pid_t pid);
> +extern int ustctl_create_trace(const char *trace, pid_t pid);
> +extern int ustctl_start_trace(const char *trace, pid_t pid);
> +extern int ustctl_alloc_trace(const char *trace, pid_t pid);
> +extern int ustctl_free_cmsf(struct marker_status *);
> +extern unsigned int ustctl_count_nl(const char *);
> +extern int ustctl_get_cmsf(struct marker_status **, pid_t);
> +extern int ustctl_free_tes(struct trace_event_status *);
> +extern int ustctl_get_tes(struct trace_event_status **, pid_t);
> +extern int ustctl_set_sock_path(const char *sock_path, pid_t pid);
> +extern int ustctl_get_sock_path(char **sock_path, pid_t pid);
> +extern int ustctl_force_switch(pid_t pid);
> +
> +#endif /* _USTCTL_H */
> diff --git a/libustcmd/Makefile.am b/libustcmd/Makefile.am
> deleted file mode 100644
> index f467244..0000000
> --- a/libustcmd/Makefile.am
> +++ /dev/null
> @@ -1,14 +0,0 @@
> -AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_srcdir)/libustcomm
> -AM_CFLAGS = -fno-strict-aliasing
> -
> -lib_LTLIBRARIES = libustcmd.la
> -
> -libustcmd_la_SOURCES = \
> - ustcmd.c
> -
> -libustcmd_la_LDFLAGS = -no-undefined -version-info 0:0:0
> -
> -libustcmd_la_LIBADD = \
> - $(top_builddir)/libustcomm/libustcomm.la
> -
> -libustcmd_la_CFLAGS = -DUST_COMPONENT="libustcmd" -fno-strict-aliasing
> diff --git a/libustcmd/README b/libustcmd/README
> deleted file mode 100644
> index 8c2819a..0000000
> --- a/libustcmd/README
> +++ /dev/null
> @@ -1,2 +0,0 @@
> -libustcmd is a library that provides an API and its implementation to send
> -commands to traceable processes.
> diff --git a/libustcmd/ustcmd.c b/libustcmd/ustcmd.c
> deleted file mode 100644
> index 62c117f..0000000
> --- a/libustcmd/ustcmd.c
> +++ /dev/null
> @@ -1,671 +0,0 @@
> -/* Copyright (C) 2009 Pierre-Marc Fournier, Philippe Proulx-Barrette
> - *
> - * 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
> - */
> -
> -#define _GNU_SOURCE
> -#include <stdio.h>
> -#include <unistd.h>
> -#include <getopt.h>
> -#include <stdlib.h>
> -#include <fcntl.h>
> -#include <string.h>
> -#include <dirent.h>
> -
> -#include "ustcomm.h"
> -#include "ust/ustcmd.h"
> -#include "usterr.h"
> -
> -static int do_cmd(const pid_t pid,
> - const struct ustcomm_header *req_header,
> - const char *req_data,
> - struct ustcomm_header *res_header,
> - char **res_data)
> -{
> - int app_fd, result, saved_errno = 0;
> - char *recv_buf;
> -
> - if (ustcomm_connect_app(pid, &app_fd)) {
> - ERR("could not connect to PID %u", (unsigned int) pid);
> - errno = ENOTCONN;
> - return -1;
> - }
> -
> - recv_buf = zmalloc(USTCOMM_BUFFER_SIZE);
> - if (!recv_buf) {
> - saved_errno = ENOMEM;
> - goto close_app_fd;
> - }
> -
> - result = ustcomm_req(app_fd, req_header, req_data, res_header, recv_buf);
> - if (result > 0) {
> - saved_errno = -res_header->result;
> - if (res_header->size == 0 || saved_errno > 0) {
> - free(recv_buf);
> - } else {
> - if (res_data) {
> - *res_data = recv_buf;
> - } else {
> - free(recv_buf);
> - }
> - }
> - } else {
> - ERR("ustcomm req failed");
> - if (result == 0) {
> - saved_errno = ENOTCONN;
> - } else {
> - saved_errno = -result;
> - }
> - free(recv_buf);
> - }
> -
> -close_app_fd:
> - close(app_fd);
> -
> - errno = saved_errno;
> -
> - if (errno) {
> - return -1;
> - }
> -
> - return 0;
> -}
> -
> -pid_t *ustcmd_get_online_pids(void)
> -{
> - struct dirent *dirent;
> - DIR *dir;
> - unsigned int ret_size = 1 * sizeof(pid_t), i = 0;
> -
> - dir = opendir(SOCK_DIR);
> - if (!dir) {
> - return NULL;
> - }
> -
> - pid_t *ret = (pid_t *) malloc(ret_size);
> -
> - while ((dirent = readdir(dir))) {
> - if (!strcmp(dirent->d_name, ".") ||
> - !strcmp(dirent->d_name, "..")) {
> -
> - continue;
> - }
> -
> - if (dirent->d_type != DT_DIR &&
> - !!strcmp(dirent->d_name, "ust-consumer")) {
> -
> - sscanf(dirent->d_name, "%u", (unsigned int *) &ret[i]);
> - /* FIXME: Here we previously called pid_is_online, which
> - * always returned 1, now I replaced it with just 1.
> - * We need to figure out an intelligent way of solving
> - * this, maybe connect-disconnect.
> - */
> - if (1) {
> - ret_size += sizeof(pid_t);
> - ret = (pid_t *) realloc(ret, ret_size);
> - ++i;
> - }
> - }
> - }
> -
> - ret[i] = 0; /* Array end */
> -
> - if (ret[0] == 0) {
> - /* No PID at all */
> - free(ret);
> - return NULL;
> - }
> -
> - closedir(dir);
> - return ret;
> -}
> -
> -/**
> - * Sets marker state (USTCMD_MS_ON or USTCMD_MS_OFF).
> - *
> - * @param mn Marker name
> - * @param state Marker's new state
> - * @param pid Traced process ID
> - * @return 0 if successful, or errors {USTCMD_ERR_GEN, USTCMD_ERR_ARG}
> - */
> -int ustcmd_set_marker_state(const char *trace, const char *channel,
> - const char *marker, int state, pid_t pid)
> -{
> - struct ustcomm_header req_header, res_header;
> - struct ustcomm_marker_info marker_inf;
> - int result;
> -
> - result = ustcomm_pack_marker_info(&req_header,
> - &marker_inf,
> - trace,
> - channel,
> - marker);
> - if (result < 0) {
> - errno = -result;
> - return -1;
> - }
> -
> - req_header.command = state ? ENABLE_MARKER : DISABLE_MARKER;
> -
> - return do_cmd(pid, &req_header, (char *)&marker_inf,
> - &res_header, NULL);
> -}
> -
> -/**
> - * Set subbuffer size.
> - *
> - * @param channel_size Channel name and size
> - * @param pid Traced process ID
> - * @return 0 if successful, or error
> - */
> -int ustcmd_set_subbuf_size(const char *trace, const char *channel,
> - unsigned int subbuf_size, pid_t pid)
> -{
> - struct ustcomm_header req_header, res_header;
> - struct ustcomm_channel_info ch_inf;
> - int result;
> -
> - result = ustcomm_pack_channel_info(&req_header,
> - &ch_inf,
> - trace,
> - channel);
> - if (result < 0) {
> - errno = -result;
> - return -1;
> - }
> -
> - req_header.command = SET_SUBBUF_SIZE;
> - ch_inf.subbuf_size = subbuf_size;
> -
> - return do_cmd(pid, &req_header, (char *)&ch_inf,
> - &res_header, NULL);
> -}
> -
> -/**
> - * Set subbuffer num.
> - *
> - * @param channel_num Channel name and num
> - * @param pid Traced process ID
> - * @return 0 if successful, or error
> - */
> -int ustcmd_set_subbuf_num(const char *trace, const char *channel,
> - unsigned int num, pid_t pid)
> -{
> - struct ustcomm_header req_header, res_header;
> - struct ustcomm_channel_info ch_inf;
> - int result;
> -
> - result = ustcomm_pack_channel_info(&req_header,
> - &ch_inf,
> - trace,
> - channel);
> - if (result < 0) {
> - errno = -result;
> - return -1;
> - }
> -
> - req_header.command = SET_SUBBUF_NUM;
> - ch_inf.subbuf_num = num;
> -
> - return do_cmd(pid, &req_header, (char *)&ch_inf,
> - &res_header, NULL);
> -
> -}
> -
> -static int ustcmd_get_subbuf_num_size(const char *trace, const char *channel,
> - pid_t pid, int *num, int *size)
> -{
> - struct ustcomm_header req_header, res_header;
> - struct ustcomm_channel_info ch_inf, *ch_inf_res;
> - int result;
> -
> -
> - result = ustcomm_pack_channel_info(&req_header,
> - &ch_inf,
> - trace,
> - channel);
> - if (result < 0) {
> - errno = -result;
> - return -1;
> - }
> -
> - req_header.command = GET_SUBBUF_NUM_SIZE;
> -
> - result = do_cmd(pid, &req_header, (char *)&ch_inf,
> - &res_header, (char **)&ch_inf_res);
> - if (result < 0) {
> - return -1;
> - }
> -
> - *num = ch_inf_res->subbuf_num;
> - *size = ch_inf_res->subbuf_size;
> -
> - free(ch_inf_res);
> -
> - return 0;
> -}
> -
> -/**
> - * Get subbuffer num.
> - *
> - * @param channel Channel name
> - * @param pid Traced process ID
> - * @return subbuf cnf if successful, or error
> - */
> -int ustcmd_get_subbuf_num(const char *trace, const char *channel, pid_t pid)
> -{
> - int num, size, result;
> -
> - result = ustcmd_get_subbuf_num_size(trace, channel, pid,
> - &num, &size);
> - if (result < 0) {
> - errno = -result;
> - return -1;
> - }
> -
> - return num;
> -}
> -
> -/**
> - * Get subbuffer size.
> - *
> - * @param channel Channel name
> - * @param pid Traced process ID
> - * @return subbuf size if successful, or error
> - */
> -int ustcmd_get_subbuf_size(const char *trace, const char *channel, pid_t pid)
> -{
> - int num, size, result;
> -
> - result = ustcmd_get_subbuf_num_size(trace, channel, pid,
> - &num, &size);
> - if (result < 0) {
> - errno = -result;
> - return -1;
> - }
> -
> - return size;
> -}
> -
> -
> -static int do_trace_cmd(const char *trace, pid_t pid, int command)
> -{
> - struct ustcomm_header req_header, res_header;
> - struct ustcomm_single_field trace_inf;
> - int result;
> -
> - result = ustcomm_pack_single_field(&req_header,
> - &trace_inf,
> - trace);
> - if (result < 0) {
> - errno = -result;
> - return -1;
> - }
> -
> - req_header.command = command;
> -
> - return do_cmd(pid, &req_header, (char *)&trace_inf, &res_header, NULL);
> -}
> -
> -/**
> - * Destroys an UST trace according to a PID.
> - *
> - * @param pid Traced process ID
> - * @return 0 if successful, or error USTCMD_ERR_GEN
> - */
> -int ustcmd_destroy_trace(const char *trace, pid_t pid)
> -{
> - return do_trace_cmd(trace, pid, DESTROY_TRACE);
> -}
> -
> -/**
> - * Starts an UST trace (and setups it) according to a PID.
> - *
> - * @param pid Traced process ID
> - * @return 0 if successful, or error USTCMD_ERR_GEN
> - */
> -int ustcmd_setup_and_start(const char *trace, pid_t pid)
> -{
> - return do_trace_cmd(trace, pid, START);
> -}
> -
> -/**
> - * Creates an UST trace according to a PID.
> - *
> - * @param pid Traced process ID
> - * @return 0 if successful, or error USTCMD_ERR_GEN
> - */
> -int ustcmd_create_trace(const char *trace, pid_t pid)
> -{
> - return do_trace_cmd(trace, pid, CREATE_TRACE);
> -}
> -
> -/**
> - * Starts an UST trace according to a PID.
> - *
> - * @param pid Traced process ID
> - * @return 0 if successful, or error USTCMD_ERR_GEN
> - */
> -int ustcmd_start_trace(const char *trace, pid_t pid)
> -{
> - return do_trace_cmd(trace, pid, START_TRACE);
> -}
> -
> -/**
> - * Alloc an UST trace according to a PID.
> - *
> - * @param pid Traced process ID
> - * @return 0 if successful, or error USTCMD_ERR_GEN
> - */
> -int ustcmd_alloc_trace(const char *trace, pid_t pid)
> -{
> - return do_trace_cmd(trace, pid, ALLOC_TRACE);
> -}
> -
> -/**
> - * Stops an UST trace according to a PID.
> - *
> - * @param pid Traced process ID
> - * @return 0 if successful, or error USTCMD_ERR_GEN
> - */
> -int ustcmd_stop_trace(const char *trace, pid_t pid)
> -{
> - return do_trace_cmd(trace, pid, STOP_TRACE);
> -}
> -
> -/**
> - * Counts newlines ('\n') in a string.
> - *
> - * @param str String to search in
> - * @return Total newlines count
> - */
> -unsigned int ustcmd_count_nl(const char *str)
> -{
> - unsigned int i = 0, tot = 0;
> -
> - while (str[i] != '\0') {
> - if (str[i] == '\n') {
> - ++tot;
> - }
> - ++i;
> - }
> -
> - return tot;
> -}
> -
> -/**
> - * Frees a CMSF array.
> - *
> - * @param cmsf CMSF array to free
> - * @return 0 if successful, or error USTCMD_ERR_ARG
> - */
> -int ustcmd_free_cmsf(struct marker_status *cmsf)
> -{
> - if (cmsf == NULL) {
> - return USTCMD_ERR_ARG;
> - }
> -
> - unsigned int i = 0;
> - while (cmsf[i].channel != NULL) {
> - free(cmsf[i].channel);
> - free(cmsf[i].marker);
> - free(cmsf[i].fs);
> - ++i;
> - }
> - free(cmsf);
> -
> - return 0;
> -}
> -
> -/**
> - * Gets channel/marker/state/format string for a given PID.
> - *
> - * @param cmsf Pointer to CMSF array to be filled (callee allocates, caller
> - * frees with `ustcmd_free_cmsf')
> - * @param pid Targeted PID
> - * @return 0 if successful, or -1 on error
> - */
> -int ustcmd_get_cmsf(struct marker_status **cmsf, const pid_t pid)
> -{
> - struct ustcomm_header req_header, res_header;
> - char *big_str = NULL;
> - int result, app_fd;
> - struct marker_status *tmp_cmsf = NULL;
> - unsigned int i = 0, cmsf_ind = 0;
> -
> - if (cmsf == NULL) {
> - return -1;
> - }
> -
> - if (ustcomm_connect_app(pid, &app_fd)) {
> - ERR("could not connect to PID %u", (unsigned int) pid);
> - return -1;
> - }
> -
> - req_header.command = LIST_MARKERS;
> - req_header.size = 0;
> -
> - result = ustcomm_send(app_fd, &req_header, NULL);
> - if (result <= 0) {
> - PERROR("error while requesting markers list for process %d", pid);
> - return -1;
> - }
> -
> - result = ustcomm_recv_alloc(app_fd, &res_header, &big_str);
> - if (result <= 0) {
> - ERR("error while receiving markers list");
> - return -1;
> - }
> -
> - close(app_fd);
> -
> - tmp_cmsf = (struct marker_status *) zmalloc(sizeof(struct marker_status) *
> - (ustcmd_count_nl(big_str) + 1));
> - if (tmp_cmsf == NULL) {
> - ERR("Failed to allocate CMSF array");
> - return -1;
> - }
> -
> - /* Parse received reply string (format: "[chan]/[mark] [st] [fs]"): */
> - while (big_str[i] != '\0') {
> - char state;
> -
> - sscanf(big_str + i, "marker: %a[^/]/%a[^ ] %c %a[^\n]",
> - &tmp_cmsf[cmsf_ind].channel,
> - &tmp_cmsf[cmsf_ind].marker,
> - &state,
> - &tmp_cmsf[cmsf_ind].fs);
> - tmp_cmsf[cmsf_ind].state = (state == USTCMD_MS_CHR_ON ?
> - USTCMD_MS_ON : USTCMD_MS_OFF); /* Marker state */
> -
> - while (big_str[i] != '\n') {
> - ++i; /* Go to next '\n' */
> - }
> - ++i; /* Skip current pointed '\n' */
> - ++cmsf_ind;
> - }
> - tmp_cmsf[cmsf_ind].channel = NULL;
> - tmp_cmsf[cmsf_ind].marker = NULL;
> - tmp_cmsf[cmsf_ind].fs = NULL;
> -
> - *cmsf = tmp_cmsf;
> -
> - free(big_str);
> - return 0;
> -}
> -
> -
> -/**
> - * Frees a TES array.
> - *
> - * @param tes TES array to free
> - * @return 0 if successful, or error USTCMD_ERR_ARG
> - */
> -int ustcmd_free_tes(struct trace_event_status *tes)
> -{
> - if (tes == NULL) {
> - return USTCMD_ERR_ARG;
> - }
> -
> - unsigned int i = 0;
> - while (tes[i].name != NULL) {
> - free(tes[i].name);
> - ++i;
> - }
> - free(tes);
> -
> - return 0;
> -}
> -
> -/**
> - * Gets trace_events string for a given PID.
> - *
> - * @param tes Pointer to TES array to be filled (callee allocates, caller
> - * frees with `ustcmd_free_tes')
> - * @param pid Targeted PID
> - * @return 0 if successful, or -1 on error
> - */
> -int ustcmd_get_tes(struct trace_event_status **tes,
> - const pid_t pid)
> -{
> - struct ustcomm_header req_header, res_header;
> - char *big_str = NULL;
> - int result, app_fd;
> - struct trace_event_status *tmp_tes = NULL;
> - unsigned int i = 0, tes_ind = 0;
> -
> - if (tes == NULL) {
> - return -1;
> - }
> -
> - if (ustcomm_connect_app(pid, &app_fd)) {
> - ERR("could not connect to PID %u", (unsigned int) pid);
> - return -1;
> - }
> -
> - req_header.command = LIST_TRACE_EVENTS;
> - req_header.size = 0;
> -
> - result = ustcomm_send(app_fd, &req_header, NULL);
> - if (result != 1) {
> - ERR("error while requesting trace_event list");
> - return -1;
> - }
> -
> - result = ustcomm_recv_alloc(app_fd, &res_header, &big_str);
> - if (result != 1) {
> - ERR("error while receiving markers list");
> - return -1;
> - }
> -
> - close(app_fd);
> -
> - tmp_tes = (struct trace_event_status *)
> - zmalloc(sizeof(struct trace_event_status) *
> - (ustcmd_count_nl(big_str) + 1));
> - if (tmp_tes == NULL) {
> - ERR("Failed to allocate TES array");
> - return -1;
> - }
> -
> - /* Parse received reply string (format: "[name]"): */
> - while (big_str[i] != '\0') {
> - sscanf(big_str + i, "trace_event: %a[^\n]",
> - &tmp_tes[tes_ind].name);
> - while (big_str[i] != '\n') {
> - ++i; /* Go to next '\n' */
> - }
> - ++i; /* Skip current pointed '\n' */
> - ++tes_ind;
> - }
> - tmp_tes[tes_ind].name = NULL;
> -
> - *tes = tmp_tes;
> -
> - free(big_str);
> - return 0;
> -}
> -
> -/**
> - * Set socket path
> - *
> - * @param sock_path Socket path
> - * @param pid Traced process ID
> - * @return 0 if successful, or error
> - */
> -int ustcmd_set_sock_path(const char *sock_path, pid_t pid)
> -{
> - int result;
> - struct ustcomm_header req_header, res_header;
> - struct ustcomm_single_field sock_path_msg;
> -
> - result = ustcomm_pack_single_field(&req_header,
> - &sock_path_msg,
> - sock_path);
> - if (result < 0) {
> - errno = -result;
> - return -1;
> - }
> -
> - req_header.command = SET_SOCK_PATH;
> -
> - return do_cmd(pid, &req_header, (char *)&sock_path_msg,
> - &res_header, NULL);
> -}
> -
> -/**
> - * Get socket path
> - *
> - * @param sock_path Pointer to where the socket path will be returned
> - * @param pid Traced process ID
> - * @return 0 if successful, or error
> - */
> -int ustcmd_get_sock_path(char **sock_path, pid_t pid)
> -{
> - int result;
> - struct ustcomm_header req_header, res_header;
> - struct ustcomm_single_field *sock_path_msg;
> -
> - req_header.command = GET_SOCK_PATH;
> - req_header.size = 0;
> -
> - result = do_cmd(pid, &req_header, NULL, &res_header,
> - (char **)&sock_path_msg);
> - if (result < 0) {
> - return -1;
> - }
> -
> - result = ustcomm_unpack_single_field(sock_path_msg);
> - if (result < 0) {
> - return result;
> - }
> -
> - *sock_path = strdup(sock_path_msg->field);
> -
> - free(sock_path_msg);
> -
> - return 0;
> -}
> -
> -int ustcmd_force_switch(pid_t pid)
> -{
> - struct ustcomm_header req_header, res_header;
> -
> - req_header.command = FORCE_SUBBUF_SWITCH;
> - req_header.size = 0;
> -
> - return do_cmd(pid, &req_header, NULL, &res_header, NULL);
> -}
> -
> diff --git a/libustctl/Makefile.am b/libustctl/Makefile.am
> new file mode 100644
> index 0000000..bc7526b
> --- /dev/null
> +++ b/libustctl/Makefile.am
> @@ -0,0 +1,14 @@
> +AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_srcdir)/libustcomm
> +AM_CFLAGS = -fno-strict-aliasing
> +
> +lib_LTLIBRARIES = libustctl.la
> +
> +libustctl_la_SOURCES = \
> + libustctl.c
> +
> +libustctl_la_LDFLAGS = -no-undefined -version-info 0:0:0
> +
> +libustctl_la_LIBADD = \
> + $(top_builddir)/libustcomm/libustcomm.la
> +
> +libustctl_la_CFLAGS = -DUST_COMPONENT="libustctl" -fno-strict-aliasing
> diff --git a/libustctl/README b/libustctl/README
> new file mode 100644
> index 0000000..fd4cc97
> --- /dev/null
> +++ b/libustctl/README
> @@ -0,0 +1,2 @@
> +libustctl is a library that provides an API and its implementation to send
> +commands to traceable processes.
> diff --git a/libustctl/libustctl.c b/libustctl/libustctl.c
> new file mode 100644
> index 0000000..9c4ced2
> --- /dev/null
> +++ b/libustctl/libustctl.c
> @@ -0,0 +1,671 @@
> +/* Copyright (C) 2009 Pierre-Marc Fournier, Philippe Proulx-Barrette
> + *
> + * 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
> + */
> +
> +#define _GNU_SOURCE
> +#include <stdio.h>
> +#include <unistd.h>
> +#include <getopt.h>
> +#include <stdlib.h>
> +#include <fcntl.h>
> +#include <string.h>
> +#include <dirent.h>
> +
> +#include "ustcomm.h"
> +#include "ust/ustctl.h"
> +#include "usterr.h"
> +
> +static int do_cmd(const pid_t pid,
> + const struct ustcomm_header *req_header,
> + const char *req_data,
> + struct ustcomm_header *res_header,
> + char **res_data)
> +{
> + int app_fd, result, saved_errno = 0;
> + char *recv_buf;
> +
> + if (ustcomm_connect_app(pid, &app_fd)) {
> + ERR("could not connect to PID %u", (unsigned int) pid);
> + errno = ENOTCONN;
> + return -1;
> + }
> +
> + recv_buf = zmalloc(USTCOMM_BUFFER_SIZE);
> + if (!recv_buf) {
> + saved_errno = ENOMEM;
> + goto close_app_fd;
> + }
> +
> + result = ustcomm_req(app_fd, req_header, req_data, res_header, recv_buf);
> + if (result > 0) {
> + saved_errno = -res_header->result;
> + if (res_header->size == 0 || saved_errno > 0) {
> + free(recv_buf);
> + } else {
> + if (res_data) {
> + *res_data = recv_buf;
> + } else {
> + free(recv_buf);
> + }
> + }
> + } else {
> + ERR("ustcomm req failed");
> + if (result == 0) {
> + saved_errno = ENOTCONN;
> + } else {
> + saved_errno = -result;
> + }
> + free(recv_buf);
> + }
> +
> +close_app_fd:
> + close(app_fd);
> +
> + errno = saved_errno;
> +
> + if (errno) {
> + return -1;
> + }
> +
> + return 0;
> +}
> +
> +pid_t *ustctl_get_online_pids(void)
> +{
> + struct dirent *dirent;
> + DIR *dir;
> + unsigned int ret_size = 1 * sizeof(pid_t), i = 0;
> +
> + dir = opendir(SOCK_DIR);
> + if (!dir) {
> + return NULL;
> + }
> +
> + pid_t *ret = (pid_t *) malloc(ret_size);
> +
> + while ((dirent = readdir(dir))) {
> + if (!strcmp(dirent->d_name, ".") ||
> + !strcmp(dirent->d_name, "..")) {
> +
> + continue;
> + }
> +
> + if (dirent->d_type != DT_DIR &&
> + !!strcmp(dirent->d_name, "ust-consumer")) {
> +
> + sscanf(dirent->d_name, "%u", (unsigned int *) &ret[i]);
> + /* FIXME: Here we previously called pid_is_online, which
> + * always returned 1, now I replaced it with just 1.
> + * We need to figure out an intelligent way of solving
> + * this, maybe connect-disconnect.
> + */
> + if (1) {
> + ret_size += sizeof(pid_t);
> + ret = (pid_t *) realloc(ret, ret_size);
> + ++i;
> + }
> + }
> + }
> +
> + ret[i] = 0; /* Array end */
> +
> + if (ret[0] == 0) {
> + /* No PID at all */
> + free(ret);
> + return NULL;
> + }
> +
> + closedir(dir);
> + return ret;
> +}
> +
> +/**
> + * Sets marker state (USTCTL_MS_ON or USTCTL_MS_OFF).
> + *
> + * @param mn Marker name
> + * @param state Marker's new state
> + * @param pid Traced process ID
> + * @return 0 if successful, or errors {USTCTL_ERR_GEN, USTCTL_ERR_ARG}
> + */
> +int ustctl_set_marker_state(const char *trace, const char *channel,
> + const char *marker, int state, pid_t pid)
> +{
> + struct ustcomm_header req_header, res_header;
> + struct ustcomm_marker_info marker_inf;
> + int result;
> +
> + result = ustcomm_pack_marker_info(&req_header,
> + &marker_inf,
> + trace,
> + channel,
> + marker);
> + if (result < 0) {
> + errno = -result;
> + return -1;
> + }
> +
> + req_header.command = state ? ENABLE_MARKER : DISABLE_MARKER;
> +
> + return do_cmd(pid, &req_header, (char *)&marker_inf,
> + &res_header, NULL);
> +}
> +
> +/**
> + * Set subbuffer size.
> + *
> + * @param channel_size Channel name and size
> + * @param pid Traced process ID
> + * @return 0 if successful, or error
> + */
> +int ustctl_set_subbuf_size(const char *trace, const char *channel,
> + unsigned int subbuf_size, pid_t pid)
> +{
> + struct ustcomm_header req_header, res_header;
> + struct ustcomm_channel_info ch_inf;
> + int result;
> +
> + result = ustcomm_pack_channel_info(&req_header,
> + &ch_inf,
> + trace,
> + channel);
> + if (result < 0) {
> + errno = -result;
> + return -1;
> + }
> +
> + req_header.command = SET_SUBBUF_SIZE;
> + ch_inf.subbuf_size = subbuf_size;
> +
> + return do_cmd(pid, &req_header, (char *)&ch_inf,
> + &res_header, NULL);
> +}
> +
> +/**
> + * Set subbuffer num.
> + *
> + * @param channel_num Channel name and num
> + * @param pid Traced process ID
> + * @return 0 if successful, or error
> + */
> +int ustctl_set_subbuf_num(const char *trace, const char *channel,
> + unsigned int num, pid_t pid)
> +{
> + struct ustcomm_header req_header, res_header;
> + struct ustcomm_channel_info ch_inf;
> + int result;
> +
> + result = ustcomm_pack_channel_info(&req_header,
> + &ch_inf,
> + trace,
> + channel);
> + if (result < 0) {
> + errno = -result;
> + return -1;
> + }
> +
> + req_header.command = SET_SUBBUF_NUM;
> + ch_inf.subbuf_num = num;
> +
> + return do_cmd(pid, &req_header, (char *)&ch_inf,
> + &res_header, NULL);
> +
> +}
> +
> +static int ustctl_get_subbuf_num_size(const char *trace, const char *channel,
> + pid_t pid, int *num, int *size)
> +{
> + struct ustcomm_header req_header, res_header;
> + struct ustcomm_channel_info ch_inf, *ch_inf_res;
> + int result;
> +
> +
> + result = ustcomm_pack_channel_info(&req_header,
> + &ch_inf,
> + trace,
> + channel);
> + if (result < 0) {
> + errno = -result;
> + return -1;
> + }
> +
> + req_header.command = GET_SUBBUF_NUM_SIZE;
> +
> + result = do_cmd(pid, &req_header, (char *)&ch_inf,
> + &res_header, (char **)&ch_inf_res);
> + if (result < 0) {
> + return -1;
> + }
> +
> + *num = ch_inf_res->subbuf_num;
> + *size = ch_inf_res->subbuf_size;
> +
> + free(ch_inf_res);
> +
> + return 0;
> +}
> +
> +/**
> + * Get subbuffer num.
> + *
> + * @param channel Channel name
> + * @param pid Traced process ID
> + * @return subbuf cnf if successful, or error
> + */
> +int ustctl_get_subbuf_num(const char *trace, const char *channel, pid_t pid)
> +{
> + int num, size, result;
> +
> + result = ustctl_get_subbuf_num_size(trace, channel, pid,
> + &num, &size);
> + if (result < 0) {
> + errno = -result;
> + return -1;
> + }
> +
> + return num;
> +}
> +
> +/**
> + * Get subbuffer size.
> + *
> + * @param channel Channel name
> + * @param pid Traced process ID
> + * @return subbuf size if successful, or error
> + */
> +int ustctl_get_subbuf_size(const char *trace, const char *channel, pid_t pid)
> +{
> + int num, size, result;
> +
> + result = ustctl_get_subbuf_num_size(trace, channel, pid,
> + &num, &size);
> + if (result < 0) {
> + errno = -result;
> + return -1;
> + }
> +
> + return size;
> +}
> +
> +
> +static int do_trace_cmd(const char *trace, pid_t pid, int command)
> +{
> + struct ustcomm_header req_header, res_header;
> + struct ustcomm_single_field trace_inf;
> + int result;
> +
> + result = ustcomm_pack_single_field(&req_header,
> + &trace_inf,
> + trace);
> + if (result < 0) {
> + errno = -result;
> + return -1;
> + }
> +
> + req_header.command = command;
> +
> + return do_cmd(pid, &req_header, (char *)&trace_inf, &res_header, NULL);
> +}
> +
> +/**
> + * Destroys an UST trace according to a PID.
> + *
> + * @param pid Traced process ID
> + * @return 0 if successful, or error USTCTL_ERR_GEN
> + */
> +int ustctl_destroy_trace(const char *trace, pid_t pid)
> +{
> + return do_trace_cmd(trace, pid, DESTROY_TRACE);
> +}
> +
> +/**
> + * Starts an UST trace (and setups it) according to a PID.
> + *
> + * @param pid Traced process ID
> + * @return 0 if successful, or error USTCTL_ERR_GEN
> + */
> +int ustctl_setup_and_start(const char *trace, pid_t pid)
> +{
> + return do_trace_cmd(trace, pid, START);
> +}
> +
> +/**
> + * Creates an UST trace according to a PID.
> + *
> + * @param pid Traced process ID
> + * @return 0 if successful, or error USTCTL_ERR_GEN
> + */
> +int ustctl_create_trace(const char *trace, pid_t pid)
> +{
> + return do_trace_cmd(trace, pid, CREATE_TRACE);
> +}
> +
> +/**
> + * Starts an UST trace according to a PID.
> + *
> + * @param pid Traced process ID
> + * @return 0 if successful, or error USTCTL_ERR_GEN
> + */
> +int ustctl_start_trace(const char *trace, pid_t pid)
> +{
> + return do_trace_cmd(trace, pid, START_TRACE);
> +}
> +
> +/**
> + * Alloc an UST trace according to a PID.
> + *
> + * @param pid Traced process ID
> + * @return 0 if successful, or error USTCTL_ERR_GEN
> + */
> +int ustctl_alloc_trace(const char *trace, pid_t pid)
> +{
> + return do_trace_cmd(trace, pid, ALLOC_TRACE);
> +}
> +
> +/**
> + * Stops an UST trace according to a PID.
> + *
> + * @param pid Traced process ID
> + * @return 0 if successful, or error USTCTL_ERR_GEN
> + */
> +int ustctl_stop_trace(const char *trace, pid_t pid)
> +{
> + return do_trace_cmd(trace, pid, STOP_TRACE);
> +}
> +
> +/**
> + * Counts newlines ('\n') in a string.
> + *
> + * @param str String to search in
> + * @return Total newlines count
> + */
> +unsigned int ustctl_count_nl(const char *str)
> +{
> + unsigned int i = 0, tot = 0;
> +
> + while (str[i] != '\0') {
> + if (str[i] == '\n') {
> + ++tot;
> + }
> + ++i;
> + }
> +
> + return tot;
> +}
> +
> +/**
> + * Frees a CMSF array.
> + *
> + * @param cmsf CMSF array to free
> + * @return 0 if successful, or error USTCTL_ERR_ARG
> + */
> +int ustctl_free_cmsf(struct marker_status *cmsf)
> +{
> + if (cmsf == NULL) {
> + return USTCTL_ERR_ARG;
> + }
> +
> + unsigned int i = 0;
> + while (cmsf[i].channel != NULL) {
> + free(cmsf[i].channel);
> + free(cmsf[i].marker);
> + free(cmsf[i].fs);
> + ++i;
> + }
> + free(cmsf);
> +
> + return 0;
> +}
> +
> +/**
> + * Gets channel/marker/state/format string for a given PID.
> + *
> + * @param cmsf Pointer to CMSF array to be filled (callee allocates, caller
> + * frees with `ustctl_free_cmsf')
> + * @param pid Targeted PID
> + * @return 0 if successful, or -1 on error
> + */
> +int ustctl_get_cmsf(struct marker_status **cmsf, const pid_t pid)
> +{
> + struct ustcomm_header req_header, res_header;
> + char *big_str = NULL;
> + int result, app_fd;
> + struct marker_status *tmp_cmsf = NULL;
> + unsigned int i = 0, cmsf_ind = 0;
> +
> + if (cmsf == NULL) {
> + return -1;
> + }
> +
> + if (ustcomm_connect_app(pid, &app_fd)) {
> + ERR("could not connect to PID %u", (unsigned int) pid);
> + return -1;
> + }
> +
> + req_header.command = LIST_MARKERS;
> + req_header.size = 0;
> +
> + result = ustcomm_send(app_fd, &req_header, NULL);
> + if (result <= 0) {
> + PERROR("error while requesting markers list for process %d", pid);
> + return -1;
> + }
> +
> + result = ustcomm_recv_alloc(app_fd, &res_header, &big_str);
> + if (result <= 0) {
> + ERR("error while receiving markers list");
> + return -1;
> + }
> +
> + close(app_fd);
> +
> + tmp_cmsf = (struct marker_status *) zmalloc(sizeof(struct marker_status) *
> + (ustctl_count_nl(big_str) + 1));
> + if (tmp_cmsf == NULL) {
> + ERR("Failed to allocate CMSF array");
> + return -1;
> + }
> +
> + /* Parse received reply string (format: "[chan]/[mark] [st] [fs]"): */
> + while (big_str[i] != '\0') {
> + char state;
> +
> + sscanf(big_str + i, "marker: %a[^/]/%a[^ ] %c %a[^\n]",
> + &tmp_cmsf[cmsf_ind].channel,
> + &tmp_cmsf[cmsf_ind].marker,
> + &state,
> + &tmp_cmsf[cmsf_ind].fs);
> + tmp_cmsf[cmsf_ind].state = (state == USTCTL_MS_CHR_ON ?
> + USTCTL_MS_ON : USTCTL_MS_OFF); /* Marker state */
> +
> + while (big_str[i] != '\n') {
> + ++i; /* Go to next '\n' */
> + }
> + ++i; /* Skip current pointed '\n' */
> + ++cmsf_ind;
> + }
> + tmp_cmsf[cmsf_ind].channel = NULL;
> + tmp_cmsf[cmsf_ind].marker = NULL;
> + tmp_cmsf[cmsf_ind].fs = NULL;
> +
> + *cmsf = tmp_cmsf;
> +
> + free(big_str);
> + return 0;
> +}
> +
> +
> +/**
> + * Frees a TES array.
> + *
> + * @param tes TES array to free
> + * @return 0 if successful, or error USTCTL_ERR_ARG
> + */
> +int ustctl_free_tes(struct trace_event_status *tes)
> +{
> + if (tes == NULL) {
> + return USTCTL_ERR_ARG;
> + }
> +
> + unsigned int i = 0;
> + while (tes[i].name != NULL) {
> + free(tes[i].name);
> + ++i;
> + }
> + free(tes);
> +
> + return 0;
> +}
> +
> +/**
> + * Gets trace_events string for a given PID.
> + *
> + * @param tes Pointer to TES array to be filled (callee allocates, caller
> + * frees with `ustctl_free_tes')
> + * @param pid Targeted PID
> + * @return 0 if successful, or -1 on error
> + */
> +int ustctl_get_tes(struct trace_event_status **tes,
> + const pid_t pid)
> +{
> + struct ustcomm_header req_header, res_header;
> + char *big_str = NULL;
> + int result, app_fd;
> + struct trace_event_status *tmp_tes = NULL;
> + unsigned int i = 0, tes_ind = 0;
> +
> + if (tes == NULL) {
> + return -1;
> + }
> +
> + if (ustcomm_connect_app(pid, &app_fd)) {
> + ERR("could not connect to PID %u", (unsigned int) pid);
> + return -1;
> + }
> +
> + req_header.command = LIST_TRACE_EVENTS;
> + req_header.size = 0;
> +
> + result = ustcomm_send(app_fd, &req_header, NULL);
> + if (result != 1) {
> + ERR("error while requesting trace_event list");
> + return -1;
> + }
> +
> + result = ustcomm_recv_alloc(app_fd, &res_header, &big_str);
> + if (result != 1) {
> + ERR("error while receiving markers list");
> + return -1;
> + }
> +
> + close(app_fd);
> +
> + tmp_tes = (struct trace_event_status *)
> + zmalloc(sizeof(struct trace_event_status) *
> + (ustctl_count_nl(big_str) + 1));
> + if (tmp_tes == NULL) {
> + ERR("Failed to allocate TES array");
> + return -1;
> + }
> +
> + /* Parse received reply string (format: "[name]"): */
> + while (big_str[i] != '\0') {
> + sscanf(big_str + i, "trace_event: %a[^\n]",
> + &tmp_tes[tes_ind].name);
> + while (big_str[i] != '\n') {
> + ++i; /* Go to next '\n' */
> + }
> + ++i; /* Skip current pointed '\n' */
> + ++tes_ind;
> + }
> + tmp_tes[tes_ind].name = NULL;
> +
> + *tes = tmp_tes;
> +
> + free(big_str);
> + return 0;
> +}
> +
> +/**
> + * Set socket path
> + *
> + * @param sock_path Socket path
> + * @param pid Traced process ID
> + * @return 0 if successful, or error
> + */
> +int ustctl_set_sock_path(const char *sock_path, pid_t pid)
> +{
> + int result;
> + struct ustcomm_header req_header, res_header;
> + struct ustcomm_single_field sock_path_msg;
> +
> + result = ustcomm_pack_single_field(&req_header,
> + &sock_path_msg,
> + sock_path);
> + if (result < 0) {
> + errno = -result;
> + return -1;
> + }
> +
> + req_header.command = SET_SOCK_PATH;
> +
> + return do_cmd(pid, &req_header, (char *)&sock_path_msg,
> + &res_header, NULL);
> +}
> +
> +/**
> + * Get socket path
> + *
> + * @param sock_path Pointer to where the socket path will be returned
> + * @param pid Traced process ID
> + * @return 0 if successful, or error
> + */
> +int ustctl_get_sock_path(char **sock_path, pid_t pid)
> +{
> + int result;
> + struct ustcomm_header req_header, res_header;
> + struct ustcomm_single_field *sock_path_msg;
> +
> + req_header.command = GET_SOCK_PATH;
> + req_header.size = 0;
> +
> + result = do_cmd(pid, &req_header, NULL, &res_header,
> + (char **)&sock_path_msg);
> + if (result < 0) {
> + return -1;
> + }
> +
> + result = ustcomm_unpack_single_field(sock_path_msg);
> + if (result < 0) {
> + return result;
> + }
> +
> + *sock_path = strdup(sock_path_msg->field);
> +
> + free(sock_path_msg);
> +
> + return 0;
> +}
> +
> +int ustctl_force_switch(pid_t pid)
> +{
> + struct ustcomm_header req_header, res_header;
> +
> + req_header.command = FORCE_SUBBUF_SWITCH;
> + req_header.size = 0;
> +
> + return do_cmd(pid, &req_header, NULL, &res_header, NULL);
> +}
> +
> diff --git a/tests/Makefile.am b/tests/Makefile.am
> index 526f81c..e4e06ce 100644
> --- a/tests/Makefile.am
> +++ b/tests/Makefile.am
> @@ -1,4 +1,4 @@
> -SUBDIRS = . hello hello2 basic basic_long fork simple_include snprintf test-nevents test-libustinstr-malloc dlopen same_line_marker trace_event register_test tracepoint ustcmd_function_tests
> +SUBDIRS = . hello hello2 basic basic_long fork simple_include snprintf test-nevents test-libustinstr-malloc dlopen same_line_marker trace_event register_test tracepoint libustctl_function_tests
>
> dist_noinst_SCRIPTS = test_loop runtests trace_matches
>
> diff --git a/tests/libustctl_function_tests/Makefile.am b/tests/libustctl_function_tests/Makefile.am
> new file mode 100644
> index 0000000..723b456
> --- /dev/null
> +++ b/tests/libustctl_function_tests/Makefile.am
> @@ -0,0 +1,10 @@
> +AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_srcdir)/tests/
> +
> +noinst_PROGRAMS = libustctl_function_tests
> +libustctl_function_tests_SOURCES = libustctl_function_tests.c
> +libustctl_function_tests_LDADD = $(top_builddir)/libust/libust.la \
> + $(top_builddir)/libustctl/libustctl.la \
> + $(top_builddir)/libust-initializer.o \
> + $(top_builddir)/tests/libtap.la \
> + -lpthread
> +
> diff --git a/tests/libustctl_function_tests/libustctl_function_tests.c b/tests/libustctl_function_tests/libustctl_function_tests.c
> new file mode 100644
> index 0000000..784ff5d
> --- /dev/null
> +++ b/tests/libustctl_function_tests/libustctl_function_tests.c
> @@ -0,0 +1,184 @@
> +/* Copyright (C) 2010 Nils Carlson
> + *
> + * 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
> + */
> +
> +/* Simple function tests for ustctl */
> +
> +#include <stdio.h>
> +#include <unistd.h>
> +#include <sys/types.h>
> +
> +#include <ust/marker.h>
> +#include <ust/ustctl.h>
> +
> +#include "tap.h"
> +
> +static void ustctl_function_tests(pid_t pid)
> +{
> + int result;
> + unsigned int subbuf_size, subbuf_num;
> + unsigned int new_subbuf_size, new_subbuf_num;
> + struct marker_status *marker_status, *ms_ptr;
> + char *old_socket_path, *new_socket_path;
> + char *tmp_ustd_socket = "/tmp/tmp_ustd_socket";
> + char *trace = "auto";
> +
> + printf("Connecting to pid %d\n", pid);
> +
> + /* marker status array functions */
> + result = ustctl_get_cmsf(&marker_status, pid);
> + tap_ok(!result, "ustctl_get_cmsf");
> +
> + result = 0;
> + for (ms_ptr = marker_status; ms_ptr->channel; ms_ptr++) {
> + if (!strcmp(ms_ptr->channel, "ust") &&
> + !strcmp(ms_ptr->marker, "bar")) {
> + result = 1;
> + }
> + }
> + tap_ok(result, "Found channel \"ust\", marker \"bar\"");
> +
> + tap_ok(!ustctl_free_cmsf(marker_status), "ustctl_free_cmsf");
> +
> + /* Get and set the socket path */
> + tap_ok(!ustctl_get_sock_path(&old_socket_path, pid),
> + "ustctl_get_sock_path");
> +
> + printf("Socket path: %s\n", old_socket_path);
> +
> + tap_ok(!ustctl_set_sock_path(tmp_ustd_socket, pid),
> + "ustctl_set_sock_path - set a new path");
> +
> + tap_ok(!ustctl_get_sock_path(&new_socket_path, pid),
> + "ustctl_get_sock_path - get the new path");
> +
> + tap_ok(!strcmp(new_socket_path, tmp_ustd_socket),
> + "Compare the set path and the retrieved path");
> +
> + free(new_socket_path);
> +
> + tap_ok(!ustctl_set_sock_path(old_socket_path, pid),
> + "Reset the socket path");
> +
> + free(old_socket_path);
> +
> + /* Enable, disable markers */
> + tap_ok(!ustctl_set_marker_state(trace, "ust", "bar", 1, pid),
> + "ustctl_set_marker_state - existing marker ust bar");
> +
> + /* Create and allocate a trace */
> + tap_ok(!ustctl_create_trace(trace, pid), "ustctl_create_trace");
> +
> + tap_ok(!ustctl_alloc_trace(trace, pid), "ustctl_alloc_trace");
> +
> + /* Get subbuf size and number */
> + subbuf_num = ustctl_get_subbuf_num(trace, "ust", pid);
> + tap_ok(subbuf_num > 0, "ustctl_get_subbuf_num - %d sub-buffers",
> + subbuf_num);
> +
> + subbuf_size = ustctl_get_subbuf_size(trace, "ust", pid);
> + tap_ok(subbuf_size, "ustctl_get_subbuf_size - sub-buffer size is %d",
> + subbuf_size);
> +
> + /* Start the trace */
> + tap_ok(!ustctl_start_trace(trace, pid), "ustctl_start_trace");
> +
> +
> + /* Stop the trace and destroy it*/
> + tap_ok(!ustctl_stop_trace(trace, pid), "ustctl_stop_trace");
> +
> + tap_ok(!ustctl_destroy_trace(trace, pid), "ustctl_destroy_trace");
> +
> + /* Create a new trace */
> + tap_ok(!ustctl_create_trace(trace, pid), "ustctl_create_trace - create a new trace");
> +
> + printf("Setting new subbufer number and sizes (doubling)\n");
> + new_subbuf_num = 2 * subbuf_num;
> + new_subbuf_size = 2 * subbuf_size;
> +
> + tap_ok(!ustctl_set_subbuf_num(trace, "ust", new_subbuf_num, pid),
> + "ustctl_set_subbuf_num");
> +
> + tap_ok(!ustctl_set_subbuf_size(trace, "ust", new_subbuf_size, pid),
> + "ustctl_set_subbuf_size");
> +
> +
> + /* Allocate the new trace */
> + tap_ok(!ustctl_alloc_trace(trace, pid), "ustctl_alloc_trace - allocate the new trace");
> +
> +
> + /* Get subbuf size and number and compare with what was set */
> + subbuf_num = ustctl_get_subbuf_num(trace, "ust", pid);
> +
> + subbuf_size = ustctl_get_subbuf_size(trace, "ust", pid);
> +
> + tap_ok(subbuf_num == new_subbuf_num, "Set a new subbuf number, %d == %d",
> + subbuf_num, new_subbuf_num);
> +
> +
> + result = ustctl_get_subbuf_size(trace, "ust", pid);
> + tap_ok(subbuf_size == new_subbuf_size, "Set a new subbuf size, %d == %d",
> + subbuf_size, new_subbuf_size);
> +
> + tap_ok(!ustctl_destroy_trace(trace, pid), "ustctl_destroy_trace - without ever starting");
> +
> +
> + printf("##### Tests that definetly should work are completed #####\n");
> + printf("############## Start expected failure cases ##############\n");
> +
> + tap_ok(ustctl_set_marker_state(trace, "ust","bar", 1, pid),
> + "Enable already enabled marker ust/bar");
> +
> + tap_ok(ustctl_set_marker_state(trace, "ustl", "blar", 1, pid),
> + "Enable non-existent marker ustl blar");
> +
> + tap_ok(ustctl_start_trace(trace, pid),
> + "Start a non-existent trace");
> +
> + tap_ok(ustctl_destroy_trace(trace, pid),
> + "Destroy non-existent trace");
> +
> + exit(tap_status() ? EXIT_FAILURE : EXIT_SUCCESS);
> +
> +}
> +
> +
> +int main()
> +{
> + int i, status, pipefd[2];
> + pid_t parent_pid, child_pid;
> + FILE *pipe_file;
> +
> + tap_plan(27);
> +
> + printf("Function tests for ustctl\n");
> +
> + parent_pid = getpid();
> + child_pid = fork();
> + if (child_pid) {
> + for(i=0; i<10; i++) {
> + trace_mark(ust, bar, "str %s", "FOOBAZ");
> + trace_mark(ust, bar2, "number1 %d number2 %d", 53, 9800);
> + usleep(100000);
> + }
> +
> + wait(&status);
> + } else {
> + ustctl_function_tests(parent_pid);
> + }
> +
> + exit(status ? EXIT_FAILURE : EXIT_SUCCESS);
> +}
> diff --git a/tests/runtests b/tests/runtests
> index afc1e21..68427f2 100755
> --- a/tests/runtests
> +++ b/tests/runtests
> @@ -45,7 +45,7 @@ simple_harness_run same_line_marker/same_line_marker.sh
>
> simple_harness_run tracepoint/run
>
> -simple_harness_run ustcmd_function_tests/ustcmd_function_tests
> +simple_harness_run libustctl_function_tests/libustctl_function_tests
>
> echo "************************************"
> if [[ $tests_failed -eq 0 ]]; then
> diff --git a/tests/ustcmd_function_tests/Makefile.am b/tests/ustcmd_function_tests/Makefile.am
> deleted file mode 100644
> index b70e784..0000000
> --- a/tests/ustcmd_function_tests/Makefile.am
> +++ /dev/null
> @@ -1,10 +0,0 @@
> -AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_srcdir)/tests/
> -
> -noinst_PROGRAMS = ustcmd_function_tests
> -ustcmd_function_tests_SOURCES = ustcmd_function_tests.c
> -ustcmd_function_tests_LDADD = $(top_builddir)/libust/libust.la \
> - $(top_builddir)/libustcmd/libustcmd.la \
> - $(top_builddir)/libust-initializer.o \
> - $(top_builddir)/tests/libtap.la \
> - -lpthread
> -
> diff --git a/tests/ustcmd_function_tests/ustcmd_function_tests.c b/tests/ustcmd_function_tests/ustcmd_function_tests.c
> deleted file mode 100644
> index d44dafc..0000000
> --- a/tests/ustcmd_function_tests/ustcmd_function_tests.c
> +++ /dev/null
> @@ -1,184 +0,0 @@
> -/* Copyright (C) 2010 Nils Carlson
> - *
> - * 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
> - */
> -
> -/* Simple function tests for ustcmd */
> -
> -#include <stdio.h>
> -#include <unistd.h>
> -#include <sys/types.h>
> -
> -#include <ust/marker.h>
> -#include <ust/ustcmd.h>
> -
> -#include "tap.h"
> -
> -static void ustcmd_function_tests(pid_t pid)
> -{
> - int result;
> - unsigned int subbuf_size, subbuf_num;
> - unsigned int new_subbuf_size, new_subbuf_num;
> - struct marker_status *marker_status, *ms_ptr;
> - char *old_socket_path, *new_socket_path;
> - char *tmp_ustd_socket = "/tmp/tmp_ustd_socket";
> - char *trace = "auto";
> -
> - printf("Connecting to pid %d\n", pid);
> -
> - /* marker status array functions */
> - result = ustcmd_get_cmsf(&marker_status, pid);
> - tap_ok(!result, "ustcmd_get_cmsf");
> -
> - result = 0;
> - for (ms_ptr = marker_status; ms_ptr->channel; ms_ptr++) {
> - if (!strcmp(ms_ptr->channel, "ust") &&
> - !strcmp(ms_ptr->marker, "bar")) {
> - result = 1;
> - }
> - }
> - tap_ok(result, "Found channel \"ust\", marker \"bar\"");
> -
> - tap_ok(!ustcmd_free_cmsf(marker_status), "ustcmd_free_cmsf");
> -
> - /* Get and set the socket path */
> - tap_ok(!ustcmd_get_sock_path(&old_socket_path, pid),
> - "ustcmd_get_sock_path");
> -
> - printf("Socket path: %s\n", old_socket_path);
> -
> - tap_ok(!ustcmd_set_sock_path(tmp_ustd_socket, pid),
> - "ustcmd_set_sock_path - set a new path");
> -
> - tap_ok(!ustcmd_get_sock_path(&new_socket_path, pid),
> - "ustcmd_get_sock_path - get the new path");
> -
> - tap_ok(!strcmp(new_socket_path, tmp_ustd_socket),
> - "Compare the set path and the retrieved path");
> -
> - free(new_socket_path);
> -
> - tap_ok(!ustcmd_set_sock_path(old_socket_path, pid),
> - "Reset the socket path");
> -
> - free(old_socket_path);
> -
> - /* Enable, disable markers */
> - tap_ok(!ustcmd_set_marker_state(trace, "ust", "bar", 1, pid),
> - "ustcmd_set_marker_state - existing marker ust bar");
> -
> - /* Create and allocate a trace */
> - tap_ok(!ustcmd_create_trace(trace, pid), "ustcmd_create_trace");
> -
> - tap_ok(!ustcmd_alloc_trace(trace, pid), "ustcmd_alloc_trace");
> -
> - /* Get subbuf size and number */
> - subbuf_num = ustcmd_get_subbuf_num(trace, "ust", pid);
> - tap_ok(subbuf_num > 0, "ustcmd_get_subbuf_num - %d sub-buffers",
> - subbuf_num);
> -
> - subbuf_size = ustcmd_get_subbuf_size(trace, "ust", pid);
> - tap_ok(subbuf_size, "ustcmd_get_subbuf_size - sub-buffer size is %d",
> - subbuf_size);
> -
> - /* Start the trace */
> - tap_ok(!ustcmd_start_trace(trace, pid), "ustcmd_start_trace");
> -
> -
> - /* Stop the trace and destroy it*/
> - tap_ok(!ustcmd_stop_trace(trace, pid), "ustcmd_stop_trace");
> -
> - tap_ok(!ustcmd_destroy_trace(trace, pid), "ustcmd_destroy_trace");
> -
> - /* Create a new trace */
> - tap_ok(!ustcmd_create_trace(trace, pid), "ustcmd_create_trace - create a new trace");
> -
> - printf("Setting new subbufer number and sizes (doubling)\n");
> - new_subbuf_num = 2 * subbuf_num;
> - new_subbuf_size = 2 * subbuf_size;
> -
> - tap_ok(!ustcmd_set_subbuf_num(trace, "ust", new_subbuf_num, pid),
> - "ustcmd_set_subbuf_num");
> -
> - tap_ok(!ustcmd_set_subbuf_size(trace, "ust", new_subbuf_size, pid),
> - "ustcmd_set_subbuf_size");
> -
> -
> - /* Allocate the new trace */
> - tap_ok(!ustcmd_alloc_trace(trace, pid), "ustcmd_alloc_trace - allocate the new trace");
> -
> -
> - /* Get subbuf size and number and compare with what was set */
> - subbuf_num = ustcmd_get_subbuf_num(trace, "ust", pid);
> -
> - subbuf_size = ustcmd_get_subbuf_size(trace, "ust", pid);
> -
> - tap_ok(subbuf_num == new_subbuf_num, "Set a new subbuf number, %d == %d",
> - subbuf_num, new_subbuf_num);
> -
> -
> - result = ustcmd_get_subbuf_size(trace, "ust", pid);
> - tap_ok(subbuf_size == new_subbuf_size, "Set a new subbuf size, %d == %d",
> - subbuf_size, new_subbuf_size);
> -
> - tap_ok(!ustcmd_destroy_trace(trace, pid), "ustcmd_destroy_trace - without ever starting");
> -
> -
> - printf("##### Tests that definetly should work are completed #####\n");
> - printf("############## Start expected failure cases ##############\n");
> -
> - tap_ok(ustcmd_set_marker_state(trace, "ust","bar", 1, pid),
> - "Enable already enabled marker ust/bar");
> -
> - tap_ok(ustcmd_set_marker_state(trace, "ustl", "blar", 1, pid),
> - "Enable non-existent marker ustl blar");
> -
> - tap_ok(ustcmd_start_trace(trace, pid),
> - "Start a non-existent trace");
> -
> - tap_ok(ustcmd_destroy_trace(trace, pid),
> - "Destroy non-existent trace");
> -
> - exit(tap_status() ? EXIT_FAILURE : EXIT_SUCCESS);
> -
> -}
> -
> -
> -int main()
> -{
> - int i, status, pipefd[2];
> - pid_t parent_pid, child_pid;
> - FILE *pipe_file;
> -
> - tap_plan(27);
> -
> - printf("Function tests for ustcmd\n");
> -
> - parent_pid = getpid();
> - child_pid = fork();
> - if (child_pid) {
> - for(i=0; i<10; i++) {
> - trace_mark(ust, bar, "str %s", "FOOBAZ");
> - trace_mark(ust, bar2, "number1 %d number2 %d", 53, 9800);
> - usleep(100000);
> - }
> -
> - wait(&status);
> - } else {
> - ustcmd_function_tests(parent_pid);
> - }
> -
> - exit(status ? EXIT_FAILURE : EXIT_SUCCESS);
> -}
> diff --git a/ustctl/Makefile.am b/ustctl/Makefile.am
> index 3b09745..1e442a3 100644
> --- a/ustctl/Makefile.am
> +++ b/ustctl/Makefile.am
> @@ -1,5 +1,5 @@
> AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_srcdir)/libustcomm \
> - -I$(top_srcdir)/libustcmd $(KCOMPAT_CFLAGS)
> + -I$(top_srcdir)/libustctl $(KCOMPAT_CFLAGS)
> AM_CFLAGS = -fno-strict-aliasing
>
> bin_PROGRAMS = ustctl
> @@ -12,4 +12,4 @@ ustctl_CFLAGS = -DUST_COMPONENT=ustctl -fno-strict-aliasing
> ustctl_LDADD = \
> $(top_builddir)/snprintf/libustsnprintf.la \
> $(top_builddir)/libustcomm/libustcomm.la \
> - $(top_builddir)/libustcmd/libustcmd.la
> + $(top_builddir)/libustctl/libustctl.la
> diff --git a/ustctl/channel_cmds.c b/ustctl/channel_cmds.c
> index 51f7d50..2ccf460 100644
> --- a/ustctl/channel_cmds.c
> +++ b/ustctl/channel_cmds.c
> @@ -17,7 +17,7 @@
> #include <stdio.h>
> #include <sys/types.h>
> #include <unistd.h>
> -#include <ust/ustcmd.h>
> +#include <ust/ustctl.h>
> #include "scanning_functions.h"
> #include "usterr.h"
> #include "cli.h"
> @@ -38,7 +38,7 @@ static int set_subbuf_size(int argc, char *argv[])
> free(channel);
> return -1;
> }
> - if (ustcmd_set_subbuf_size(argv[2], channel, size, pid)) {
> + if (ustctl_set_subbuf_size(argv[2], channel, size, pid)) {
> ERR("error while trying to set the size of subbuffers "
> "for PID %u\n",
> pid);
> @@ -66,7 +66,7 @@ static int set_subbuf_num(int argc, char *argv[])
> free(channel);
> return -1;
> }
> - if (ustcmd_set_subbuf_num(argv[2], channel, num, pid)) {
> + if (ustctl_set_subbuf_num(argv[2], channel, num, pid)) {
> ERR("error while trying to set the number of subbuffers for PID %u\n",
> pid);
> result = -1;
> @@ -84,7 +84,7 @@ static int get_subbuf_size(int argc, char *argv[])
>
> pid = parse_pid(argv[1]);
>
> - if ((size = ustcmd_get_subbuf_size(argv[2], argv[3], pid)) < 0) {
> + if ((size = ustctl_get_subbuf_size(argv[2], argv[3], pid)) < 0) {
> ERR("error while trying to get the subbuffer size from PID %u\n",
> pid);
> return -1;
> @@ -102,7 +102,7 @@ static int get_subbuf_num(int argc, char *argv[])
>
> pid = parse_pid(argv[1]);
>
> - if ((num = ustcmd_get_subbuf_num(argv[2], argv[3], pid)) < 0) {
> + if ((num = ustctl_get_subbuf_num(argv[2], argv[3], pid)) < 0) {
> ERR("error while trying to get the subbuffer size from PID %u\n",
> pid);
> return -1;
> diff --git a/ustctl/marker_cmds.c b/ustctl/marker_cmds.c
> index 20222dd..6544669 100644
> --- a/ustctl/marker_cmds.c
> +++ b/ustctl/marker_cmds.c
> @@ -17,7 +17,7 @@
> #include <stdio.h>
> #include <sys/types.h>
> #include <unistd.h>
> -#include <ust/ustcmd.h>
> +#include <ust/ustctl.h>
> #include "scanning_functions.h"
> #include "usterr.h"
> #include "cli.h"
> @@ -30,7 +30,7 @@ static int list_markers(int argc, char *argv[])
>
> pid = parse_pid(argv[1]);
>
> - if (ustcmd_get_cmsf(&cmsf, pid)) {
> + if (ustctl_get_cmsf(&cmsf, pid)) {
> ERR("error while trying to list markers for PID %u\n", pid);
> return -1;
> }
> @@ -43,7 +43,7 @@ static int list_markers(int argc, char *argv[])
> cmsf[i].state,
> cmsf[i].fs);
> }
> - ustcmd_free_cmsf(cmsf);
> + ustctl_free_cmsf(cmsf);
> return 0;
> }
>
> @@ -68,7 +68,7 @@ static int enable_marker(int argc, char *argv[])
> if (marker)
> free(marker);
> }
> - if (ustcmd_set_marker_state(argv[2], channel, marker, 1, pid)) {
> + if (ustctl_set_marker_state(argv[2], channel, marker, 1, pid)) {
> PERROR("error while trying to enable marker %s with PID %u",
> argv[i], pid);
> result = -1;
> @@ -101,7 +101,7 @@ static int disable_marker(int argc, char *argv[])
> free(marker);
> return -1;
> }
> - if (ustcmd_set_marker_state(argv[2], channel, marker, 0, pid)) {
> + if (ustctl_set_marker_state(argv[2], channel, marker, 0, pid)) {
> PERROR("error while trying to disable marker %s with PID %u",
> argv[i], pid);
> result = -1;
> diff --git a/ustctl/scanning_functions.c b/ustctl/scanning_functions.c
> index 0cf809e..a3eceb5 100644
> --- a/ustctl/scanning_functions.c
> +++ b/ustctl/scanning_functions.c
> @@ -17,7 +17,7 @@
>
> #define _GNU_SOURCE
> #include <stdio.h>
> -#include <ust/ustcmd.h>
> +#include <ust/ustctl.h>
> #include "usterr.h"
>
>
> diff --git a/ustctl/trace_cmds.c b/ustctl/trace_cmds.c
> index f6e11a7..020e5b2 100644
> --- a/ustctl/trace_cmds.c
> +++ b/ustctl/trace_cmds.c
> @@ -17,7 +17,7 @@
> #include <stdio.h>
> #include <sys/types.h>
> #include <unistd.h>
> -#include <ust/ustcmd.h>
> +#include <ust/ustctl.h>
> #include "scanning_functions.h"
> #include "usterr.h"
> #include "cli.h"
> @@ -29,7 +29,7 @@ static int create_trace(int argc, char *argv[])
>
> pid = parse_pid(argv[1]);
>
> - if (ustcmd_create_trace(argv[2], pid)) {
> + if (ustctl_create_trace(argv[2], pid)) {
> ERR("Failed to create trace %s for PID %u\n", argv[2], pid);
> return -1;
> }
> @@ -43,7 +43,7 @@ static int alloc_trace(int argc, char *argv[])
>
> pid = parse_pid(argv[1]);
>
> - if (ustcmd_alloc_trace(argv[2], pid)) {
> + if (ustctl_alloc_trace(argv[2], pid)) {
> ERR("Failed to allocate trace %s for PID %u\n", argv[2], pid);
> return -1;
> }
> @@ -56,7 +56,7 @@ static int start_trace(int argc, char *argv[])
>
> pid = parse_pid(argv[1]);
>
> - if (ustcmd_start_trace(argv[2], pid)) {
> + if (ustctl_start_trace(argv[2], pid)) {
> ERR("Failed to start trace %s for PID %u\n", argv[2], pid);
> return -1;
> }
> @@ -69,7 +69,7 @@ static int stop_trace(int argc, char *argv[])
>
> pid = parse_pid(argv[1]);
>
> - if (ustcmd_stop_trace(argv[2], pid)) {
> + if (ustctl_stop_trace(argv[2], pid)) {
> ERR("Failed to stop trace %s for PID %u\n", argv[2], pid);
> return -1;
> }
> @@ -82,7 +82,7 @@ static int destroy_trace(int argc, char *argv[])
>
> pid = parse_pid(argv[1]);
>
> - if (ustcmd_destroy_trace(argv[2], pid)) {
> + if (ustctl_destroy_trace(argv[2], pid)) {
> ERR("Failed to destroy trace %s for PID %u\n", argv[2], pid);
> return -1;
> }
> @@ -95,7 +95,7 @@ static int force_subbuf_switch(int argc, char *argv[])
>
> pid = parse_pid(argv[1]);
>
> - if (ustcmd_force_switch(pid)) {
> + if (ustctl_force_switch(pid)) {
> ERR("error while trying to force switch for PID %u\n", pid);
> return -1;
> }
> diff --git a/ustctl/ustctl.c b/ustctl/ustctl.c
> index 2b75a58..c1bbe8c 100644
> --- a/ustctl/ustctl.c
> +++ b/ustctl/ustctl.c
> @@ -23,7 +23,7 @@
> #include <stdlib.h>
> #include <fcntl.h>
>
> -#include "ust/ustcmd.h"
> +#include "ust/ustctl.h"
> #include "usterr.h"
> #include "cli.h"
> #include "scanning_functions.h"
> @@ -111,7 +111,7 @@ static int list_trace_events(int argc, char *argv[])
>
> pid = parse_pid(argv[1]);
>
> - if (ustcmd_get_tes(&tes, pid)) {
> + if (ustctl_get_tes(&tes, pid)) {
> ERR("error while trying to list "
> "trace_events for PID %u\n",
> pid);
> @@ -123,7 +123,7 @@ static int list_trace_events(int argc, char *argv[])
> pid,
> tes[i].name);
> }
> - ustcmd_free_tes(tes);
> + ustctl_free_tes(tes);
>
> return 0;
> }
> @@ -134,7 +134,7 @@ static int set_sock_path(int argc, char *argv[])
>
> pid = parse_pid(argv[1]);
>
> - if (ustcmd_set_sock_path(argv[2], pid)) {
> + if (ustctl_set_sock_path(argv[2], pid)) {
> ERR("error while trying to set sock path for PID %u\n", pid);
> return -1;
> }
> @@ -149,7 +149,7 @@ static int get_sock_path(int argc, char *argv[])
>
> pid = parse_pid(argv[1]);
>
> - if (ustcmd_get_sock_path(&sock_path, pid)) {
> + if (ustctl_get_sock_path(&sock_path, pid)) {
> ERR("error while trying to get sock path for PID %u\n", pid);
> return -1;
> }
- --
David Goulet
LTTng project, DORSAL Lab.
1024D/16BD8563
BE3C 672B 9331 9796 291A 14C6 4AF7 C14B 16BD 8563
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)
iEYEARECAAYFAk1ELicACgkQSvfBSxa9hWMYlwCfSWTubLjK3g9WqcygNAp5ZylW
QXQAoJmh/utn5huvZiPrWoeFs7m93e81
=Z2J/
-----END PGP SIGNATURE-----
More information about the lttng-dev
mailing list