From e833dd12e607e9e5951a657d6e99f19adddefb7d Mon Sep 17 00:00:00 2001 From: Andre Noll Date: Thu, 2 Oct 2014 21:12:34 +0000 Subject: [PATCH] string.c: Simplify and improve for_each_line(). Much faster for large buffers. Idea: Search for zero byte only until next cr. --- string.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/string.c b/string.c index 453a61c1..d75dbac2 100644 --- a/string.c +++ b/string.c @@ -380,14 +380,13 @@ int for_each_line(unsigned flags, char *buf, size_t size, char *next_cr; next_cr = memchr(start, '\n', buf + size - start); - next_null = memchr(start, '\0', buf + size - start); + next_null = memchr(start, '\0', next_cr? + next_cr - start : buf + size - start); if (!next_cr && !next_null) break; - if (next_cr && next_null) { - end = next_cr < next_null? next_cr : next_null; - } else if (next_null) { + if (next_null) end = next_null; - } else + else end = next_cr; num_lines++; if (!(flags & FELF_DISCARD_FIRST) || start != buf) { -- 2.39.5