bug#7759: split(1) regression in v8.7-25-gbe10739

2010-12-30 Thread Pádraig Brady
On 30/12/10 11:15, Jim Meyering wrote:
 
 Hi Pádraig
 Thanks for the quick fix.
 Please include the bugzilla URL and credit Sergey and Dmitry
 in the commit log.  It'd be good to list Sergey's
 name/email in THANKS, too.

Done and pushed.

thanks,
Pádraig.





bug#7759: split(1) regression in v8.7-25-gbe10739

2010-12-30 Thread Jim Meyering
Pádraig Brady wrote:

 On 29/12/10 21:12, Dmitry V. Levin wrote:
 Hi,

 I've got a bug report from Sergey Vlasov about split(1) regression
 in coreutils v8.8: https://bugzilla.altlinux.org/24841

 In short, the default suffix length is not 2 as it shall be according to 
 POSIX.
 Looks like the regression is due to commit v8.7-25-gbe10739.
 For more details and the test case, please have a look at the bug report.

 Cringe :(

 The frustrating this is that I noticed this
 but dropped the fixup code when I was moving
 local git branches around.

 The attached should fix it.
...
 Subject: [PATCH] split: fix the suffix length calculation

 * src/split.c (set_suffix_length): Only auto calculate
 the suffix length when the number of files is specified.
 * tests/misc/split-a: Add a case to trigger the bug.
 * NEWS: Mention the fix.

Hi Pádraig
Thanks for the quick fix.
Please include the bugzilla URL and credit Sergey and Dmitry
in the commit log.  It'd be good to list Sergey's
name/email in THANKS, too.





bug#7759: split(1) regression in v8.7-25-gbe10739

2010-12-29 Thread Dmitry V. Levin
Hi,

I've got a bug report from Sergey Vlasov about split(1) regression
in coreutils v8.8: https://bugzilla.altlinux.org/24841

In short, the default suffix length is not 2 as it shall be according to POSIX.
Looks like the regression is due to commit v8.7-25-gbe10739.
For more details and the test case, please have a look at the bug report.


-- 
ldv


pgpju1xCZF5Ei.pgp
Description: PGP signature


bug#7759: split(1) regression in v8.7-25-gbe10739

2010-12-29 Thread Pádraig Brady
On 29/12/10 21:12, Dmitry V. Levin wrote:
 Hi,
 
 I've got a bug report from Sergey Vlasov about split(1) regression
 in coreutils v8.8: https://bugzilla.altlinux.org/24841
 
 In short, the default suffix length is not 2 as it shall be according to 
 POSIX.
 Looks like the regression is due to commit v8.7-25-gbe10739.
 For more details and the test case, please have a look at the bug report.

Cringe :(

The frustrating this is that I noticed this
but dropped the fixup code when I was moving
local git branches around.

The attached should fix it.

I'll log a fedora rawhide bug also.

cheers,
Pádraig.
From ec19e2a647cb64d4a5620787d4ecf5964d85fcf6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?P=C3=A1draig=20Brady?= p...@draigbrady.com
Date: Thu, 30 Dec 2010 01:36:59 +
Subject: [PATCH] split: fix the suffix length calculation

* src/split.c (set_suffix_length): Only auto calculate
the suffix length when the number of files is specified.
* tests/misc/split-a: Add a case to trigger the bug.
* NEWS: Mention the fix.
---
 NEWS   |6 ++
 src/split.c|   32 
 tests/misc/split-a |5 +
 3 files changed, 31 insertions(+), 12 deletions(-)

diff --git a/NEWS b/NEWS
index 401b2f5..88596b5 100644
--- a/NEWS
+++ b/NEWS
@@ -2,6 +2,12 @@ GNU coreutils NEWS-*- outline -*-
 
 * Noteworthy changes in release ?.? (-??-??) [?]
 
+** Bug fixes
+
+  split no longer creates files with a suffix length that
+  is dependent on the number of bytes or lines per file.
+  [bug introduced in coreutils-8.8]
+
 
 * Noteworthy changes in release 8.8 (2010-12-22) [stable]
 
diff --git a/src/split.c b/src/split.c
index ae98bc7..9e9efbf 100644
--- a/src/split.c
+++ b/src/split.c
@@ -78,6 +78,13 @@ static bool elide_empty_files;
input to output, which is much slower, so disabled by default.  */
 static bool unbuffered;
 
+/* The split mode to use.  */
+enum Split_type
+{
+  type_undef, type_bytes, type_byteslines, type_lines, type_digits,
+  type_chunk_bytes, type_chunk_lines, type_rr
+};
+
 /* For long options that have no equivalent short option, use a
non-character as a pseudo short option, starting with CHAR_MAX + 1.  */
 enum
@@ -105,16 +112,21 @@ static struct option const longopts[] =
 };
 
 static void
-set_suffix_length (uintmax_t n_units)
+set_suffix_length (uintmax_t n_units, enum Split_type split_type)
 {
 #define DEFAULT_SUFFIX_LENGTH 2
 
   size_t suffix_needed = 0;
-  size_t alphabet_len = strlen (suffix_alphabet);
-  bool alphabet_slop = (n_units % alphabet_len) != 0;
-  while (n_units /= alphabet_len)
-suffix_needed++;
-  suffix_needed += alphabet_slop;
+
+  if (split_type == type_chunk_bytes || split_type == type_chunk_lines
+  || split_type == type_rr)
+{
+  size_t alphabet_len = strlen (suffix_alphabet);
+  bool alphabet_slop = (n_units % alphabet_len) != 0;
+  while (n_units /= alphabet_len)
+suffix_needed++;
+  suffix_needed += alphabet_slop;
+}
 
   if (suffix_length)/* set by user */
 {
@@ -780,11 +792,7 @@ int
 main (int argc, char **argv)
 {
   struct stat stat_buf;
-  enum
-{
-  type_undef, type_bytes, type_byteslines, type_lines, type_digits,
-  type_chunk_bytes, type_chunk_lines, type_rr
-} split_type = type_undef;
+  enum Split_type split_type = type_undef;
   size_t in_blk_size = 0;	/* optimal block size of input file device */
   char *buf;			/* file i/o buffer */
   size_t page_size = getpagesize ();
@@ -984,7 +992,7 @@ main (int argc, char **argv)
   usage (EXIT_FAILURE);
 }
 
-  set_suffix_length (n_units);
+  set_suffix_length (n_units, split_type);
 
   /* Get out the filename arguments.  */
 
diff --git a/tests/misc/split-a b/tests/misc/split-a
index d861b92..b0526bc 100755
--- a/tests/misc/split-a
+++ b/tests/misc/split-a
@@ -63,4 +63,9 @@ for f in $files; do
   n=$(expr $n + 1)
 done
 
+# Ensure that -a is independent of -[bCl]
+split -a2 -b1000  /dev/null || fail=1
+split -a2 -l1000  /dev/null || fail=1
+split -a2 -C1000  /dev/null || fail=1
+
 Exit $fail
-- 
1.7.3.4