fix two bugs in ptx
authorJim Meyering <meyering@redhat.com>
Tue, 15 Jul 2008 06:30:38 +0000 (08:30 +0200)
committerJim Meyering <meyering@redhat.com>
Tue, 15 Jul 2008 06:30:38 +0000 (08:30 +0200)
* src/ptx.c (fix_output_parameters): Don't let before_max_width
go negative -- that would cause an infloop in define_all_fields.
(main): Don't clobber name[0] with lists of two or more input files.
* tests/misc/ptx: New file.  Test for the above.
* tests/Makefile.am (TESTS): Add misc/ptx.

src/ptx.c
tests/Makefile.am
tests/misc/ptx [new file with mode: 0755]

index 827d22e..c04c90c 100644 (file)
--- a/src/ptx.c
+++ b/src/ptx.c
@@ -1353,6 +1353,8 @@ fix_output_parameters (void)
         right side, or one on either side.  */
 
       before_max_width -= 2 * truncation_string_length;
+      if (before_max_width < 0)
+       before_max_width = 0;
       keyafter_max_width -= 2 * truncation_string_length;
     }
   else
@@ -2112,11 +2114,10 @@ main (int argc, char **argv)
 
       for (file_index = 0; file_index < number_input_files; file_index++)
        {
-         input_file_name[file_index] = argv[optind];
          if (!*argv[optind] || STREQ (argv[optind], "-"))
-           input_file_name[0] = NULL;
+           input_file_name[file_index] = NULL;
          else
-           input_file_name[0] = argv[optind];
+           input_file_name[file_index] = argv[optind];
          optind++;
        }
     }
index f7275f8..c2da630 100644 (file)
@@ -120,6 +120,7 @@ TESTS =                                             \
   chgrp/no-x                                   \
   chgrp/posix-H                                        \
   chgrp/recurse                                        \
+  misc/ptx                                     \
   misc/test                                    \
   misc/seq                                     \
   misc/head                                    \
diff --git a/tests/misc/ptx b/tests/misc/ptx
new file mode 100755 (executable)
index 0000000..cfc1544
--- /dev/null
@@ -0,0 +1,44 @@
+#!/usr/bin/perl
+
+# Copyright (C) 2008 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/>.
+
+use strict;
+
+my $prog = 'ptx';
+
+# Turn off localization of executable's output.
+@ENV{qw(LANGUAGE LANG LC_ALL)} = ('C') x 3;
+
+my @Tests =
+(
+["1tok", '-w10', {IN=>"bar\n"},     {OUT=>"        bar\n"}],
+["2tok", '-w10', {IN=>"foo bar\n"}, {OUT=>"     /   bar\n        foo/\n"}],
+
+# with coreutils-6.12 and earlier, this would infloop with -wN, N < 10
+["narrow", '-w2', {IN=>"qux\n"},    {OUT=>"      qux\n"}],
+["narrow-g", '-g1 -w2', {IN=>"ta\n"}, {OUT=>"  ta\n"}],
+
+# with coreutils-6.12 and earlier, this would act like "ptx F1 F1"
+["2files", '-g1 -w1', {IN=>{F1=>"a"}}, {IN=>{F2=>"b"}}, {OUT=>"  a\n  b\n"}],
+);
+
+@Tests = triple_test \@Tests;
+
+my $save_temps = $ENV{DEBUG};
+my $verbose = $ENV{VERBOSE};
+
+my $fail = run_tests ($prog, $prog, \@Tests, $save_temps, $verbose);
+exit $fail;