]> git.ipfire.org Git - thirdparty/plymouth.git/commitdiff
ply-utils: Introduce ply_change_to_vt_with_fd () and ply_change_to_vt ()
authornerdopolis <bluescreen_avenger@verizon.net>
Thu, 7 Dec 2023 21:36:12 +0000 (16:36 -0500)
committernerdopolis <bluescreen_avenger@verizon.net>
Sat, 9 Dec 2023 03:55:52 +0000 (22:55 -0500)
src/libply-splash-core/ply-terminal.c
src/libply/ply-utils.c
src/libply/ply-utils.h

index 51280bc0f30c59eb7e0e477774b84c822390e1f1..2638b2df5c9d3a4c837f978338db430747e49c88 100644 (file)
@@ -912,16 +912,6 @@ ply_terminal_get_vt_number (ply_terminal_t *terminal)
         return terminal->vt_number;
 }
 
-static bool
-set_active_vt (ply_terminal_t *terminal,
-               int             vt_number)
-{
-        if (ioctl (terminal->fd, VT_ACTIVATE, vt_number) < 0)
-                return false;
-
-        return true;
-}
-
 static bool
 wait_for_vt_to_become_active (ply_terminal_t *terminal,
                               int             vt_number)
@@ -953,7 +943,7 @@ ply_terminal_activate_vt (ply_terminal_t *terminal)
         if (terminal->is_active)
                 return true;
 
-        if (!set_active_vt (terminal, terminal->vt_number)) {
+        if (!ply_change_to_vt_with_fd (terminal->vt_number, terminal->fd)) {
                 ply_trace ("unable to set active vt to %d: %m",
                            terminal->vt_number);
                 return false;
@@ -994,7 +984,7 @@ ply_terminal_deactivate_vt (ply_terminal_t *terminal)
         if (ply_terminal_is_active (terminal)) {
                 ply_trace ("Attempting to set active vt back to %d from %d",
                            terminal->initial_vt_number, old_vt_number);
-                if (!set_active_vt (terminal, terminal->initial_vt_number)) {
+                if (!ply_change_to_vt_with_fd (terminal->initial_vt_number, terminal->fd)) {
                         ply_trace ("Couldn't move console to initial vt: %m");
                         return false;
                 }
index cebeacc66b182fad6b8aa15d0226bcd125cacafb..c5b0847e47c15093e14a4bea60a458f4284c52c1 100644 (file)
@@ -1232,4 +1232,33 @@ ply_get_random_number (long lower_bound,
         return lower_bound + offset;
 }
 
+bool
+ply_change_to_vt_with_fd (int vt_number,
+                          int tty_fd)
+{
+        if (ioctl (tty_fd, VT_ACTIVATE, vt_number) < 0)
+                return false;
+
+        return true;
+}
+
+bool
+ply_change_to_vt (int vt_number)
+{
+        int fd;
+        bool changed_vt;
+
+        fd = open ("/dev/tty0", O_RDWR);
+
+        if (fd < 0)
+                return false;
+
+        ply_save_errno ();
+        changed_vt = ply_change_to_vt_with_fd (vt_number, fd);
+        ply_restore_errno ();
+        close (fd);
+
+        return changed_vt;
+}
+
 /* vim: set ts=4 sw=4 expandtab autoindent cindent cino={.5s,(0: */
index 3e487b4e4516af73137e11dfe55ea28978b124e9..b99d2b23e1bc30c4b480e7222f2535ee7640507f 100644 (file)
@@ -162,6 +162,10 @@ bool ply_is_secure_boot_enabled (void);
 
 long ply_get_random_number (long lower_bound, long range);
 
+bool ply_change_to_vt_with_fd (int vt_number,
+                               int tty_fd);
+bool ply_change_to_vt (int vt_number);
+
 #endif
 
 #endif /* PLY_UTILS_H */