From 395fcee97a358fdfe2d6ca3bc2544cb008fd40f6 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Thu, 12 Apr 2007 00:21:25 +0200 Subject: 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. --- ChangeLog | 8 ++++++++ NEWS | 3 +++ src/split.c | 6 +++++- tests/misc/split-fail | 8 +++++++- 4 files changed, 23 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 5ebf3341e..c1f795a3a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2007-04-11 Paul Eggert + + 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 ls: don't form or compute the length of strings that won't be used. diff --git a/NEWS b/NEWS index c1e4bf9fb..c4678e7dd 100644 --- 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] diff --git a/src/split.c b/src/split.c index 2fc6ecfcf..207cc13b3 100644 --- a/src/split.c +++ b/src/split.c @@ -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; diff --git a/tests/misc/split-fail b/tests/misc/split-fail index 70435b453..8cdfe6478 100755 --- a/tests/misc/split-fail +++ b/tests/misc/split-fail @@ -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 -- cgit v1.2.3-54-g00ecf