]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
shared: voidify call to loop_write() and trim duplicate code
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Wed, 17 Jul 2019 07:49:01 +0000 (09:49 +0200)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Wed, 17 Jul 2019 09:35:04 +0000 (11:35 +0200)
Coverity CID#1402375.

src/basic/terminal-util.c

index 76d6d1a20c9e011ae5c1c14a2e1ac3549c2319d8..1f39c1730666952de1640ecc6e76444fa8ab28ad 100644 (file)
@@ -526,71 +526,57 @@ int terminal_vhangup(const char *name) {
 }
 
 int vt_disallocate(const char *name) {
-        _cleanup_close_ int fd = -1;
-        const char *e, *n;
-        unsigned u;
+        const char *e;
         int r;
 
         /* Deallocate the VT if possible. If not possible
          * (i.e. because it is the active one), at least clear it
-         * entirely (including the scrollback buffer) */
+         * entirely (including the scrollback buffer). */
 
         e = path_startswith(name, "/dev/");
         if (!e)
                 return -EINVAL;
 
-        if (!tty_is_vc(name)) {
-                /* So this is not a VT. I guess we cannot deallocate
-                 * it then. But let's at least clear the screen */
-
-                fd = open_terminal(name, O_RDWR|O_NOCTTY|O_CLOEXEC);
-                if (fd < 0)
-                        return fd;
-
-                loop_write(fd,
-                           "\033[r"    /* clear scrolling region */
-                           "\033[H"    /* move home */
-                           "\033[2J",  /* clear screen */
-                           10, false);
-                return 0;
-        }
-
-        n = startswith(e, "tty");
-        if (!n)
-                return -EINVAL;
+        if (tty_is_vc(name)) {
+                _cleanup_close_ int fd = -1;
+                unsigned u;
+                const char *n;
 
-        r = safe_atou(n, &u);
-        if (r < 0)
-                return r;
+                n = startswith(e, "tty");
+                if (!n)
+                        return -EINVAL;
 
-        if (u <= 0)
-                return -EINVAL;
+                r = safe_atou(n, &u);
+                if (r < 0)
+                        return r;
 
-        /* Try to deallocate */
-        fd = open_terminal("/dev/tty0", O_RDWR|O_NOCTTY|O_CLOEXEC|O_NONBLOCK);
-        if (fd < 0)
-                return fd;
+                if (u <= 0)
+                        return -EINVAL;
 
-        r = ioctl(fd, VT_DISALLOCATE, u);
-        fd = safe_close(fd);
+                /* Try to deallocate */
+                fd = open_terminal("/dev/tty0", O_RDWR|O_NOCTTY|O_CLOEXEC|O_NONBLOCK);
+                if (fd < 0)
+                        return fd;
 
-        if (r >= 0)
-                return 0;
+                r = ioctl(fd, VT_DISALLOCATE, u);
+                if (r >= 0)
+                        return 0;
+                if (errno != EBUSY)
+                        return -errno;
+        }
 
-        if (errno != EBUSY)
-                return -errno;
+        /* So this is not a VT (in which case we cannot deallocate it),
+         * or we failed to deallocate. Let's at least clear the screen. */
 
-        /* Couldn't deallocate, so let's clear it fully with
-         * scrollback */
-        fd = open_terminal(name, O_RDWR|O_NOCTTY|O_CLOEXEC);
-        if (fd < 0)
-                return fd;
+        _cleanup_close_ int fd2 = open_terminal(name, O_RDWR|O_NOCTTY|O_CLOEXEC);
+        if (fd2 < 0)
+                return fd2;
 
-        loop_write(fd,
-                   "\033[r"   /* clear scrolling region */
-                   "\033[H"   /* move home */
-                   "\033[3J", /* clear screen including scrollback, requires Linux 2.6.40 */
-                   10, false);
+        (void) loop_write(fd2,
+                          "\033[r"   /* clear scrolling region */
+                          "\033[H"   /* move home */
+                          "\033[3J", /* clear screen including scrollback, requires Linux 2.6.40 */
+                          10, false);
         return 0;
 }