X-Git-Url: http://git.liburcu.org/?a=blobdiff_plain;f=libustcomm%2Fustcomm.c;h=dce1e521c5b5c83714d439a00edf07ccb73253dc;hb=dbd75de7b2c05c98d6171bc531a1ecb23fb7e80d;hp=63eed5fa8b63d19fc2957e1105ed0338aad898ca;hpb=0222e1213f196b66cbc08cd29093aca4a28e9ffb;p=ust.git diff --git a/libustcomm/ustcomm.c b/libustcomm/ustcomm.c index 63eed5f..dce1e52 100644 --- a/libustcomm/ustcomm.c +++ b/libustcomm/ustcomm.c @@ -371,7 +371,7 @@ int ustcomm_recv_fd(int sock, if (peek_header.size && data) { if (peek_header.size < 0 || peek_header.size > USTCOMM_DATA_SIZE) { - ERR("big peek header! %d", peek_header.size); + ERR("big peek header! %ld", peek_header.size); return 0; } @@ -533,6 +533,21 @@ close_sock: return -1; } +/* Returns the current users socket directory, must be freed */ +char *ustcomm_user_sock_dir(void) +{ + int result; + char *sock_dir = NULL; + + result = asprintf(&sock_dir, "%s%s", USER_SOCK_DIR, + cuserid(NULL)); + if (result < 0) { + ERR("string overflow allocating directory name"); + return NULL; + } + + return sock_dir; +} /* Open a connection to a traceable app. * @@ -545,21 +560,30 @@ int ustcomm_connect_app(pid_t pid, int *app_fd) { int result; int retval = 0; - char *name; + char *dir_name, *sock_name; - result = asprintf(&name, "%s/%d", SOCK_DIR, pid); + dir_name = ustcomm_user_sock_dir(); + if (!dir_name) + return -ENOMEM; + + result = asprintf(&sock_name, "%s/%d", dir_name, pid); if (result < 0) { ERR("failed to allocate socket name"); - return -1; + retval = -1; + goto free_dir_name; } - result = ustcomm_connect_path(name, app_fd); + result = ustcomm_connect_path(sock_name, app_fd); if (result < 0) { ERR("failed to connect to app"); retval = -1; + goto free_sock_name; } - free(name); +free_sock_name: + free(sock_name); +free_dir_name: + free(dir_name); return retval; } @@ -621,33 +645,32 @@ 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 ustcomm_pack_single_field(struct ustcomm_header *header, + struct ustcomm_single_field *single_field, + const char *string) { int offset = 0; - trace_inf->trace = ustcomm_print_data(trace_inf->data, - sizeof(trace_inf->data), - &offset, - trace); + single_field->field = ustcomm_print_data(single_field->data, + sizeof(single_field->data), + &offset, + string); - if (trace_inf->trace == USTCOMM_POISON_PTR) { + if (single_field->field == USTCOMM_POISON_PTR) { return -ENOMEM; } - header->size = COMPUTE_MSG_SIZE(trace_inf, offset); + header->size = COMPUTE_MSG_SIZE(single_field, offset); return 0; } - -int ustcomm_unpack_trace_info(struct ustcomm_trace_info *trace_inf) +int ustcomm_unpack_single_field(struct ustcomm_single_field *single_field) { - trace_inf->trace = ustcomm_restore_ptr(trace_inf->trace, - trace_inf->data, - sizeof(trace_inf->data)); - if (!trace_inf->trace) { + single_field->field = ustcomm_restore_ptr(single_field->field, + single_field->data, + sizeof(single_field->data)); + if (!single_field->field) { return -EINVAL; } @@ -825,37 +848,3 @@ int ustcomm_unpack_marker_info(struct ustcomm_marker_info *marker_inf) return 0; } -int ustcomm_pack_sock_path(struct ustcomm_header *header, - struct ustcomm_sock_path *sock_path_inf, - const char *socket_path) -{ - int offset = 0; - - sock_path_inf->sock_path = - ustcomm_print_data(sock_path_inf->data, - sizeof(sock_path_inf->data), - &offset, - socket_path); - - if (sock_path_inf->sock_path == USTCOMM_POISON_PTR) { - return -ENOMEM; - } - - header->size = COMPUTE_MSG_SIZE(sock_path_inf, offset); - - return 0; -} - -int ustcomm_unpack_sock_path(struct ustcomm_sock_path *sock_path_inf) -{ - sock_path_inf->sock_path = - ustcomm_restore_ptr(sock_path_inf->sock_path, - sock_path_inf->data, - sizeof(sock_path_inf->data)); - if (!sock_path_inf->sock_path) { - return -EINVAL; - } - - return 0; -} -