* src/fmt.c (copy_rest): Correct prefix handling.
authorG.P. Halkes <buscom@ghalkes.nl>
Sat, 6 Jan 2007 08:49:47 +0000 (09:49 +0100)
committerJim Meyering <jim@meyering.net>
Sat, 6 Jan 2007 08:49:47 +0000 (09:49 +0100)
Don't elide a line with the prefix followed by only white space.
(get_line): Move EOF-check to loop-termination condition.
* tests/fmt/basic (pfx-1): Adjust test to expect desired result.
(pfx-2): Remove test; its premise was contrary to the documentation.

ChangeLog
src/fmt.c
tests/fmt/basic

index 9c4eb97..7fcccc1 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2007-01-06  G.P. Halkes  <buscom@ghalkes.nl>
+
+       * src/fmt.c (copy_rest): Correct prefix handling.
+       Don't elide a line with the prefix followed by only white space.
+       (get_line): Move EOF-check to loop-termination condition.
+       * tests/fmt/basic (pfx-1): Adjust test to expect desired result.
+       (pfx-2): Remove test; its premise was contrary to the documentation.
+
 2007-01-05  Jim Meyering  <jim@meyering.net>
 
        Avoid a used-uninitialized bug for invalid input, i.e., when the size
index 9a6c1c0..5ccc8c4 100644 (file)
--- a/src/fmt.c
+++ b/src/fmt.c
@@ -607,12 +607,15 @@ copy_rest (FILE *f, int c)
   const char *s;
 
   out_column = 0;
-  if (in_column > next_prefix_indent && c != '\n' && c != EOF)
+  if (in_column > next_prefix_indent || (c != '\n' && c != EOF))
     {
       put_space (next_prefix_indent);
       for (s = prefix; out_column != in_column && *s; out_column++)
        putchar (*s++);
-      put_space (in_column - out_column);
+      if (c != EOF && c != '\n')
+       put_space (in_column - out_column);
+      if (c == EOF && in_column >= next_prefix_indent + prefix_length)
+       putchar ('\n');
     }
   while (c != '\n' && c != EOF)
     {
@@ -688,10 +691,8 @@ get_line (FILE *f, int c)
          flush_paragraph ();
        }
       word_limit++;
-      if (c == EOF)
-       return EOF;
     }
-  while (c != '\n');
+  while (c != '\n' && c != EOF);
   return get_prefix (f);
 }
 
index 77682f1..04938b8 100755 (executable)
@@ -2,7 +2,7 @@
 # -*- perl -*-
 # Basic tests for "fmt".
 
-# Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006 Free Software
+# Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software
 # Foundation, Inc.
 
 # This program is free software; you can redistribute it and/or modify
@@ -60,23 +60,11 @@ my @Tests =
        . " is the first\noption; use -w N instead\n"
        . "Try `fmt --help' for more information.\n" }, {EXIT => 1}],
 
-     # With --prefix=P, Do not remove leading on lines without the prefix.
+     # With --prefix=P, do not remove leading space on lines without the prefix.
      ['pfx-1', qw (-p '>'),
       {IN=>  " 1\n  2\n\t3\n\t\t4\n> quoted\n> text\n"},
-      # This is the buggy output (leading white space removed),
-      # from coreutils-5.93.
-      {OUT=> "1\n2\n3\n4\n> quoted text\n"}],
-      # FIXME: this is the desired output
-      # {OUT=> " 1\n  2\n\t3\n\t\t4\n> quoted text\n"}],
-
-     # Like the above, but when two adjacent, non-prefixed lines have
-     # the same indentation, ensure that they are formatted.
-     ['pfx-2', qw (-p '>'),
-      {IN=>  " 1\n 2\n\t3\n\t4\n"},
-      {OUT=> "1\n2\n3\n4\n"}],
-      # FIXME: this is the desired output
-      # {OUT=> " 1 2\n\t3 4\n"}],
-    );
+      {OUT=> " 1\n  2\n\t3\n\t\t4\n> quoted text\n"}],
+);
 
 my $save_temps = $ENV{DEBUG};
 my $verbose = $ENV{VERBOSE};