commit 3ae65dc9a1c78c3088a08091f5d948fbbb8929af Author: Jakub Jelen Date: Tue Feb 23 17:28:15 2016 +0100 tcp_wrappers-7.6-xgets.patch diff --git a/misc.c b/misc.c index b248a5d..204546c 100644 --- a/misc.c +++ b/misc.c @@ -35,20 +35,32 @@ FILE *fp; { int got; char *start = ptr; + int c, last; - while (fgets(ptr, len, fp)) { + while (len && fgets(ptr, len, fp)) { got = strlen(ptr); if (got >= 1 && ptr[got - 1] == '\n') { tcpd_context.line++; if (got >= 2 && ptr[got - 2] == '\\') { - got -= 2; + got -= 2; } else { - return (start); + return (start); } + ptr += got; + len -= got; + ptr[0] = 0; + } else { + /* over buffer len */ + last = (got >= 1) ? ptr[got - 1] : '\0'; + while ((c = fgetc(fp)) != EOF) { + if (c == '\n') { + tcpd_context.line++; + if (last != '\\') + return (start); + } + last = c; + } } - ptr += got; - len -= got; - ptr[0] = 0; } return (ptr > start ? start : 0); }