From 5669f84c020ae2c4f1c2b648aca643c114f69012 Mon Sep 17 00:00:00 2001 From: neal Date: Wed, 6 Feb 2008 21:12:05 +0000 Subject: laden/ 2008-02-06 Neal H. Walfield * output-serial.c (serial_init): Rewrite command-line parser to not use strtok. viengoos/ 2008-02-06 Neal H. Walfield * output-serial.c (serial_init): Rewrite command-line parser to not use strtok. --- laden/ChangeLog | 5 +++++ laden/output-serial.c | 26 +++++++++++++++++++++----- 2 files changed, 26 insertions(+), 5 deletions(-) (limited to 'laden') diff --git a/laden/ChangeLog b/laden/ChangeLog index 727390b..4fa0215 100644 --- a/laden/ChangeLog +++ b/laden/ChangeLog @@ -1,3 +1,8 @@ +2008-02-06 Neal H. Walfield + + * output-serial.c (serial_init): Rewrite command-line parser to + not use strtok. + 2008-01-24 Neal H. Walfield * Makefile.am (laden_LDADD): Set to ../libc-parts/libc-kernel.a, diff --git a/laden/output-serial.c b/laden/output-serial.c index 1cc6049..16da415 100644 --- a/laden/output-serial.c +++ b/laden/output-serial.c @@ -1,5 +1,5 @@ /* output-serial.c - A serial port output driver. - Copyright (C) 2003 Free Software Foundation, Inc. + Copyright (C) 2003, 2008 Free Software Foundation, Inc. Written by Daniel Wagner. This file is part of the GNU Hurd. @@ -65,16 +65,22 @@ static unsigned short int uart_base = UART1_BASE; static void serial_init (const char *driver_cfg) { - static const char delimiters[] = ","; /* Twice the desired UART speed, to allow for .5 values. */ unsigned int uart_speed = 2 * UART_SPEED_DEFAULT; unsigned int divider; volatile int busy_wait_var; if (driver_cfg) - { + { char *cfg = strdupa (driver_cfg); - char *token = strtok (cfg, delimiters); + + char *token = cfg; + bool done = false; + while (*cfg && *cfg != ',' ) + cfg ++; + if (*cfg == 0) + done = true; + *cfg = 0; while (token) { @@ -101,7 +107,17 @@ serial_init (const char *driver_cfg) && new_speed > UART_SPEED_MIN && new_speed < UART_SPEED_MAX) uart_speed = new_speed; } - token = strtok (NULL, delimiters); + + if (done) + token = NULL; + else + { + while (*cfg && *cfg != ',' ) + cfg ++; + if (*cfg == 0) + done = true; + *cfg = 0; + } } } -- cgit v1.2.3