View | Details | Raw Unified | Return to bug 165471
Collapse All | Expand All

(-)b/usr.bin/grep/file.c (-5 / +10 lines)
Lines 219-230 grep_fgetln(struct file *f, size_t *lenp) Link Here
219
		if (bufrem == 0)
219
		if (bufrem == 0)
220
			/* EOF: return partial line */
220
			/* EOF: return partial line */
221
			break;
221
			break;
222
		if ((p = memchr(bufpos, '\n', bufrem)) == NULL)
222
		if ((p = memchr(bufpos, '\n', bufrem)) == NULL && filebehave != FILE_MMAP)
223
			continue;
223
			continue;
224
		/* got it: finish up the line (like code above) */
224
		if (p == NULL)
225
		++p;
225
			/* mmap EOF: return partial line, consume rest of buffer */
226
		diff = p - bufpos;
226
			diff = len;
227
		len += diff;
227
		else {
228
			/* got it: finish up the line (like code above) */
229
			++p;
230
			diff = p - bufpos;
231
			len += diff;
232
		}
228
		if (grep_lnbufgrow(len))
233
		if (grep_lnbufgrow(len))
229
		    goto error;
234
		    goto error;
230
		memcpy(lnbuf + off, bufpos, diff);
235
		memcpy(lnbuf + off, bufpos, diff);

Return to bug 165471