From e7e062ec053636840ef0c757ecc4cddb627ad4d9 Mon Sep 17 00:00:00 2001 From: Stefan Rueger Date: Fri, 15 Jul 2022 18:50:20 +0100 Subject: [PATCH] Fix terminal line parsing for strings (to some extent) --- src/term.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/term.c b/src/term.c index e779f84a..f02f95c5 100644 --- a/src/term.c +++ b/src/term.c @@ -136,9 +136,12 @@ static int nexttok(char * buf, char ** tok, char ** next) n = q; uint8_t quotes = 0; while (*n && (!isspace(*n) || quotes)) { - if (*n == '\"') + // poor man's quote and escape processing + if (*n == '"' || *n == '\'') quotes++; - else if (isspace(*n) && *(n-1) == '\"') + else if(*n == '\\' && n[1]) + n++; + else if (isspace(*n) && (n > q+1) && (n[-1] == '"' || n[-1] == '\'')) break; n++; } @@ -787,7 +790,7 @@ static int cmd_write(PROGRAMMER * pgm, struct avrpart * p, data.size = 4; } - if(!data.size) { // Try C-style string or single character + if(!data.size && arglen > 1) { // Try C-style string or single character if ((*argi == '\'' && argi[arglen-1] == '\'') || (*argi == '\"' && argi[arglen-1] == '\"')) { char *s = calloc(arglen-1, 1); if (s == NULL) {