From 1c281144c3f370d270d7dd1e0acc622c06922852 Mon Sep 17 00:00:00 2001 From: Ondrej Vasik Date: Fri, 31 Dec 2010 08:39:14 +0100 Subject: [PATCH] The suffix length was dependent on the number of bytes or lines per file (#666293) --- coreutils-8.8-split-suffix.patch | 98 ++++++++++++++++++++++++++++++++ coreutils.spec | 9 ++- 2 files changed, 106 insertions(+), 1 deletion(-) create mode 100644 coreutils-8.8-split-suffix.patch diff --git a/coreutils-8.8-split-suffix.patch b/coreutils-8.8-split-suffix.patch new file mode 100644 index 0000000..9301a91 --- /dev/null +++ b/coreutils-8.8-split-suffix.patch @@ -0,0 +1,98 @@ +From ec19e2a647cb64d4a5620787d4ecf5964d85fcf6 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?P=C3=A1draig=20Brady?= +Date: Thu, 30 Dec 2010 01:36:59 +0000 +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. +--- + src/split.c | 32 ++++++++++++++++++++------------ + tests/misc/split-a | 5 +++++ + 2 files changed, 25 insertions(+), 12 deletions(-) + +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 + diff --git a/coreutils.spec b/coreutils.spec index 03f1c44..bac4bda 100644 --- a/coreutils.spec +++ b/coreutils.spec @@ -1,7 +1,7 @@ Summary: A set of basic GNU tools commonly used in shell scripts Name: coreutils Version: 8.8 -Release: 1%{?dist} +Release: 2%{?dist} License: GPLv3+ Group: System Environment/Base Url: http://www.gnu.org/software/coreutils/ @@ -18,6 +18,8 @@ Source202: coreutils-su-l.pamd Source203: coreutils-runuser-l.pamd # From upstream +#The suffix length was dependent on the number of bytes or lines per file(#666293) +Patch1: coreutils-8.8-split-suffix.patch # Our patches #general patch to workaround koji build system issues @@ -115,6 +117,7 @@ Libraries for coreutils package. %setup -q # From upstream +%patch1 -p1 -b .splitsuffix # Our patches %patch100 -p1 -b .configure @@ -332,6 +335,10 @@ fi %{_libdir}/coreutils %changelog +* Fri Dec 31 2010 Ondrej Vasik - 8.8-2 +- The suffix length was dependent on the number of bytes + or lines per file (#666293) + * Thu Dec 23 2010 Ondrej Vasik - 8.8-1 - fix parallel sorting issue (#655096) - new upstream release coreutils-8.8 (#665164)