FreeCalypso > hg > freecalypso-hwlab
comparison simtool/dispatch.c @ 116:c8685074c845
fc-simtool command parser: fancier handling of quoted strings
| author | Mychaela Falconia <falcon@freecalypso.org> |
|---|---|
| date | Thu, 28 Jan 2021 03:14:32 +0000 |
| parents | 0dcd666292e4 |
| children | 06e2d5c60cbd |
comparison
equal
deleted
inserted
replaced
| 115:0dcd666292e4 | 116:c8685074c845 |
|---|---|
| 123 fprintf(stderr, "error: too many arguments\n"); | 123 fprintf(stderr, "error: too many arguments\n"); |
| 124 return(-1); | 124 return(-1); |
| 125 } | 125 } |
| 126 if (*cp == '"') { | 126 if (*cp == '"') { |
| 127 *ap++ = ++cp; | 127 *ap++ = ++cp; |
| 128 while (*cp && *cp != '"') | 128 for (;;) { |
| 129 cp++; | 129 if (!*cp) { |
| 130 if (*cp != '"') { | 130 unterm_qstring: fprintf(stderr, |
| 131 fprintf(stderr, | |
| 132 "error: unterminated quoted string\n"); | 131 "error: unterminated quoted string\n"); |
| 133 return(-1); | 132 return(-1); |
| 133 } | |
| 134 if (*cp == '"') | |
| 135 break; | |
| 136 if (*cp++ == '\\') { | |
| 137 if (!*cp) | |
| 138 goto unterm_qstring; | |
| 139 cp++; | |
| 140 } | |
| 134 } | 141 } |
| 135 *cp++ = '\0'; | 142 *cp++ = '\0'; |
| 136 } else { | 143 } else { |
| 137 *ap++ = cp; | 144 *ap++ = cp; |
| 138 while (*cp && !isspace(*cp)) | 145 while (*cp && !isspace(*cp)) |
