X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=libustcomm%2Fustcomm.c;h=bbdbd7ee643a7b4c887aced587f9e001a34ac8b5;hb=fc214788832b93d238449c2b7736a8425b7e5330;hp=2c547abeb0039d7627da808a23e52df565a34148;hpb=72098143aa5d995802b411e152b89ad252dd37ca;p=ust.git diff --git a/libustcomm/ustcomm.c b/libustcomm/ustcomm.c index 2c547ab..bbdbd7e 100644 --- a/libustcomm/ustcomm.c +++ b/libustcomm/ustcomm.c @@ -621,13 +621,55 @@ 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, + const char *trace, const char *channel) { int offset = 0; + ch_inf->trace = ustcomm_print_data(ch_inf->data, + sizeof(ch_inf->data), + &offset, + trace); + + if (ch_inf->trace == USTCOMM_POISON_PTR) { + return -ENOMEM; + } + ch_inf->channel = ustcomm_print_data(ch_inf->data, sizeof(ch_inf->data), &offset, @@ -645,6 +687,13 @@ int ustcomm_pack_channel_info(struct ustcomm_header *header, int ustcomm_unpack_channel_info(struct ustcomm_channel_info *ch_inf) { + ch_inf->trace = ustcomm_restore_ptr(ch_inf->trace, + ch_inf->data, + sizeof(ch_inf->data)); + if (!ch_inf->trace) { + return -EINVAL; + } + ch_inf->channel = ustcomm_restore_ptr(ch_inf->channel, ch_inf->data, sizeof(ch_inf->data)); @@ -657,11 +706,21 @@ int ustcomm_unpack_channel_info(struct ustcomm_channel_info *ch_inf) int ustcomm_pack_buffer_info(struct ustcomm_header *header, struct ustcomm_buffer_info *buf_inf, + const char *trace, const char *channel, int channel_cpu) { int offset = 0; + buf_inf->trace = ustcomm_print_data(buf_inf->data, + sizeof(buf_inf->data), + &offset, + trace); + + if (buf_inf->trace == USTCOMM_POISON_PTR) { + return -ENOMEM; + } + buf_inf->channel = ustcomm_print_data(buf_inf->data, sizeof(buf_inf->data), &offset, @@ -681,6 +740,13 @@ int ustcomm_pack_buffer_info(struct ustcomm_header *header, int ustcomm_unpack_buffer_info(struct ustcomm_buffer_info *buf_inf) { + buf_inf->trace = ustcomm_restore_ptr(buf_inf->trace, + buf_inf->data, + sizeof(buf_inf->data)); + if (!buf_inf->trace) { + return -EINVAL; + } + buf_inf->channel = ustcomm_restore_ptr(buf_inf->channel, buf_inf->data, sizeof(buf_inf->data)); @@ -693,11 +759,22 @@ int ustcomm_unpack_buffer_info(struct ustcomm_buffer_info *buf_inf) int ustcomm_pack_marker_info(struct ustcomm_header *header, struct ustcomm_marker_info *marker_inf, + const char *trace, const char *channel, const char *marker) { int offset = 0; + marker_inf->trace = ustcomm_print_data(marker_inf->data, + sizeof(marker_inf->data), + &offset, + trace); + + if (marker_inf->trace == USTCOMM_POISON_PTR) { + return -ENOMEM; + } + + marker_inf->channel = ustcomm_print_data(marker_inf->data, sizeof(marker_inf->data), &offset, @@ -724,6 +801,13 @@ int ustcomm_pack_marker_info(struct ustcomm_header *header, int ustcomm_unpack_marker_info(struct ustcomm_marker_info *marker_inf) { + marker_inf->trace = ustcomm_restore_ptr(marker_inf->trace, + marker_inf->data, + sizeof(marker_inf->data)); + if (!marker_inf->trace) { + return -EINVAL; + } + marker_inf->channel = ustcomm_restore_ptr(marker_inf->channel, marker_inf->data, sizeof(marker_inf->data)); @@ -775,52 +859,3 @@ int ustcomm_unpack_sock_path(struct ustcomm_sock_path *sock_path_inf) return 0; } -int ustcomm_send_ch_req(int sock, char *channel, int command, - struct ustcomm_header *recv_header, - char *recv_data) -{ - struct ustcomm_header send_header; - struct ustcomm_channel_info ch_info; - int result; - - result = ustcomm_pack_channel_info(&send_header, - &ch_info, - channel); - if (result < 0) { - return result; - } - - send_header.command = command; - - return ustcomm_req(sock, - &send_header, - (char *)&ch_info, - recv_header, - recv_data); -} - -int ustcomm_send_buf_req(int sock, char *channel, int ch_cpu, - int command, - struct ustcomm_header *recv_header, - char *recv_data) -{ - struct ustcomm_header send_header; - struct ustcomm_buffer_info buf_info; - int result; - - result = ustcomm_pack_buffer_info(&send_header, - &buf_info, - channel, - ch_cpu); - if (result < 0) { - return result; - } - - send_header.command = command; - - return ustcomm_req(sock, - &send_header, - (char *)&buf_info, - recv_header, - recv_data); -}