]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
terminal-util: introduce vt_release() helper
authorFranck Bui <fbui@suse.com>
Mon, 27 Aug 2018 20:42:00 +0000 (22:42 +0200)
committerFranck Bui <fbui@suse.com>
Wed, 21 Nov 2018 13:28:34 +0000 (14:28 +0100)
src/basic/terminal-util.c
src/basic/terminal-util.h
src/login/logind-session.c

index aefa7cd4ef96e4c3db84f0f356833d39668751a8..7fce84bf8213fafb8daad0326f2140b54df4aeb4 100644 (file)
@@ -1305,3 +1305,19 @@ int vt_restore(int fd) {
 
         return q;
 }
+
+int vt_release(int fd, bool restore) {
+        assert(fd >= 0);
+
+        /* This function releases the VT by acknowledging the VT-switch signal
+         * sent by the kernel and optionally reset the VT in text and auto
+         * VT-switching modes. */
+
+        if (ioctl(fd, VT_RELDISP, 1) < 0)
+                return -errno;
+
+        if (restore)
+                return vt_restore(fd);
+
+        return 0;
+}
index 2d931114e498e1fb358683809123a4dc4ee41216..86e730028e4c1b7769cc0cf9e587f99d0d02bebe 100644 (file)
@@ -155,3 +155,4 @@ int open_terminal_in_namespace(pid_t pid, const char *name, int mode);
 int vt_default_utf8(void);
 int vt_reset_keyboard(int fd);
 int vt_restore(int fd);
+int vt_release(int fd, bool restore_vt);
index f35d7808c053a089a7edb162817b091ab75d537d..e8be1ffbedb3ae25ef5a6668e1266a2501b07ec1 100644 (file)
@@ -1296,9 +1296,9 @@ void session_leave_vt(Session *s) {
                 return;
 
         session_device_pause_all(s);
-        r = ioctl(s->vtfd, VT_RELDISP, 1);
+        r = vt_release(s->vtfd, false);
         if (r < 0)
-                log_debug_errno(errno, "Cannot release VT of session %s: %m", s->id);
+                log_debug_errno(r, "Cannot release VT of session %s: %m", s->id);
 }
 
 bool session_is_controller(Session *s, const char *sender) {