summaryrefslogtreecommitdiff
path: root/src/helper
diff options
context:
space:
mode:
authordrath <drath@b42882b7-edfa-0310-969c-e2dbd0fdcd60>2007-01-22 14:47:00 +0000
committerdrath <drath@b42882b7-edfa-0310-969c-e2dbd0fdcd60>2007-01-22 14:47:00 +0000
commit4fc97d3f2726efa147cfdb0c456eace51550e1e3 (patch)
treef6bbfc0aa3ceebdf723c23f84b3e764548c1add4 /src/helper
parentadaed4c1c776f0830387eb86c3d81f00f240be6e (diff)
downloadopenocd_libswd-4fc97d3f2726efa147cfdb0c456eace51550e1e3.tar.gz
openocd_libswd-4fc97d3f2726efa147cfdb0c456eace51550e1e3.tar.bz2
openocd_libswd-4fc97d3f2726efa147cfdb0c456eace51550e1e3.tar.xz
openocd_libswd-4fc97d3f2726efa147cfdb0c456eace51550e1e3.zip
- fix incorrect parsing of whitespace in command.c (thanks to Magnus Lundin)
- fix infinite recursion in target_init_handler (thanks to jw and Magnus Lundin) - fix CFI flash handlign with buswidth < 32bit (thanks to Daniele Orio for reporting this) - add support for reading JTAG device id (currently only as debug output on startup) - cleaned up handling of EmbeddedICE registers. Supported functionality and register size now determined by EmbeddedICE version number. - small cleanups/fixes git-svn-id: svn://svn.berlios.de/openocd/trunk@124 b42882b7-edfa-0310-969c-e2dbd0fdcd60
Diffstat (limited to 'src/helper')
-rw-r--r--src/helper/command.c25
1 files changed, 19 insertions, 6 deletions
diff --git a/src/helper/command.c b/src/helper/command.c
index ca08535a..dbf3f2aa 100644
--- a/src/helper/command.c
+++ b/src/helper/command.c
@@ -200,12 +200,23 @@ int parse_line(char *line, char *words[], int max_words)
/* we're inside a word or quote, and reached its end*/
if (word_start)
{
- int len = p - word_start;
-
- /* copy the word */
- memcpy(words[nwords] = malloc(len + 1), word_start, len);
- /* add terminating NUL */
- words[nwords++][len] = 0;
+ int len;
+ char *word_end=p;
+ /* This will handle extra whitespace within quotes */
+ while (isspace(*word_start)&&(word_start<word_end))
+ word_start++;
+ while (isspace(*(word_end-1))&&(word_start<word_end))
+ word_end--;
+
+ len = word_end - word_start;
+
+ if (len>0)
+ {
+ /* copy the word */
+ memcpy(words[nwords] = malloc(len + 1), word_start, len);
+ /* add terminating NUL */
+ words[nwords++][len] = 0;
+ }
}
/* we're done parsing the line */
@@ -215,6 +226,8 @@ int parse_line(char *line, char *words[], int max_words)
/* skip over trailing quote or whitespace*/
if (inquote || isspace(*p))
p++;
+ while (isspace(*p))
+ p++;
inquote = 0;
word_start = 0;