]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
socket: Add one more helper
authorDaan De Meyer <daan.j.demeyer@gmail.com>
Thu, 19 Oct 2023 14:41:04 +0000 (16:41 +0200)
committerDaan De Meyer <daan.j.demeyer@gmail.com>
Fri, 20 Oct 2023 12:09:32 +0000 (14:09 +0200)
src/core/dbus-socket.c
src/core/socket.c
src/core/socket.h

index 5e5b715e906ae15e16c7740441d46cd3f0fe6fb2..e77e9e5ccd27b5392b7c6707036283cc43f1679a 100644 (file)
@@ -44,30 +44,12 @@ static int property_get_listen(
 
         LIST_FOREACH(port, p, s->ports) {
                 _cleanup_free_ char *address = NULL;
-                const char *a;
 
-                switch (p->type) {
-                        case SOCKET_SOCKET: {
-                                r = socket_address_print(&p->address, &address);
-                                if (r)
-                                        return r;
-
-                                a = address;
-                                break;
-                        }
-
-                        case SOCKET_SPECIAL:
-                        case SOCKET_MQUEUE:
-                        case SOCKET_FIFO:
-                        case SOCKET_USB_FUNCTION:
-                                a = p->path;
-                                break;
-
-                        default:
-                                assert_not_reached();
-                }
+                r = socket_port_to_address(p, &address);
+                if (r < 0)
+                        return r;
 
-                r = sd_bus_message_append(reply, "(ss)", socket_port_type_to_string(p), a);
+                r = sd_bus_message_append(reply, "(ss)", socket_port_type_to_string(p), address);
                 if (r < 0)
                         return r;
         }
index 62ce29076ee1c69643cec6f9d3c54a7eb7344c2d..bb7164d255b3b9bd0a6a779d4d1946e5cfa3a4d4 100644 (file)
@@ -2866,6 +2866,40 @@ static const char *socket_sub_state_to_string(Unit *u) {
         return socket_state_to_string(SOCKET(u)->state);
 }
 
+int socket_port_to_address(const SocketPort *p, char **ret) {
+        _cleanup_free_ char *address = NULL;
+        int r;
+
+        assert(p);
+        assert(ret);
+
+        switch (p->type) {
+                case SOCKET_SOCKET: {
+                        r = socket_address_print(&p->address, &address);
+                        if (r < 0)
+                                return r;
+
+                        break;
+                }
+
+                case SOCKET_SPECIAL:
+                case SOCKET_MQUEUE:
+                case SOCKET_FIFO:
+                case SOCKET_USB_FUNCTION:
+                        address = strdup(p->path);
+                        if (!address)
+                                return -ENOMEM;
+                        break;
+
+                default:
+                        assert_not_reached();
+        }
+
+        *ret = TAKE_PTR(address);
+
+        return 0;
+}
+
 const char* socket_port_type_to_string(SocketPort *p) {
 
         assert(p);
index 0b82141659a081fe8c62662be4c51e52f4515da5..0983e8c9d0f869a5a63fa0a099e022a140f01591 100644 (file)
@@ -180,6 +180,8 @@ DEFINE_TRIVIAL_CLEANUP_FUNC(SocketPort*, socket_port_free);
 
 void socket_free_ports(Socket *s);
 
+int socket_port_to_address(const SocketPort *s, char **ret);
+
 int socket_load_service_unit(Socket *s, int cfd, Unit **ret);
 
 char *socket_fdname(Socket *s);