[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH] fix "grep -Ff" on CRLF-terminated files
From: |
Paolo Bonzini |
Subject: |
[PATCH] fix "grep -Ff" on CRLF-terminated files |
Date: |
Fri, 4 Dec 2009 13:53:47 +0100 |
This patch fixes bug #25085, I am pushing it.
* src/search.c (Fcompile) [HAVE_DOS_FILE_CONTENTS]: Recognize \r\n as
a line terminator.
---
src/search.c | 26 ++++++++++++++++++++------
1 files changed, 20 insertions(+), 6 deletions(-)
diff --git a/src/search.c b/src/search.c
index f4a9598..e4698ff 100644
--- a/src/search.c
+++ b/src/search.c
@@ -489,18 +489,32 @@ EXECUTE_FCT(EGexecute)
#if defined(GREP_PROGRAM) || defined(FGREP_PROGRAM)
COMPILE_FCT(Fcompile)
{
- char const *beg, *lim, *err;
+ char const *beg, *end, *lim, *err;
kwsinit ();
beg = pattern;
do
{
- for (lim = beg; lim < pattern + size && *lim != '\n'; ++lim)
- ;
- if ((err = kwsincr (kwset, beg, lim - beg)) != 0)
+ for (lim = beg;; ++lim)
+ {
+ end = lim;
+ if (lim >= pattern + size)
+ break;
+ if (*lim == '\n')
+ {
+ lim++;
+ break;
+ }
+#if HAVE_DOS_FILE_CONTENTS
+ if (*lim == '\r' && lim + 1 < pattern + size && lim[1] == '\n')
+ {
+ lim += 2;
+ break;
+ }
+#endif
+ }
+ if ((err = kwsincr (kwset, beg, end - beg)) != 0)
error (2, 0, err);
- if (lim < pattern + size)
- ++lim;
beg = lim;
}
while (beg < pattern + size);
--
1.6.5.2
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [PATCH] fix "grep -Ff" on CRLF-terminated files,
Paolo Bonzini <=