chiark / gitweb /
use #pragma once instead of foo*foo define guards
[elogind.git] / src / shared / utmp-wtmp.c
index c9b986fc08480f77696685050a2b5277fcf1539f..5d88405e13b471fff0b8184d98627ad4d105aaa4 100644 (file)
@@ -33,7 +33,7 @@
 #include "utmp-wtmp.h"
 
 int utmp_get_runlevel(int *runlevel, int *previous) {
-        struct utmpx lookup, *found;
+        struct utmpx *found, lookup = { .ut_type = RUN_LVL };
         int r;
         const char *e;
 
@@ -66,9 +66,6 @@ int utmp_get_runlevel(int *runlevel, int *previous) {
 
         setutxent();
 
-        zero(lookup);
-        lookup.ut_type = RUN_LVL;
-
         if (!(found = getutxid(&lookup)))
                 r = -errno;
         else {
@@ -102,14 +99,12 @@ static void init_timestamp(struct utmpx *store, usec_t t) {
 }
 
 static void init_entry(struct utmpx *store, usec_t t) {
-        struct utsname uts;
+        struct utsname uts = {};
 
         assert(store);
 
         init_timestamp(store, t);
 
-        zero(uts);
-
         if (uname(&uts) >= 0)
                 strncpy(store->ut_host, uts.release, sizeof(store->ut_host));
 
@@ -195,7 +190,7 @@ int utmp_put_reboot(usec_t t) {
         return write_entry_both(&store);
 }
 
-static const char *sanitize_id(const char *id) {
+_pure_ static const char *sanitize_id(const char *id) {
         size_t l;
 
         assert(id);
@@ -292,7 +287,7 @@ int utmp_put_runlevel(int runlevel, int previous) {
 #define TIMEOUT_MSEC 50
 
 static int write_to_terminal(const char *tty, const char *message) {
-        int fd, r;
+        _cleanup_close_ int fd = -1;
         const char *p;
         size_t left;
         usec_t end;
@@ -300,14 +295,10 @@ static int write_to_terminal(const char *tty, const char *message) {
         assert(tty);
         assert(message);
 
-        if ((fd = open(tty, O_WRONLY|O_NDELAY|O_NOCTTY|O_CLOEXEC)) < 0)
+        fd = open(tty, O_WRONLY|O_NDELAY|O_NOCTTY|O_CLOEXEC);
+        if (fd < 0 || !isatty(fd))
                 return -errno;
 
-        if (!isatty(fd)) {
-                r = -errno;
-                goto finish;
-        }
-
         p = message;
         left = strlen(message);
 
@@ -315,36 +306,31 @@ static int write_to_terminal(const char *tty, const char *message) {
 
         while (left > 0) {
                 ssize_t n;
-                struct pollfd pollfd;
+                struct pollfd pollfd = {
+                        .fd = fd,
+                        .events = POLLOUT,
+                };
                 usec_t t;
                 int k;
 
                 t = now(CLOCK_MONOTONIC);
 
-                if (t >= end) {
-                        r = -ETIME;
-                        goto finish;
-                }
-
-                zero(pollfd);
-                pollfd.fd = fd;
-                pollfd.events = POLLOUT;
+                if (t >= end)
+                        return -ETIME;
 
-                if ((k = poll(&pollfd, 1, (end - t) / USEC_PER_MSEC)) < 0)
+                k = poll(&pollfd, 1, (end - t) / USEC_PER_MSEC);
+                if (k < 0)
                         return -errno;
 
-                if (k <= 0) {
-                        r = -ETIME;
-                        goto finish;
-                }
-
-                if ((n = write(fd, p, left)) < 0) {
+                if (k == 0)
+                        return -ETIME;
 
+                n = write(fd, p, left);
+                if (n < 0) {
                         if (errno == EAGAIN)
                                 continue;
 
-                        r = -errno;
-                        goto finish;
+                        return -errno;
                 }
 
                 assert((size_t) n <= left);
@@ -353,12 +339,7 @@ static int write_to_terminal(const char *tty, const char *message) {
                 left -= n;
         }
 
-        r = 0;
-
-finish:
-        close_nointr_nofail(fd);
-
-        return r;
+        return 0;
 }
 
 int utmp_wall(const char *message, bool (*match_tty)(const char *tty)) {