]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[console] Do not share ANSI escape context between lineconsole users
authorMichael Brown <mcb30@ipxe.org>
Mon, 26 Mar 2012 20:03:59 +0000 (21:03 +0100)
committerMichael Brown <mcb30@ipxe.org>
Mon, 26 Mar 2012 20:58:50 +0000 (21:58 +0100)
An ANSI escape sequence context cannot be shared between multiple
users.  Make the ANSI escape sequence context part of the line console
definition and provide individual contexts for each user.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/arch/i386/interface/vmware/vmconsole.c
src/core/lineconsole.c
src/include/ipxe/lineconsole.h
src/net/udp/syslog.c

index 096b1af1a126f0a6868519358dc192577d20fb34..7f02c50ec0c19d610d578f1f9b0b69967a4107f1 100644 (file)
@@ -51,10 +51,18 @@ static struct {
        .prefix = "log ",
 };
 
+/** VMware logfile console ANSI escape sequence handlers */
+static struct ansiesc_handler vmconsole_handlers[] = {
+       { 0, NULL }
+};
+
 /** VMware logfile line console */
 static struct line_console vmconsole_line = {
        .buffer = vmconsole_buffer.message,
        .len = sizeof ( vmconsole_buffer.message ),
+       .ctx = {
+               .handlers = vmconsole_handlers,
+       },
 };
 
 /** VMware logfile console recursion marker */
index c43a2875dceeaac268ffc8c244a888bd21099c6c..71bc1f8bdcb8f1e9d2d1fe1f28bac988adebbe26 100644 (file)
@@ -29,16 +29,6 @@ FILE_LICENCE ( GPL2_OR_LATER );
 #include <ipxe/ansiesc.h>
 #include <ipxe/lineconsole.h>
 
-/** Line-based console ANSI escape sequence handlers */
-static struct ansiesc_handler line_ansiesc_handlers[] = {
-       { 0, NULL }
-};
-
-/** Line-based console ANSI escape sequence context */
-static struct ansiesc_context line_ansiesc_ctx = {
-       .handlers = line_ansiesc_handlers,
-};
-
 /**
  * Print a character to a line-based console
  *
@@ -48,7 +38,7 @@ static struct ansiesc_context line_ansiesc_ctx = {
 size_t line_putchar ( struct line_console *line, int character ) {
 
        /* Strip ANSI escape sequences */
-       character = ansiesc_process ( &line_ansiesc_ctx, character );
+       character = ansiesc_process ( &line->ctx, character );
        if ( character < 0 )
                return 0;
 
index d53a0e9f93df286f0afbb20b0ebd9dd302cf2104..925c0acccedc3fe5e8bbcb0a6373a3571340142f 100644 (file)
@@ -10,6 +10,7 @@
 FILE_LICENCE ( GPL2_OR_LATER );
 
 #include <stdint.h>
+#include <ipxe/ansiesc.h>
 
 /** A line-based console */
 struct line_console {
@@ -26,6 +27,8 @@ struct line_console {
         * a potential terminating NUL.
         */
        size_t len;
+       /** ANSI escape sequence context */
+       struct ansiesc_context ctx;
 };
 
 extern size_t line_putchar ( struct line_console *line, int character );
index abf51359ec40d02f1de6124fba53119875b8db7e..caa0d0b2925e786e5b0957d1e886a756f39b0b83 100644 (file)
@@ -68,10 +68,18 @@ static struct interface syslogger = INTF_INIT ( syslogger_desc );
 /** Syslog line buffer */
 static char syslog_buffer[SYSLOG_BUFSIZE];
 
+/** Syslog ANSI escape sequence handlers */
+static struct ansiesc_handler syslog_handlers[] = {
+       { 0, NULL }
+};
+
 /** Syslog line console */
 static struct line_console syslog_line = {
        .buffer = syslog_buffer,
        .len = sizeof ( syslog_buffer ),
+       .ctx = {
+               .handlers = syslog_handlers,
+       },
 };
 
 /** Syslog recursion marker */