[Top][All Lists]
[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