diff options
| author | Michael Brown | 2012-02-28 23:45:32 +0100 |
|---|---|---|
| committer | Michael Brown | 2012-02-29 00:10:01 +0100 |
| commit | 851b93fbc3d5d28851963bd412eb321742c5437f (patch) | |
| tree | 1cd89da57441bb3808560424008a85187d98d716 /src/net | |
| parent | [syslog] Disable console when no syslog server is defined (diff) | |
| download | ipxe-851b93fbc3d5d28851963bd412eb321742c5437f.tar.gz ipxe-851b93fbc3d5d28851963bd412eb321742c5437f.tar.xz ipxe-851b93fbc3d5d28851963bd412eb321742c5437f.zip | |
[syslog] Separate out generic line-based console functionality
Abstract out the generic line-handling portions of the syslog
putchar() routine, to allow use by other console types.
Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src/net')
| -rw-r--r-- | src/net/udp/syslog.c | 44 |
1 files changed, 8 insertions, 36 deletions
diff --git a/src/net/udp/syslog.c b/src/net/udp/syslog.c index 775e3f4af..5a8a865a5 100644 --- a/src/net/udp/syslog.c +++ b/src/net/udp/syslog.c @@ -32,7 +32,7 @@ FILE_LICENCE ( GPL2_OR_LATER ); #include <ipxe/dhcp.h> #include <ipxe/settings.h> #include <ipxe/console.h> -#include <ipxe/ansiesc.h> +#include <ipxe/lineconsole.h> #include <ipxe/syslog.h> /** The syslog server */ @@ -61,22 +61,15 @@ static struct interface syslogger = INTF_INIT ( syslogger_desc ); /** Syslog line buffer */ static char syslog_buffer[SYSLOG_BUFSIZE]; -/** Index into syslog line buffer */ -static unsigned int syslog_idx; +/** Syslog line console */ +static struct line_console syslog_line = { + .buffer = syslog_buffer, + .len = sizeof ( syslog_buffer ), +}; /** Syslog recursion marker */ static int syslog_entered; -/** Syslog ANSI escape sequence handlers */ -static struct ansiesc_handler syslog_ansiesc_handlers[] = { - { 0, NULL } -}; - -/** Syslog ANSI escape sequence context */ -static struct ansiesc_context syslog_ansiesc_ctx = { - .handlers = syslog_ansiesc_handlers, -}; - /** * Print a character to syslog console * @@ -89,31 +82,10 @@ static void syslog_putchar ( int character ) { if ( syslog_entered ) return; - /* Strip ANSI escape sequences */ - character = ansiesc_process ( &syslog_ansiesc_ctx, character ); - if ( character < 0 ) - return; - - /* Ignore carriage return */ - if ( character == '\r' ) + /* Fill line buffer */ + if ( line_putchar ( &syslog_line, character ) == 0 ) return; - /* Treat newline as a terminator */ - if ( character == '\n' ) - character = 0; - - /* Add character to buffer */ - syslog_buffer[syslog_idx++] = character; - - /* Do nothing more unless we reach end-of-line (or end-of-buffer) */ - if ( ( character != 0 ) && - ( syslog_idx < ( sizeof ( syslog_buffer ) - 1 /* NUL */ ) ) ) { - return; - } - - /* Reset to start of buffer */ - syslog_idx = 0; - /* Guard against re-entry */ syslog_entered = 1; |
