summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Brown2012-03-26 22:03:59 +0200
committerMichael Brown2012-03-26 22:58:50 +0200
commitc2875ae32952690e11fc6f654fa48f4f2c9f0567 (patch)
treefca03fb4effcb19498caa8729ad782065cd633bb
parent[console] Add "log message" console usage and an internal syslog() call (diff)
downloadipxe-c2875ae32952690e11fc6f654fa48f4f2c9f0567.tar.gz
ipxe-c2875ae32952690e11fc6f654fa48f4f2c9f0567.tar.xz
ipxe-c2875ae32952690e11fc6f654fa48f4f2c9f0567.zip
[console] Do not share ANSI escape context between lineconsole users
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>
-rw-r--r--src/arch/i386/interface/vmware/vmconsole.c8
-rw-r--r--src/core/lineconsole.c12
-rw-r--r--src/include/ipxe/lineconsole.h3
-rw-r--r--src/net/udp/syslog.c8
4 files changed, 20 insertions, 11 deletions
diff --git a/src/arch/i386/interface/vmware/vmconsole.c b/src/arch/i386/interface/vmware/vmconsole.c
index 096b1af1a..7f02c50ec 100644
--- a/src/arch/i386/interface/vmware/vmconsole.c
+++ b/src/arch/i386/interface/vmware/vmconsole.c
@@ -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 */
diff --git a/src/core/lineconsole.c b/src/core/lineconsole.c
index c43a2875d..71bc1f8bd 100644
--- a/src/core/lineconsole.c
+++ b/src/core/lineconsole.c
@@ -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;
diff --git a/src/include/ipxe/lineconsole.h b/src/include/ipxe/lineconsole.h
index d53a0e9f9..925c0accc 100644
--- a/src/include/ipxe/lineconsole.h
+++ b/src/include/ipxe/lineconsole.h
@@ -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 );
diff --git a/src/net/udp/syslog.c b/src/net/udp/syslog.c
index abf51359e..caa0d0b29 100644
--- a/src/net/udp/syslog.c
+++ b/src/net/udp/syslog.c
@@ -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 */