/* Include EOL in reply */
res.len ++;
}
- /* Set new begin of line */
- b = c + 1;
/* Call callback for a line */
if (d->read_callback) {
if (!d->read_callback (&res, d->user_data)) {
/* Drain buffer as policy is changed */
len = &d->in_buf->data->len;
pos = &d->in_buf->pos;
- memmove (d->in_buf->data->begin, b, c - b + 1);
- *len = c - b + 1;
- *pos = d->in_buf->data->begin + *len;
+ if (c != *pos) {
+ memmove (d->in_buf->data->begin, c + 1, *len - r - 1);
+ *len = *len -r - 1;
+ *pos = d->in_buf->data->begin + *len;
+ }
+ else {
+ *len = 0;
+ *pos = d->in_buf->data->begin;
+ }
debug_ip (d->peer_addr, "policy changed during callback, restart buffer's processing");
read_buffers (fd, d, TRUE);
return;
}
}
+ /* Set new begin of line */
+ b = c + 1;
}
r++;
c++;
r = snprintf (result, len, "%*s",
(int)(hostname->len - (dots[dots_num - 2] - hostname->begin + 1)),
dots[dots_num - 2] + 1);
- for (i = 0; i < dots_num; i ++) {
- msg_info ("dot: %d, data: %*s", i,
- (int)(hostname->len - (dots[i] - hostname->begin + 1)),
- dots[i] + 1);
-
- }
}
else {
r = snprintf (result, len, "%*s", (int)hostname->len, hostname->begin);