Added escaping escape characters
This commit is contained in:
18
src/parse.c
18
src/parse.c
@@ -104,8 +104,7 @@ static int writefile(struct expandfile *file, FILE *out) {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case AUTOESCAPE_CHAR:
|
case AUTOESCAPE_CHAR:
|
||||||
for (++i; data->data[i] != ESCAPE_CHAR &&
|
for (++i; i < data->len; ++i) {
|
||||||
i < data->len; ++i) {
|
|
||||||
switch (data->data[i]) {
|
switch (data->data[i]) {
|
||||||
case '&':
|
case '&':
|
||||||
fputs("&", out);
|
fputs("&", out);
|
||||||
@@ -118,16 +117,27 @@ static int writefile(struct expandfile *file, FILE *out) {
|
|||||||
case '>':
|
case '>':
|
||||||
fputs(">", out);
|
fputs(">", out);
|
||||||
break;
|
break;
|
||||||
|
case ESCAPE_CHAR:
|
||||||
|
if (data->data[i + 1] != ESCAPE_CHAR)
|
||||||
|
goto autoescapeend;
|
||||||
|
++i;
|
||||||
|
/* fallthrough */
|
||||||
default:
|
default:
|
||||||
fputc(data->data[i], out);
|
fputc(data->data[i], out);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
autoescapeend:
|
||||||
break;
|
break;
|
||||||
case NOMINIFY_CHAR:
|
case NOMINIFY_CHAR:
|
||||||
for (++i; data->data[i] != ESCAPE_CHAR &&
|
for (++i; data->data[i] != ESCAPE_CHAR && i < data->len; ++i) {
|
||||||
i < data->len; ++i)
|
if (data->data[i] == ESCAPE_CHAR) {
|
||||||
|
if (data->data[i + 1] != ESCAPE_CHAR)
|
||||||
|
break;
|
||||||
|
++i;
|
||||||
|
}
|
||||||
fputc(data->data[i], out);
|
fputc(data->data[i], out);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user