From 9ff16575d2838527afa635058c4cb95d641533ba Mon Sep 17 00:00:00 2001 From: simon qian Date: Mon, 18 Jan 2010 04:56:08 +0800 Subject: SVF: insert space before '(' and after ')' See http://forum.sparkfun.com/viewtopic.php?p=90983#90983 for discussion; basically, the SVF parser wrongly expects "TDI (123)" but the space is optional and it should accept "TDI(123)" too. In the same way, "TDI(123)TDO(456)" should work too. Rather than update the command parsing, this just makes sure the expected spaces are present. Signed-off-by: David Brownell --- src/svf/svf.c | 36 +++++++++++++++++++++++++++++------- 1 file changed, 29 insertions(+), 7 deletions(-) (limited to 'src/svf') diff --git a/src/svf/svf.c b/src/svf/svf.c index 7cb22007..275bced8 100644 --- a/src/svf/svf.c +++ b/src/svf/svf.c @@ -504,27 +504,49 @@ static int svf_read_command_from_file(int fd) default: if (!comment) { - if (cmd_pos >= svf_command_buffer_size - 1) + /* The parsing code currently expects a space + * before parentheses -- "TDI (123)". Also a + * space afterwards -- "TDI (123) TDO(456)". + * But such spaces are optional... instead of + * parser updates, cope with that by adding the + * spaces as needed. + * + * Ensure there are 3 bytes available, for: + * - current character + * - added space. + * - terminating NUL ('\0') + */ + if ((cmd_pos + 2) >= svf_command_buffer_size) { - tmp_buffer = (char*)malloc(svf_command_buffer_size + SVFP_CMD_INC_CNT); // 1 more byte for '\0' + /* REVISIT use realloc(); simpler */ + tmp_buffer = malloc( + svf_command_buffer_size + + SVFP_CMD_INC_CNT); if (NULL == tmp_buffer) { LOG_ERROR("not enough memory"); return ERROR_FAIL; } if (svf_command_buffer_size > 0) - { - memcpy(tmp_buffer, svf_command_buffer, svf_command_buffer_size); - } + memcpy(tmp_buffer, + svf_command_buffer, + svf_command_buffer_size); if (svf_command_buffer != NULL) - { free(svf_command_buffer); - } svf_command_buffer = tmp_buffer; svf_command_buffer_size += SVFP_CMD_INC_CNT; tmp_buffer = NULL; } + + /* insert a space before '(' */ + if ('(' == ch) + svf_command_buffer[cmd_pos++] = ' '; + svf_command_buffer[cmd_pos++] = (char)toupper(ch); + + /* insert a space after ')' */ + if (')' == ch) + svf_command_buffer[cmd_pos++] = ' '; } break; } -- cgit v1.2.3