[ LTTCOMM_ERR_INDEX(LTTCOMM_NEED_ROOT_SESSIOND) ] = "Tracing the kernel requires a root lttng-sessiond daemon and \"tracing\" group user membership",
[ LTTCOMM_ERR_INDEX(LTTCOMM_TRACE_ALREADY_STARTED) ] = "Tracing already started",
[ LTTCOMM_ERR_INDEX(LTTCOMM_TRACE_ALREADY_STOPPED) ] = "Tracing already stopped",
+ [ LTTCOMM_ERR_INDEX(LTTCOMM_KERN_EVENT_ENOSYS) ] = "Kernel event type not supported",
[ LTTCOMM_ERR_INDEX(CONSUMERD_COMMAND_SOCK_READY) ] = "consumerd command socket ready",
[ LTTCOMM_ERR_INDEX(CONSUMERD_SUCCESS_RECV_FD) ] = "consumerd success on receiving fds",
[ LTTCOMM_ERR_INDEX(CONSUMERD_SPLICE_ESPIPE) ] = "consumerd splice ESPIPE",
[ LTTCOMM_ERR_INDEX(LTTCOMM_NO_EVENT) ] = "Event not found",
[ LTTCOMM_ERR_INDEX(LTTCOMM_INVALID) ] = "Invalid parameter",
+ [ LTTCOMM_ERR_INDEX(LTTCOMM_NO_USTCONSUMERD) ] = "No UST consumer detected",
+ [ LTTCOMM_ERR_INDEX(LTTCOMM_NO_KERNCONSUMERD) ] = "No kernel consumer detected",
+ [ LTTCOMM_ERR_INDEX(LTTCOMM_EVENT_EXIST_LOGLEVEL) ] = "Event already enabled with different loglevel",
};
/*
msg.msg_iov = iov;
msg.msg_iovlen = 1;
- ret = sendmsg(sock, &msg, 0);
+ do {
+ ret = sendmsg(sock, &msg, 0);
+ } while (ret < 0 && errno == EINTR);
if (ret < 0) {
/*
* Only warn about EPIPE when quiet mode is deactivated.
return ret;
}
+ssize_t lttcomm_send_string(int sock, char *str, size_t len)
+{
+ ssize_t slen, ret = -1;
+
+ if (!str) {
+ goto end;
+ }
+
+ /* Send string len first */
+ slen = lttcomm_send_unix_sock(sock, &len, sizeof(len));
+
+ if (slen != sizeof(len)) {
+ fprintf(stderr,
+ "Unexpected sent size. Expected %zu got %zu\n",
+ sizeof(len), slen);
+ ret = -1;
+ goto end;
+ }
+
+ /* Send the actual string */
+ slen = lttcomm_send_unix_sock(sock, str, len);
+ if (slen != len) {
+ fprintf(stderr,
+ "Unexpected sent size. Expected %zu got %zu\n",
+ len, slen);
+ ret = -1;
+ goto end;
+ }
+
+ ret = slen;
+
+end:
+ return ret;
+}
+
+/*
+ * Allocate and return the received string.
+ * Return NULL on error.
+ * Caller is responsible of freeing the allocated string.
+ */
+char *lttcomm_recv_string(int sock)
+{
+ ssize_t rlen;
+ size_t len;
+ char *ret;
+
+ /* Get the string len first */
+ rlen = lttcomm_recv_unix_sock(sock, &len, sizeof(len));
+
+ if (rlen != sizeof(len)) {
+ fprintf(stderr,
+ "Unexpected received size. Expected %zu got %zu\n",
+ sizeof(len), rlen);
+ ret = NULL;
+ goto end;
+ }
+
+ /* Account for the NULL byte */
+ ret = malloc(len + 1);
+ if (!ret) {
+ ret = NULL;
+ goto end;
+ }
+
+ /* Get the actual string */
+ rlen = lttcomm_recv_unix_sock(sock, ret, len);
+ if (rlen != len) {
+ fprintf(stderr,
+ "Unexpected received size. Expected %zu got %zu\n",
+ len, rlen);
+ free(ret);
+ ret = NULL;
+ goto end;
+ }
+
+ /* Set terminating NULL byte */
+ ret[len] = '\0';
+
+end:
+ return ret;
+}
+
+
/*
* Send a message with credentials over a unix socket.
*
LTTNG_SOCK_SET_PID_CRED(creds, getpid());
#endif /* __linux__ */
- ret = sendmsg(sock, &msg, 0);
+ do {
+ ret = sendmsg(sock, &msg, 0);
+ } while (ret < 0 && errno == EINTR);
if (ret < 0) {
/*
* Only warn about EPIPE when quiet mode is deactivated.
}
memcpy(creds, CMSG_DATA(cmptr), sizeof_cred);
-#elif defined(__FreeBSD__)
+#elif (defined(__FreeBSD__) || defined(__CYGWIN__))
{
int peer_ret;
}
return ret;
}
-#elif defined(__FreeBSD__)
+#elif (defined(__FreeBSD__) || defined(__CYGWIN__))
int lttcomm_setsockopt_creds_unix_sock(int sock)
{
return 0;