From mboxrd@z Thu Jan 1 00:00:00 1970 From: nils.carlson@ericsson.com (Nils Carlson) Date: Thu, 4 Nov 2010 17:54:37 +0100 Subject: [ltt-dev] [UST PATCH 2/3] Add ustcomm_trace_info struct and support functions to ustcomm In-Reply-To: <1288889678-23413-1-git-send-email-nils.carlson@ericsson.com> References: <1288889678-23413-1-git-send-email-nils.carlson@ericsson.com> Message-ID: <1288889678-23413-2-git-send-email-nils.carlson@ericsson.com> Signed-off-by: Nils Carlson --- libustcomm/ustcomm.c | 32 ++++++++++++++++++++++++++++++++ libustcomm/ustcomm.h | 11 +++++++++++ 2 files changed, 43 insertions(+), 0 deletions(-) diff --git a/libustcomm/ustcomm.c b/libustcomm/ustcomm.c index fe8fea2..7d0fe00 100644 --- a/libustcomm/ustcomm.c +++ b/libustcomm/ustcomm.c @@ -621,6 +621,38 @@ char * ustcomm_restore_ptr(char *ptr, char *data_field, int data_field_size) return data_field + (long)ptr; } +int ustcomm_pack_trace_info(struct ustcomm_header *header, + struct ustcomm_trace_info *trace_inf, + const char *trace) +{ + int offset = 0; + + trace_inf->trace = ustcomm_print_data(trace_inf->data, + sizeof(trace_inf->data), + &offset, + trace); + + if (trace_inf->trace == USTCOMM_POISON_PTR) { + return -ENOMEM; + } + + header->size = COMPUTE_MSG_SIZE(trace_inf, offset); + + return 0; +} + + +int ustcomm_unpack_trace_info(struct ustcomm_trace_info *trace_inf) +{ + trace_inf->trace = ustcomm_restore_ptr(trace_inf->trace, + trace_inf->data, + sizeof(trace_inf->data)); + if (!trace_inf->trace) { + return -EINVAL; + } + + return 0; +} int ustcomm_pack_channel_info(struct ustcomm_header *header, struct ustcomm_channel_info *ch_inf, diff --git a/libustcomm/ustcomm.h b/libustcomm/ustcomm.h index f62250c..d548bc1 100644 --- a/libustcomm/ustcomm.h +++ b/libustcomm/ustcomm.h @@ -78,6 +78,11 @@ enum tracectl_commands { STOP_TRACE, }; +struct ustcomm_trace_info { + char *trace; + char data[USTCOMM_DATA_SIZE]; +}; + struct ustcomm_channel_info { char *channel; unsigned int subbuf_size; @@ -172,6 +177,12 @@ extern char * ustcomm_restore_ptr(char *ptr, char *data_field, (size_t) (long)(struct_ptr)->data - (long)(struct_ptr) + (offset) /* Packing and unpacking functions, making life easier */ +extern int ustcomm_pack_trace_info(struct ustcomm_header *header, + struct ustcomm_trace_info *trace_inf, + const char *trace); + +extern int ustcomm_unpack_trace_info(struct ustcomm_trace_info *trace_inf); + extern int ustcomm_pack_channel_info(struct ustcomm_header *header, struct ustcomm_channel_info *ch_inf, const char *channel); -- 1.7.1