bug-grep
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Testsuite summary for GNU grep 2.13 : FAIL: 1


From: Paul Eggert
Subject: Re: Testsuite summary for GNU grep 2.13 : FAIL: 1
Date: Mon, 19 Nov 2012 23:54:06 -0800
User-agent: Mozilla/5.0 (X11; Linux i686; rv:16.0) Gecko/20121028 Thunderbird/16.0.2

On 11/19/2012 09:16 PM, Dennis Clarke wrote:
> read(3, 0x100153764, 131072)                    Err#21 EISDIR

Thanks, that let me find the problem.  I pushed the following patch
into the grep master on savannah.  Dunno if it applies to grep 2.13
exactly, but the fix should appear in the next release.  It's a minor
bug so I wouldn't worry about it in the meantime.

>From a93b4736f3c732809db26f148721caf98d0b7211 Mon Sep 17 00:00:00 2001
From: Paul Eggert <address@hidden>
Date: Mon, 19 Nov 2012 23:50:40 -0800
Subject: [PATCH] grep: diagnose read errors from -f dir, porting to Solaris

Problem reported by Dennis Clarke for Solaris 10 in
<http://lists.gnu.org/archive/html/bug-grep/2012-11/msg00009.html>.
* src/main.c (main): For -f F, diagnose any read errors
encountered when reading F.
* tests/Makefile.am (XFAIL_TESTS): Remove grep-dir.
* tests/grep-dir: Don't assume that directories cannot be read
via fread, as POSIX allows this and it can happen on Solaris.
---
 src/main.c        |  7 +++++--
 tests/Makefile.am |  3 +--
 tests/grep-dir    | 24 ++++++++++++++++--------
 3 files changed, 22 insertions(+), 12 deletions(-)

diff --git a/src/main.c b/src/main.c
index 6750007..cadefd6 100644
--- a/src/main.c
+++ b/src/main.c
@@ -1860,6 +1860,7 @@ main (int argc, char **argv)
   size_t cc;
   int opt, status, prepended;
   int prev_optind, last_recursive;
+  int fread_errno;
   intmax_t default_context;
   FILE *fp;
   exit_failure = EXIT_TROUBLE;
@@ -2009,13 +2010,15 @@ main (int argc, char **argv)
           ;
         keys = xrealloc (keys, keyalloc);
         oldcc = keycc;
-        while (!feof (fp)
-               && (cc = fread (keys + keycc, 1, keyalloc - 1 - keycc, fp)) > 0)
+        while ((cc = fread (keys + keycc, 1, keyalloc - 1 - keycc, fp)) != 0)
           {
             keycc += cc;
             if (keycc == keyalloc - 1)
               keys = x2nrealloc (keys, &keyalloc, sizeof *keys);
           }
+        fread_errno = errno;
+        if (ferror (fp))
+          error (EXIT_TROUBLE, fread_errno, "%s", optarg);
         if (fp != stdin)
           fclose (fp);
         /* Append final newline if file ended in non-newline. */
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 2f99a69..7565840 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -24,8 +24,7 @@ LDADD = ../lib/libgreputils.a $(LIBINTL) ../lib/libgreputils.a
 
 # Remove this definition once the failing test passes.
 XFAIL_TESTS = \
-  word-delim-multibyte \
-  grep-dir
+  word-delim-multibyte
 
 # Equivalence classes are only supported when using the system
 # matcher (which means only with glibc).
diff --git a/tests/grep-dir b/tests/grep-dir
index e005525..de14d62 100755
--- a/tests/grep-dir
+++ b/tests/grep-dir
@@ -4,14 +4,22 @@
 
 mkdir a || framework_failure
 
-echo x | grep -f a/; { test $? -gt 1 && test $? -lt 128; } || fail=1
-echo x | grep -if a/; { test $? -gt 1 && test $? -lt 128; } || fail=1
-echo x | grep -Ff a/; { test $? -gt 1 && test $? -lt 128; } || fail=1
-echo x | grep -Fif a/; { test $? -gt 1 && test $? -lt 128; } || fail=1
+# Lower and upper bound of valid exit status for "grep -f DIR",
+# when reading from empty and nonempty files, respectively.
+if cat a >/dev/null 2>&1; then
+  l=1 u=1 L=0 U=1
+else
+  l=2 u=127 L=2 U=127
+fi
 
-grep -f a/ < /dev/null; { test $? -gt 1 && test $? -lt 128; } || fail=1
-grep -if a/ < /dev/null; { test $? -gt 1 && test $? -lt 128; } || fail=1
-grep -Ff a/ < /dev/null; { test $? -gt 1 && test $? -lt 128; } || fail=1
-grep -Fif a/ < /dev/null; { test $? -gt 1 && test $? -lt 128; } || fail=1
+echo x | grep -f a/; { test $? -ge $L && test $? -le $U; } || fail=1
+echo x | grep -if a/; { test $? -ge $L && test $? -le $U; } || fail=1
+echo x | grep -Ff a/; { test $? -ge $L && test $? -le $U; } || fail=1
+echo x | grep -Fif a/; { test $? -ge $L && test $? -le $U; } || fail=1
+
+grep -f a/ < /dev/null; { test $? -ge $l && test $? -le $u; } || fail=1
+grep -if a/ < /dev/null; { test $? -ge $l && test $? -le $u; } || fail=1
+grep -Ff a/ < /dev/null; { test $? -ge $l && test $? -le $u; } || fail=1
+grep -Fif a/ < /dev/null; { test $? -ge $l && test $? -le $u; } || fail=1
 
 Exit $fail
-- 
1.7.11.7





reply via email to

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