bug-grep
[Top][All Lists]
Advanced

[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





reply via email to

[Prev in Thread] Current Thread [Next in Thread]