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

Re: [Minios-devel] [PATCH v2 3/4] mini-os: Enable console to be configured as raw tty using termios





On 20/06/17 13:08, Wei Liu wrote:
On Sun, Jun 18, 2017 at 11:21:21PM +0100, Simon Waterman wrote:
Add minimal implementation of termios functions so that a console
can be configured in raw mode if an application requires it.

Signed-off-by: Simon Waterman <watermansrdev@xxxxxxxxx>
---
  lib/sys.c | 44 ++++++++++++++++++++++++++++++++++++++++++--
  1 file changed, 42 insertions(+), 2 deletions(-)

diff --git a/lib/sys.c b/lib/sys.c
index 1420722..6173471 100644
--- a/lib/sys.c
+++ b/lib/sys.c
@@ -32,6 +32,7 @@
  #include <xenbus.h>
  #include <xenstore.h>
  #include <poll.h>
+#include <termios.h>
#include <sys/types.h>
  #include <sys/unistd.h>
@@ -1436,6 +1437,47 @@ int nice(int inc)
      return 0;
  }
+/* Limited termios terminal settings support */
+const struct termios default_termios = {0,           /* iflag */
+                                        ONLCR,       /* oflag */
+                                        0,           /* lflag */
+                                        CREAD | CS8, /* cflag */
+                                        {}};         /* cc */
+
+int tcsetattr(int fildes, int action, const struct termios *tios)
+{
+    if (files[fildes].type != FTYPE_CONSOLE) {
+        errno = ENOTTY;
+        return -1;
+    }
+
+    if (tios->c_oflag & ONLCR)
+        files[fildes].cons.dev->is_raw = false;
+    else
+        files[fildes].cons.dev->is_raw = true;
+
+    return 0;
+}
+
+int tcgetattr(int fildes, struct termios *tios)
+{
+    if (files[fildes].type != FTYPE_CONSOLE) {
+        errno = ENOTTY;
+        return -1;
+    }
+
+    memcpy(tios, &default_termios, sizeof(struct termios));
+
+    if (files[fildes].cons.dev->is_raw)
+        tios->c_oflag &= ~ONLCR;
+
+    return 0;
+}
+
+void cfmakeraw(struct termios *termios_p)
+{
+    termios_p->c_oflag &= ~ONLCR;
+}
I'm not sure if this function does the right thing. Linux's TERMIOS(3)
says cfmakeraw does only the following to c_oflag:

            termios_p->c_oflag &= ~OPOST;

What source (spec) did you reference?

I don't think cfmakeraw is defined in POSIX but you're right. All the
implementations change OPOST.  I should have paid more attention to the
man page.

I will redo the patch. I propose to make OPOST configurable but ONLCR
fixed (enabled).

Sound okay or do you prefer I let both OPOST and ONLCR be configured?
If I do that I'll need to persist TERMIOS settings for each console whereas
at the moment I manufacture them from is_raw if needed.


_______________________________________________
Minios-devel mailing list
Minios-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/cgi-bin/mailman/listinfo/minios-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.