[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

[libvirt] [PATCH 2/3] virsh: Rename vshMakeStdinRaw to vshTTYMakeRaw and move it to virsh.c



Move the function to virsh.c to the rest of the TTY managing functions
and change the code so that it mirrors the rest.
---
 tools/virsh-console.c | 50 +++++---------------------------------------------
 tools/virsh-console.h |  7 +++----
 tools/virsh-domain.c  |  2 +-
 tools/virsh.c         | 48 +++++++++++++++++++++++++++++++++++++++++++++---
 tools/virsh.h         |  1 +
 5 files changed, 55 insertions(+), 53 deletions(-)

diff --git a/tools/virsh-console.c b/tools/virsh-console.c
index debf12c..cc9cc6a 100644
--- a/tools/virsh-console.c
+++ b/tools/virsh-console.c
@@ -37,6 +37,7 @@
 # include <c-ctype.h>

 # include "internal.h"
+# include "virsh.h"
 # include "virsh-console.h"
 # include "virlog.h"
 # include "virfile.h"
@@ -85,20 +86,6 @@ virConsoleHandleSignal(int sig ATTRIBUTE_UNUSED)
 }


-# ifndef HAVE_CFMAKERAW
-static void
-cfmakeraw(struct termios *attr)
-{
-    attr->c_iflag &= ~(IGNBRK | BRKINT | PARMRK | ISTRIP
-                         | INLCR | IGNCR | ICRNL | IXON);
-    attr->c_oflag &= ~OPOST;
-    attr->c_lflag &= ~(ECHO | ECHONL | ICANON | ISIG | IEXTEN);
-    attr->c_cflag &= ~(CSIZE | PARENB);
-    attr->c_cflag |= CS8;
-}
-# endif /* !HAVE_CFMAKERAW */
-
-
 static void
 virConsoleShutdown(virConsolePtr con)
 {
@@ -319,40 +306,13 @@ vshGetEscapeChar(const char *s)


 int
-vshMakeStdinRaw(struct termios *ttyattr, bool report_errors)
-{
-    struct termios rawattr;
-    char ebuf[1024];
-
-    if (tcgetattr(STDIN_FILENO, ttyattr) < 0) {
-        if (report_errors)
-            VIR_ERROR(_("unable to get tty attributes: %s"),
-                      virStrerror(errno, ebuf, sizeof(ebuf)));
-        return -1;
-    }
-
-    rawattr = *ttyattr;
-    cfmakeraw(&rawattr);
-
-    if (tcsetattr(STDIN_FILENO, TCSAFLUSH, &rawattr) < 0) {
-        if (report_errors)
-            VIR_ERROR(_("unable to set tty attributes: %s"),
-                      virStrerror(errno, ebuf, sizeof(ebuf)));
-        return -1;
-    }
-
-    return 0;
-}
-
-
-int
-vshRunConsole(virDomainPtr dom,
+vshRunConsole(vshControl *ctl,
+              virDomainPtr dom,
               const char *dev_name,
               const char *escape_seq,
               unsigned int flags)
 {
     int ret = -1;
-    struct termios ttyattr;
     void (*old_sigquit)(int);
     void (*old_sigterm)(int);
     void (*old_sigint)(int);
@@ -365,7 +325,7 @@ vshRunConsole(virDomainPtr dom,
        result in it being echoed back already), and
        also ensure Ctrl-C, etc is blocked, and misc
        other bits */
-    if (vshMakeStdinRaw(&ttyattr, true) < 0)
+    if (vshTTYMakeRaw(ctl, true) < 0)
         goto resettty;

     /* Trap all common signals so that we can safely restore
@@ -433,7 +393,7 @@ cleanup:
 resettty:
     /* Put STDIN back into the (sane?) state we found
        it in before starting */
-    tcsetattr(STDIN_FILENO, TCSAFLUSH, &ttyattr);
+    vshTTYRestore(ctl);

     return ret;
 }
diff --git a/tools/virsh-console.h b/tools/virsh-console.h
index 96ef235..d6dbedd 100644
--- a/tools/virsh-console.h
+++ b/tools/virsh-console.h
@@ -25,15 +25,14 @@

 # ifndef WIN32

-#  include <termios.h>
+#  include <virsh.h>

-int vshRunConsole(virDomainPtr dom,
+int vshRunConsole(vshControl *ctl,
+                  virDomainPtr dom,
                   const char *dev_name,
                   const char *escape_seq,
                   unsigned int flags);

-int vshMakeStdinRaw(struct termios *ttyattr, bool report_errors);
-
 # endif /* !WIN32 */

 #endif /* __VIR_CONSOLE_H__ */
diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c
index 60eed51..7a60e48 100644
--- a/tools/virsh-domain.c
+++ b/tools/virsh-domain.c
@@ -2263,7 +2263,7 @@ cmdRunConsole(vshControl *ctl, virDomainPtr dom,
     vshPrintExtra(ctl, _("Connected to domain %s\n"), virDomainGetName(dom));
     vshPrintExtra(ctl, _("Escape character is %s\n"), ctl->escapeChar);
     fflush(stdout);
-    if (vshRunConsole(dom, name, ctl->escapeChar, flags) == 0)
+    if (vshRunConsole(ctl, dom, name, ctl->escapeChar, flags) == 0)
         ret = true;

  cleanup:
diff --git a/tools/virsh.c b/tools/virsh.c
index 0cc9bdd..37e9716 100644
--- a/tools/virsh.c
+++ b/tools/virsh.c
@@ -458,14 +458,13 @@ int
 vshAskReedit(vshControl *ctl, const char *msg)
 {
     int c = -1;
-    struct termios ttyattr;

     if (!isatty(STDIN_FILENO))
         return -1;

     vshReportError(ctl);

-    if (vshMakeStdinRaw(&ttyattr, false) < 0)
+    if (vshTTYMakeRaw(ctl, false) < 0)
         return -1;

     while (true) {
@@ -488,7 +487,7 @@ vshAskReedit(vshControl *ctl, const char *msg)
         }
     }

-    tcsetattr(STDIN_FILENO, TCSAFLUSH, &ttyattr);
+    vshTTYRestore(ctl);

     vshPrint(ctl, "\r\n");
     return c;
@@ -2260,6 +2259,49 @@ vshTTYRestore(vshControl *ctl)
 }


+#ifndef HAVE_CFMAKERAW
+/* provide fallback in case cfmakeraw isn't available */
+static void
+cfmakeraw(struct termios *attr)
+{
+    attr->c_iflag &= ~(IGNBRK | BRKINT | PARMRK | ISTRIP
+                         | INLCR | IGNCR | ICRNL | IXON);
+    attr->c_oflag &= ~OPOST;
+    attr->c_lflag &= ~(ECHO | ECHONL | ICANON | ISIG | IEXTEN);
+    attr->c_cflag &= ~(CSIZE | PARENB);
+    attr->c_cflag |= CS8;
+}
+#endif /* !HAVE_CFMAKERAW */
+
+
+int
+vshTTYMakeRaw(vshControl *ctl, bool report_errors)
+{
+    struct termios rawattr = ctl->termattr;
+    char ebuf[1024];
+
+    if (!ctl->istty) {
+        if (report_errors) {
+            vshError(ctl, "%s",
+                     _("unable to make terminal raw: console isn't a tty"));
+        }
+
+        return -1;
+    }
+
+    cfmakeraw(&rawattr);
+
+    if (tcsetattr(STDIN_FILENO, TCSAFLUSH, &rawattr) < 0) {
+        if (report_errors)
+            vshError(ctl, _("unable to set tty attributes: %s"),
+                     virStrerror(errno, ebuf, sizeof(ebuf)));
+        return -1;
+    }
+
+    return 0;
+}
+
+
 void
 vshError(vshControl *ctl, const char *format, ...)
 {
diff --git a/tools/virsh.h b/tools/virsh.h
index db5934f..8afe13f 100644
--- a/tools/virsh.h
+++ b/tools/virsh.h
@@ -358,6 +358,7 @@ void vshSaveLibvirtError(void);
 bool vshTTYIsInterruptCharacter(vshControl *ctl, const char chr);
 int vshTTYDisableInterrupt(vshControl *ctl);
 int vshTTYRestore(vshControl *ctl);
+int vshTTYMakeRaw(vshControl *ctl, bool report_errors);

 /* allocation wrappers */
 void *_vshMalloc(vshControl *ctl, size_t sz, const char *filename, int line);
-- 
1.8.3.2


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]