chiark / gitweb /
fsck: simplification
[elogind.git] / src / fsckd / fsckd.c
index 834476c14a689dcb48f7a0a1c802551eacaa2481..0f647468dd0d3d57c07a263e9a2e157742e38224 100644 (file)
@@ -122,8 +122,7 @@ static void remove_client(Client **first, Client *item) {
 }
 
 static void on_plymouth_disconnect(Manager *m) {
-        safe_close(m->plymouth_fd);
-        m->plymouth_fd = -1;
+        m->plymouth_fd = safe_close(m->plymouth_fd);
         m->plymouth_cancel_sent = false;
 }
 
@@ -253,20 +252,22 @@ static int connect_plymouth(Manager *m) {
         int r;
 
         /* try to connect or reconnect if sending a message */
-        if (m->plymouth_fd <= 0) {
-                m->plymouth_fd = socket(AF_UNIX, SOCK_STREAM|SOCK_CLOEXEC, 0);
-                if (m->plymouth_fd < 0) {
-                        return log_warning_errno(errno, "Connection to plymouth socket failed: %m");
-                }
-                if (connect(m->plymouth_fd, &sa.sa, offsetof(struct sockaddr_un, sun_path) + 1 + strlen(sa.un.sun_path+1)) < 0) {
-                        on_plymouth_disconnect(m);
-                        return log_warning_errno(errno, "Couldn't connect to plymouth: %m");
-                }
-                r = sd_event_add_io(m->event, NULL, m->plymouth_fd, EPOLLIN, plymouth_feedback_handler, m);
-                if (r < 0) {
-                        on_plymouth_disconnect(m);
-                        return log_warning_errno(r, "Can't listen to plymouth socket: %m");
-                }
+        if (m->plymouth_fd >= 0)
+                return 0;
+
+        m->plymouth_fd = socket(AF_UNIX, SOCK_STREAM|SOCK_CLOEXEC, 0);
+        if (m->plymouth_fd < 0)
+                return log_warning_errno(errno, "Connection to plymouth socket failed: %m");
+
+        if (connect(m->plymouth_fd, &sa.sa, offsetof(struct sockaddr_un, sun_path) + 1 + strlen(sa.un.sun_path+1)) < 0) {
+                on_plymouth_disconnect(m);
+                return log_warning_errno(errno, "Couldn't connect to plymouth: %m");
+        }
+
+        r = sd_event_add_io(m->event, NULL, m->plymouth_fd, EPOLLIN, plymouth_feedback_handler, m);
+        if (r < 0) {
+                on_plymouth_disconnect(m);
+                return log_warning_errno(r, "Can't listen to plymouth socket: %m");
         }
 
         return 0;
@@ -339,25 +340,26 @@ static int new_connection_handler(sd_event_source *s, int fd, uint32_t revents,
 
         /* Initialize and list new clients */
         new_client_fd = accept4(m->connection_fd, NULL, NULL, SOCK_CLOEXEC);
-        if (new_client_fd > 0) {
-                log_debug("New fsck client connected to fd: %d", new_client_fd);
-                client = new0(Client, 1);
-                if (!client)
-                        return log_oom();
-                client->fd = new_client_fd;
-                client->manager = m;
-                LIST_PREPEND(clients, m->clients, client);
-                r = sd_event_add_io(m->event, NULL, client->fd, EPOLLIN, progress_handler, client);
-                if (r < 0) {
-                        remove_client(&(m->clients), client);
-                        return r;
-                }
-                /* only request the client to cancel now in case the request is dropped by the client (chance to recancel) */
-                if (m->cancel_requested)
-                        request_cancel_client(client);
-        } else
+        if (new_client_fd < 0)
                 return log_error_errno(errno, "Couldn't accept a new connection: %m");
 
+        log_debug("New fsck client connected to fd: %d", new_client_fd);
+
+        client = new0(Client, 1);
+        if (!client)
+                return log_oom();
+        client->fd = new_client_fd;
+        client->manager = m;
+        LIST_PREPEND(clients, m->clients, client);
+        r = sd_event_add_io(m->event, NULL, client->fd, EPOLLIN, progress_handler, client);
+        if (r < 0) {
+                remove_client(&(m->clients), client);
+                return r;
+        }
+        /* only request the client to cancel now in case the request is dropped by the client (chance to recancel) */
+        if (m->cancel_requested)
+                request_cancel_client(client);
+
         return 0;
 }
 
@@ -520,12 +522,12 @@ int main(int argc, char *argv[]) {
         if (n > 1) {
                 log_error("Too many file descriptors received.");
                 return EXIT_FAILURE;
-        } else if (n == 1) {
+        } else if (n == 1)
                 fd = SD_LISTEN_FDS_START + 0;
-        else {
+        else {
                 fd = make_socket_fd(LOG_DEBUG, FSCKD_SOCKET_PATH, SOCK_STREAM | SOCK_CLOEXEC);
                 if (fd < 0) {
-                        log_error_errno(r, "Couldn't create listening socket fd on %s: %m", FSCKD_SOCKET_PATH);
+                        log_error_errno(fd, "Couldn't create listening socket fd on %s: %m", FSCKD_SOCKET_PATH);
                         return EXIT_FAILURE;
                 }
         }