bug-idutils
[Top][All Lists]
Advanced

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

Re: [bug-idutils] [Bug report] The range specification of the -F option


From: Jim Meyering
Subject: Re: [bug-idutils] [Bug report] The range specification of the -F option of lid(1) is not correctly interpreted.
Date: Mon, 23 May 2011 22:01:01 +0200

Shigio YAMAGUCHI wrote:
> I believe I have found a bug of lid command.
>
> The range specification of the -F option of lid(1) is not correctly 
> interpreted.
>
> 1. Situation of the trouble
> ---------------------------
>
> % cat frequency.txt
> one
> two two
> three three three
> four four four four
> % mkid frequency.txt
> % lid -F '2..'
> two            frequency.txt          <= It seems 2. It should be >= 2
> % lid -F '..2'
> one            frequency.txt          <= It seems 1. It should be <= 2
>
> 2. Correction of the trouble
> ----------------------------
>
> o Fixed version
>
> % lid -F '2..'
> four           frequency.txt
> three          frequency.txt
> two            frequency.txt
> % lid -F '..2'
> one            frequency.txt
> two            frequency.txt
>
> Here is the patch.
> Thank you for your great tool.
...

Thank you for the fine bug report.
I've converted your examples into a test suite addition,
added a commit log and a NEWS entry.

Your patch is small enough not to require copyright assignment.
I'll push these changes tomorrow.

>From dd94789c52aa0712953beb7e92a76d5b128b0c5e Mon Sep 17 00:00:00 2001
From: Shigio YAMAGUCHI <address@hidden>
Date: Mon, 23 May 2011 21:39:20 +0200
Subject: [PATCH 1/2] lid -F RANGE: fix a bug in handling open-ended ranges

* src/lid.c (parse_frequency_arg): lid -F 2.. would mistakenly
act like "lid -F 2" and "lid -F ..2" would act like "lid F 1"
---
 src/lid.c |   11 ++++++++---
 1 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/src/lid.c b/src/lid.c
index ed5d788..942a6f8 100644
--- a/src/lid.c
+++ b/src/lid.c
@@ -1111,6 +1111,8 @@ query_literal_substring (char const *arg, report_func_t 
report_func)
 static void
 parse_frequency_arg (char const *arg)
 {
+  int range = 0;
+
   if (strnequ (arg, "..", 2))
     frequency_low = 1;
   else
@@ -1118,12 +1120,15 @@ parse_frequency_arg (char const *arg)
       frequency_low = atoi (arg);
       while (isdigit (*arg))
        arg++;
-      if (strnequ (arg, "..", 2))
-       arg += 2;
+    }
+  if (strnequ (arg, "..", 2))
+    {
+      range = 1;
+      arg += 2;
     }
   if (*arg)
     frequency_high = atoi (arg);
-  else if (strnequ (&arg[-1], "..", 2))
+  else if (range)
     frequency_high = USHRT_MAX;
   else
     frequency_high = frequency_low;
--
1.7.5.2.1.g56b30


>From bcbcccb62d8c6e15a288ce24e8d7353375034033 Mon Sep 17 00:00:00 2001
From: Jim Meyering <address@hidden>
Date: Mon, 23 May 2011 20:19:53 +0200
Subject: [PATCH 2/2] tests: add tests for the lid -F ..N bug

* testsuite/lid-range: New file with tests based on a report by Shigio
YAMAGUCHI in http://thread.gmane.org/gmane.comp.gnu.idutils.bugs/137
* testsuite/Makefile.am (TESTS): Add it.
* NEWS (Bug fixes): Mention the bug fix.
---
 NEWS                  |    4 ++++
 testsuite/Makefile.am |    3 ++-
 testsuite/lid-range   |   47 +++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 53 insertions(+), 1 deletions(-)
 create mode 100755 testsuite/lid-range

diff --git a/NEWS b/NEWS
index 251b296..e166d4c 100644
--- a/NEWS
+++ b/NEWS
@@ -2,6 +2,10 @@ GNU idutils NEWS                                      -*- 
outline -*-

 * Noteworthy changes in release ?.? (????-??-??) [?]

+** Bug fixes
+
+  lid -L no longer mishandles open-ended ranges like "..2" and "2.."
+

 * Noteworthy changes in release 4.5 (2010-06-17) [stable]

diff --git a/testsuite/Makefile.am b/testsuite/Makefile.am
index 3bb2bae..a31ce49 100644
--- a/testsuite/Makefile.am
+++ b/testsuite/Makefile.am
@@ -4,7 +4,8 @@ TESTS =                 \
   consistency          \
   files0-from          \
   help-version         \
-  infloop-kawa-el
+  infloop-kawa-el      \
+  lid-range

 EXTRA_DIST =                   \
   $(TESTS)                     \
diff --git a/testsuite/lid-range b/testsuite/lid-range
new file mode 100755
index 0000000..783ba26
--- /dev/null
+++ b/testsuite/lid-range
@@ -0,0 +1,47 @@
+#!/bin/sh
+# Demonstrate how lid's open-ended ranges work
+
+# Copyright (C) 2011 Free Software Foundation, Inc.
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../src
+
+cat <<\EOF > in.txt || framework_failure_
+one
+two two
+three three three
+four four four four
+EOF
+
+echo '*.txt text' > map || framework_failure_
+
+mkid -m map || framework_failure_
+
+cat <<\EOF > exp || framework_failure_
+one            in.txt
+two            in.txt
+EOF
+lid -F ..2 > out || fail=1
+compare out exp || fail=1
+
+cat <<\EOF > exp || framework_failure_
+four           in.txt
+three          in.txt
+two            in.txt
+EOF
+lid -F 2.. > out || fail=1
+compare out exp || fail=1
+
+Exit $fail
--
1.7.5.2.1.g56b30



reply via email to

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