split --line-bytes=N (-C N): don't create an empty file.
authorPaul Eggert <eggert@cs.ucla.edu>
Wed, 11 Apr 2007 22:21:25 +0000 (00:21 +0200)
committerJim Meyering <jim@meyering.net>
Wed, 11 Apr 2007 22:21:25 +0000 (00:21 +0200)
* src/split.c (line_bytes_split): Don't create an empty line
afterwards if the last buffer happens to be exactly full.
* tests/misc/split-fail: Add a test case for this.
* NEWS: mention this.

ChangeLog
NEWS
src/split.c
tests/misc/split-fail

index 5ebf334..c1f795a 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2007-04-11  Paul Eggert  <eggert@cs.ucla.edu>
+
+       split --line-bytes=N (-C N): don't create an empty file.
+       * src/split.c (line_bytes_split): Don't create an empty line
+       afterwards if the last buffer happens to be exactly full.
+       * tests/misc/split-fail: Add a test case for this.
+       * NEWS: mention this.
+
 2007-04-10  Jim Meyering  <jim@meyering.net>
 
        ls: don't form or compute the length of strings that won't be used.
diff --git a/NEWS b/NEWS
index c1e4bf9..c4678e7 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -15,6 +15,9 @@ GNU coreutils NEWS                                    -*- outline -*-
   ln=target attribute) would mistakenly output the string "target"
   before the name of each symlink.  [introduced in coreutils-6.0]
 
+  split --line-bytes=N (-C N) no longer creates an empty file
+  [this bug is present at least as far back as textutils-1.22 (Jan, 1997)]
+
 
 * Noteworthy changes in release 6.9 (2007-03-22) [stable]
 
index 2fc6ecf..207cc13 100644 (file)
@@ -336,7 +336,11 @@ line_bytes_split (size_t n_bytes)
 
       n_buffered += n_read;
       if (n_buffered != n_bytes)
-       eof = true;
+       {
+         if (n_buffered == 0)
+           break;
+         eof = true;
+       }
 
       /* Find where to end this chunk.  */
       bp = buf + n_buffered;
index 70435b4..8cdfe64 100755 (executable)
@@ -1,7 +1,7 @@
 #!/bin/sh
 # split must fail when given length/count of zero.
 
-# Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+# Copyright (C) 2003, 2004, 2005, 2006, 2007 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
@@ -47,6 +47,12 @@ split -b 0 in 2> /dev/null && fail=1
 split -C 0 in 2> /dev/null && fail=1
 split -l 0 in 2> /dev/null && fail=1
 
+# Make sure -C doesn't create empty files.
+rm -f x?? || fail=1
+echo x | split -C 1 || fail=1
+test -f xaa && test -f xab || fail=1
+test -f xac && fail=1
+
 # Make sure that the obsolete -N notation still works
 split -1 in 2> /dev/null || fail=1