commit - a5845bb51f3d8897129c98344197970f402ec5be
commit + 31aa9f59f584734a946777192b4a2ba28f7fdb6c
blob - e000a06edf698c34c0f6e2d5139a551c9af038b8
blob + 7ad4add47961309bb1c37e54bb4b1ab70cf17e5e
--- parser.c
+++ parser.c
parser_foreach_line(struct parser *p, const char *buf, size_t size,
parsechunkfn fn)
{
- const char *b, *e;
- size_t l, len;
+ char *b, *e;
+ unsigned int ch;
+ size_t i, l, len;
- if (p->len == 0) {
- b = buf;
- len = size;
- } else {
- if (!parser_append(p, buf, size))
- return 0;
- b = p->buf;
- len = p->len;
+ if (!parser_append(p, buf, size))
+ return 0;
+ b = p->buf;
+ len = p->len;
+
+ /* drop every "funny" ASCII character */
+ for (i = 0; i < len; ) {
+ ch = b[i];
+ if ((ch >= ' ' || ch == '\n' || ch == '\t')
+ && ch != 127) { /* del */
+ ++i;
+ continue;
+ }
+ memmove(&b[i], &b[i+1], len - i);
+ len--;
}
while (len > 0) {