Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
[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>
  • Loading branch information
mcb30 committed Mar 26, 2012
1 parent 24b7296 commit c2875ae
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 11 deletions.
8 changes: 8 additions & 0 deletions src/arch/i386/interface/vmware/vmconsole.c
Expand Up @@ -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 */
Expand Down
12 changes: 1 addition & 11 deletions src/core/lineconsole.c
Expand Up @@ -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
*
Expand All @@ -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;

Expand Down
3 changes: 3 additions & 0 deletions src/include/ipxe/lineconsole.h
Expand Up @@ -10,6 +10,7 @@
FILE_LICENCE ( GPL2_OR_LATER );

#include <stdint.h>
#include <ipxe/ansiesc.h>

/** A line-based console */
struct line_console {
Expand All @@ -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 );
Expand Down
8 changes: 8 additions & 0 deletions src/net/udp/syslog.c
Expand Up @@ -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 */
Expand Down

0 comments on commit c2875ae

Please sign in to comment.