]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
fd-util: move cmsg_close_all() to socket-util.[ch]
authorLennart Poettering <lennart@poettering.net>
Wed, 18 Jun 2025 07:29:48 +0000 (09:29 +0200)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Wed, 18 Jun 2025 10:06:11 +0000 (19:06 +0900)
This call only makes sense on sockets, it's not a generic fd concept,
hence let's move this over.

src/basic/fd-util.c
src/basic/fd-util.h
src/basic/socket-util.c
src/basic/socket-util.h

index d58f5a987a6d176225a4169e256ebe4d53b70779..2056e029ccc32981d8514d40dbca805aa0887ecf 100644 (file)
@@ -606,24 +606,6 @@ int same_fd(int a, int b) {
         return fa == fb;
 }
 
-void cmsg_close_all(struct msghdr *mh) {
-        assert(mh);
-
-        struct cmsghdr *cmsg;
-        CMSG_FOREACH(cmsg, mh) {
-                if (cmsg->cmsg_level != SOL_SOCKET)
-                        continue;
-
-                if (cmsg->cmsg_type == SCM_RIGHTS)
-                        close_many(CMSG_TYPED_DATA(cmsg, int),
-                                   (cmsg->cmsg_len - CMSG_LEN(0)) / sizeof(int));
-                else if (cmsg->cmsg_type == SCM_PIDFD) {
-                        assert(cmsg->cmsg_len == CMSG_LEN(sizeof(int)));
-                        safe_close(*CMSG_TYPED_DATA(cmsg, int));
-                }
-        }
-}
-
 bool fdname_is_valid(const char *s) {
         const char *p;
 
index 3bb8152a7cf480b1cf1903f2bf17052a74188770..c0b9c1b51ca4188ca965eae6032c974d3860c185 100644 (file)
@@ -79,8 +79,6 @@ int pack_fds(int fds[], size_t n);
 int fd_validate(int fd);
 int same_fd(int a, int b);
 
-void cmsg_close_all(struct msghdr *mh);
-
 bool fdname_is_valid(const char *s);
 
 int fd_get_path(int fd, char **ret);
index 387e411846465db3d4e8f43e683c7b43a29c0b27..2e76b3f6e106e587d0f6fd75144b17c4833dfed1 100644 (file)
@@ -1981,3 +1981,21 @@ int socket_get_cookie(int fd, uint64_t *ret) {
 
         return 0;
 }
+
+void cmsg_close_all(struct msghdr *mh) {
+        assert(mh);
+
+        struct cmsghdr *cmsg;
+        CMSG_FOREACH(cmsg, mh) {
+                if (cmsg->cmsg_level != SOL_SOCKET)
+                        continue;
+
+                if (cmsg->cmsg_type == SCM_RIGHTS)
+                        close_many(CMSG_TYPED_DATA(cmsg, int),
+                                   (cmsg->cmsg_len - CMSG_LEN(0)) / sizeof(int));
+                else if (cmsg->cmsg_type == SCM_PIDFD) {
+                        assert(cmsg->cmsg_len == CMSG_LEN(sizeof(int)));
+                        safe_close(*CMSG_TYPED_DATA(cmsg, int));
+                }
+        }
+}
index 962e9dd5a279ee31dda5b8122ad31f5eebdb63a9..6493ccb468715233a9eba1b05701e3170e87d7ac 100644 (file)
@@ -337,3 +337,5 @@ int vsock_get_local_cid(unsigned *ret);
 int netlink_socket_get_multicast_groups(int fd, size_t *ret_len, uint32_t **ret_groups);
 
 int socket_get_cookie(int fd, uint64_t *ret);
+
+void cmsg_close_all(struct msghdr *mh);