Fix terminal line parsing for strings (to some extent)

This commit is contained in:
Stefan Rueger 2022-07-15 18:50:20 +01:00
parent 7ceb163cba
commit e7e062ec05
1 changed files with 6 additions and 3 deletions

View File

@ -136,9 +136,12 @@ static int nexttok(char * buf, char ** tok, char ** next)
n = q; n = q;
uint8_t quotes = 0; uint8_t quotes = 0;
while (*n && (!isspace(*n) || quotes)) { while (*n && (!isspace(*n) || quotes)) {
if (*n == '\"') // poor man's quote and escape processing
if (*n == '"' || *n == '\'')
quotes++; 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; break;
n++; n++;
} }
@ -787,7 +790,7 @@ static int cmd_write(PROGRAMMER * pgm, struct avrpart * p,
data.size = 4; 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] == '\"')) { if ((*argi == '\'' && argi[arglen-1] == '\'') || (*argi == '\"' && argi[arglen-1] == '\"')) {
char *s = calloc(arglen-1, 1); char *s = calloc(arglen-1, 1);
if (s == NULL) { if (s == NULL) {