actions: introduce action group
[lttng-tools.git] / src / common / unix.c
index 3490af6e7d584d237d38ec6532d7b1fd93bcf1b1..26eda52d97d1ad992c7b534b461c121eee9b6d00 100644 (file)
@@ -1,19 +1,9 @@
 /*
- * Copyright (C) 2011 David Goulet <david.goulet@polymtl.ca>
- *                      Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+ * Copyright (C) 2011 David Goulet <david.goulet@polymtl.ca>
+ * Copyright (C) 2011 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License, version 2 only,
- * as published by the Free Software Foundation.
+ * SPDX-License-Identifier: GPL-2.0-only
  *
- * This program 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 General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  */
 
 #define _LGPL_SOURCE
@@ -242,12 +232,9 @@ retry:
                if (errno == EINTR) {
                        goto retry;
                } else {
-                       /*
-                        * Only warn about EPIPE when quiet mode is
-                        * deactivated.
-                        * We consider EPIPE as expected.
-                        */
-                       if (errno != EPIPE || !lttng_opt_quiet) {
+                       /* We consider EPIPE and EAGAIN as expected. */
+                       if (!lttng_opt_quiet &&
+                                       (errno != EPIPE && errno != EAGAIN)) {
                                PERROR("recvmsg");
                        }
                        goto end;
@@ -330,12 +317,9 @@ retry:
                if (errno == EINTR) {
                        goto retry;
                } else {
-                       /*
-                        * Only warn about EPIPE when quiet mode is
-                        * deactivated.
-                        * We consider EPIPE as expected.
-                        */
-                       if (errno != EPIPE || !lttng_opt_quiet) {
+                       /* We consider EPIPE and EAGAIN as expected. */
+                       if (!lttng_opt_quiet &&
+                                       (errno != EPIPE && errno != EAGAIN)) {
                                PERROR("sendmsg");
                        }
                        goto end;
@@ -441,8 +425,14 @@ ssize_t lttcomm_recv_fds_unix_sock(int sock, int *fds, size_t nb_fd)
        struct cmsghdr *cmsg;
        size_t sizeof_fds = nb_fd * sizeof(int);
 
-       /* Account for the struct ucred cmsg in the buffer size */
-       char recv_buf[CMSG_SPACE(sizeof_fds) + CMSG_SPACE(sizeof(struct ucred))];
+#ifdef __linux__
+/* Account for the struct ucred cmsg in the buffer size */
+#define LTTNG_SOCK_RECV_FDS_BUF_SIZE CMSG_SPACE(sizeof_fds) + CMSG_SPACE(sizeof(struct ucred))
+#else
+#define LTTNG_SOCK_RECV_FDS_BUF_SIZE CMSG_SPACE(sizeof_fds)
+#endif /* __linux__ */
+
+       char recv_buf[LTTNG_SOCK_RECV_FDS_BUF_SIZE];
        struct msghdr msg;
        char dummy;
 
@@ -490,11 +480,6 @@ ssize_t lttcomm_recv_fds_unix_sock(int sock, int *fds, size_t nb_fd)
         * message.
         */
        for (cmsg = CMSG_FIRSTHDR(&msg); cmsg != NULL; cmsg = CMSG_NXTHDR(&msg, cmsg)) {
-               if (!cmsg) {
-                       fprintf(stderr, "Error: Invalid control message header\n");
-                       ret = -1;
-                       goto end;
-               }
                if (cmsg->cmsg_level != SOL_SOCKET) {
                        fprintf(stderr, "Error: The socket needs to be of type SOL_SOCKET\n");
                        ret = -1;
@@ -517,15 +502,16 @@ ssize_t lttcomm_recv_fds_unix_sock(int sock, int *fds, size_t nb_fd)
                        ret = sizeof_fds;
                        goto end;
                }
+#ifdef __linux__
                if (cmsg->cmsg_type == SCM_CREDENTIALS) {
                        /*
                         * Expect credentials to be sent when expecting fds even
                         * if no credential were include in the send(). The
                         * kernel adds them...
                         */
-                       fprintf(stderr, "Received creds... continuing\n");
                        ret = -1;
                }
+#endif /* __linux__ */
        }
 end:
        return ret;
This page took 0.025657 seconds and 5 git commands to generate.