platform/upstream/coreutils.git
13 years agojoin: don't report disorder against an empty file
Pádraig Brady [Thu, 27 Jan 2011 07:17:16 +0000 (07:17 +0000)]
join: don't report disorder against an empty file

This allows one to use join as a field extractor like:
  join -a1 -o 1.3,1.1 - /dev/null

* src/join.c (join): Don't flag unpairable lines when
one of the files is empty.
* tests/misc/join: Add a new test for empty input, and adjust
a previous test that was only checking against empty input.
* doc/coreutils.texi (join invocation): Document the change.
* NEWS: Likewise.

13 years agojoin: ensure --header skips the order check with empty files
Pádraig Brady [Fri, 14 Jan 2011 08:46:21 +0000 (08:46 +0000)]
join: ensure --header skips the order check with empty files

* src/join.c: Skip the header even if one of the files is empty.
* tests/misc/join: Add a test case.
* NEWS: Mention the fix

13 years agojoin: add -o 'auto' to output a constant number of fields per line
Pádraig Brady [Wed, 5 Jan 2011 11:52:54 +0000 (11:52 +0000)]
join: add -o 'auto' to output a constant number of fields per line

Lines with a different number of fields than the first line,
will be truncated or padded.

* src/join.c (prfields): A new function refactored from prjoin(),
to output all but the join field.
(prjoin): Don't swap line1 and line2 when line1 is blank
so that the padding is applied to the right place.
(main): Handle the -o 'auto' option.
* tests/misc/join: Add 6 new cases to test the auto format.
* NEWS: Mention the change in behavior.
Suggestion from Assaf Gordon

13 years agotests: remove obsolete uses of "$$" in temporary file names
Jim Meyering [Fri, 28 Jan 2011 18:23:21 +0000 (19:23 +0100)]
tests: remove obsolete uses of "$$" in temporary file names

Those were useful when tests might have been run in the same
directory and in parallel.  Now, each test is run in a newly-
created empty directory.
* tests/cp/backup-1: Remove obsolete uses of "$$".
* tests/cp/same-file: Likewise.
* tests/dd/misc: Likewise.
* tests/mv/part-symlink: Likewise.
* tests/mv/to-symlink: Likewise.
* tests/touch/fail-diag: Likewise.

13 years agotests: don't hide all trace of the vc_exe_in_TESTS test
Jim Meyering [Tue, 25 Jan 2011 13:29:07 +0000 (14:29 +0100)]
tests: don't hide all trace of the vc_exe_in_TESTS test

There was a non-negligible delay after running a single test.
Now, you'll know why when you see this test's name.
* tests/check.mk (vc_exe_in_TESTS): Don't @-hide commands.
Use $(AM_V_GEN) instead.

13 years agotests: minor correction
Andreas Schwab [Tue, 25 Jan 2011 17:29:07 +0000 (18:29 +0100)]
tests: minor correction

* tests/du/move-dir-while-traversing: Ignoring SIGTSTP is enough;
don't also attempt to ignore SIGSTOP, it cannot be handled or ignored.
Spotted by Andreas Schwab.

13 years agotests: avoid FP failure due to suspension
Jim Meyering [Tue, 25 Jan 2011 11:36:22 +0000 (12:36 +0100)]
tests: avoid FP failure due to suspension

* tests/du/move-dir-while-traversing: Prohibit suspension,
to avoid false-positive failure.

13 years agotests: avoid rare FP failure in new du test
Jim Meyering [Tue, 25 Jan 2011 10:09:27 +0000 (11:09 +0100)]
tests: avoid rare FP failure in new du test

* tests/du/move-dir-while-traversing: Create an even larger tree
to avoid a false-positive failure due to du terminating before
the rename is triggered.

13 years agosplit: avoid a new, spurious warning from gcc-4.6.0
Jim Meyering [Mon, 24 Jan 2011 08:38:40 +0000 (09:38 +0100)]
split: avoid a new, spurious warning from gcc-4.6.0

* src/split.c (lines_rr) [IF_LINT]: Initialize files, now that
rawhide's gcc-4.6.0 would otherwise warn about use-uninitialized.

13 years agotail: avoid new diagnostic when applying -f to a pipe on linux-2.3.38
Jim Meyering [Mon, 24 Jan 2011 08:37:10 +0000 (09:37 +0100)]
tail: avoid new diagnostic when applying -f to a pipe on linux-2.3.38

* src/tail.c (fremote): Do not print a diagnostic when
fstatfs (pipe_FD, &buf) fails, as it now does on linux-2.3.38.
This avoids the spurious failure of tests/misc/tail's f-pipe-1
test, when running in input-from-pipe mode.

13 years agodoc: fix wording in warning about potential conflict with built-in
Jim Meyering [Fri, 21 Jan 2011 13:02:27 +0000 (14:02 +0100)]
doc: fix wording in warning about potential conflict with built-in

* doc/coreutils.texi (mayConflictWithShellBuiltIn): Fix wording.

13 years agomanual: document floating point better
Paul Eggert [Fri, 21 Jan 2011 18:59:32 +0000 (10:59 -0800)]
manual: document floating point better

* doc/coreutils.texi (Floating point): New section.
(od invocation, tail invocation, sort invocation, printf invocation):
(sleep invocation, seq invocation): Refer and defer to it.  See
<http://lists.gnu.org/archive/html/bug-coreutils/2011-01/msg00031.html>.

13 years agobuild: update gnulib submodule to latest
Jim Meyering [Thu, 20 Jan 2011 09:50:11 +0000 (10:50 +0100)]
build: update gnulib submodule to latest

The previous gnulib submodule reference was *still* to a
non-public commit.  My submodule had a stray commit, so
the reference was always to a local merge commit.
Reported by Rob Vermaas.

13 years agobuild: update gnulib submodule to latest
Jim Meyering [Thu, 20 Jan 2011 09:00:42 +0000 (10:00 +0100)]
build: update gnulib submodule to latest

The previous gnulib submodule reference was to a non-public commit.
Reported by Rob Vermaas.

13 years agomaint: use slightly more efficient process in README-release
Jim Meyering [Tue, 4 Jan 2011 11:47:24 +0000 (12:47 +0100)]
maint: use slightly more efficient process in README-release

* README-release: Run cheaper root-only tests first.
Use half of processing units (not just 1) for the expensive tests.

13 years agotests: avoid FP failure in new du test
Jim Meyering [Tue, 18 Jan 2011 21:32:33 +0000 (22:32 +0100)]
tests: avoid FP failure in new du test

* tests/du/move-dir-while-traversing: Create a larger tree to
avoid a false-positive failure due to du terminating before
the rename is triggered.

13 years agobuild: update gnulib submodule to latest
Jim Meyering [Tue, 18 Jan 2011 20:07:57 +0000 (21:07 +0100)]
build: update gnulib submodule to latest

13 years agodoc: update NEWS
Jim Meyering [Tue, 18 Jan 2011 08:45:00 +0000 (09:45 +0100)]
doc: update NEWS

* NEWS: Note when the uniq bug was introduced.
It was mine, commit 1d9b3de9, "uniq: remove redundant test".

13 years agodoc: show how to shred more efficiently
Jim Meyering [Mon, 17 Jan 2011 10:32:35 +0000 (11:32 +0100)]
doc: show how to shred more efficiently

* doc/coreutils.texi (shred invocation): Give an example showing how
to invoke shred in single-pass mode, and warn that -n0 --zero may
be inadequate.

13 years agouniq: replace a wasteful loop with simple calculation
Jim Meyering [Mon, 17 Jan 2011 11:36:58 +0000 (12:36 +0100)]
uniq: replace a wasteful loop with simple calculation

* src/uniq.c (find_field): Remove the byte-skipping loop altogether.
Instead, perform the simple calculation.  This results in a 10%
performance improvement for large byte offsets.

13 years agotests: add a test for today's uniq bug
Jim Meyering [Mon, 17 Jan 2011 11:27:55 +0000 (12:27 +0100)]
tests: add a test for today's uniq bug

* tests/misc/uniq-perf: New file.
* tests/Makefile.am (TESTS): Add it.

13 years agouniq: don't continue field processing after end of line
Sami Kerola [Sun, 16 Jan 2011 23:27:06 +0000 (00:27 +0100)]
uniq: don't continue field processing after end of line

* NEWS (Bug fixes): Mention it.
* src/uniq.c (find_field): Stop processing loop when end of line
is reached.  Before this fix, 'uniq -f 10000000000 /etc/passwd'
would run for a very long time.

13 years agodoc: specify how tr, echo, printf treat octal numbers
Ondřej Vašík [Fri, 14 Jan 2011 15:38:57 +0000 (16:38 +0100)]
doc: specify how tr, echo, printf treat octal numbers

* doc/coreutils.texi (tr's Character sets): Document how a 9-bit
octal value is interpreted.  tr does not ignore the ninth bit.
(echo invocation, printf invocation): Document that any ninth
bit in \OOO is ignored. (http://debbugs.gnu.org/7574)

13 years agomaint: refactor to use read-file from gnulib
Pádraig Brady [Tue, 11 Jan 2011 19:30:28 +0000 (19:30 +0000)]
maint: refactor to use read-file from gnulib

* bootstrap.conf: Add the read-file module
* src/ptx.c: Replace the original code which would
needlessly read SIZE_MAX bytes of files larger than this.
* src/shuf.c: Replace the original code.

13 years agomaint: trivial system header file cleanups
Pádraig Brady [Thu, 13 Jan 2011 09:36:38 +0000 (09:36 +0000)]
maint: trivial system header file cleanups

* src/system.h: Note where it should be included, and
make ordering check portable to GLIBC > 2
* src/copy.c: Move <sys/ioctl.h> along with other system headers
as is done elsewhere.
* src/install.c: Move <sys/wait.h> along with other system headers
as is done elsewhere.
* src/ptx.c: Include <regex.h> rather than "regex.h" as
is done elsewhere.  Note <regex.h> is kept after "system.h"
as per commit dba300a0.

13 years agodoc: clean up HACKING guidelines
Jim Meyering [Wed, 12 Jan 2011 20:20:34 +0000 (21:20 +0100)]
doc: clean up HACKING guidelines

* HACKING: Remove mention of "indent-tabs-mode: nil", since
we've remove all of those directives.  No longer needed.
Remove dated (pre-emacs-23) reference regarding WhiteSpace mode.

13 years agognulib: Also use dtoastr and ldtoastr modules.
Paul Eggert [Wed, 12 Jan 2011 02:07:15 +0000 (18:07 -0800)]
gnulib: Also use dtoastr and ldtoastr modules.
This adjusts to the recent splitting of the ftoastr module into 3
<http://lists.gnu.org/archive/html/bug-gnulib/2011-01/msg00199.html>.
* bootstrap.conf (gnulib_modules): Add dtoastr, ldtoastr,
as coreutils needs all 3 modules now.

13 years agobuild: update gnulib submodule to latest
Paul Eggert [Wed, 12 Jan 2011 01:52:40 +0000 (17:52 -0800)]
build: update gnulib submodule to latest

13 years agorm: ignore errno related to invalid file names
Nadav Har'El [Tue, 11 Jan 2011 14:53:07 +0000 (07:53 -0700)]
rm: ignore errno related to invalid file names

* src/remove.c (nonexistent_file_errno): Also skip EINVAL and
EILSEQ, for at least smbfs rejection of '*' in file names.
* NEWS: Mention the fix.

13 years agobuild: update gnulib submodule to latest
Jim Meyering [Mon, 10 Jan 2011 06:59:00 +0000 (07:59 +0100)]
build: update gnulib submodule to latest

13 years agodu: don't abort when a subdir is renamed during traversal
Jim Meyering [Sat, 8 Jan 2011 16:44:55 +0000 (17:44 +0100)]
du: don't abort when a subdir is renamed during traversal

* NEWS (Bug fixes): Mention it.
* src/du.c (prev_level): Move declaration "up" to file-scope global.
(du_files): Reset prev_level to 0 upon abnormal fts_read termination.
Reported by Johathan Nieder in http://bugs.debian.org/609049
Also, improve a diagnostic.
* tests/du/move-dir-while-traversing: Test for the above.
* tests/Makefile.am (TESTS): Add it.

13 years agomaint: suppress some clang scan-build warnings
Pádraig Brady [Sat, 18 Dec 2010 23:06:10 +0000 (23:06 +0000)]
maint: suppress some clang scan-build warnings

* src/pr.c (char_to_clump): Remove a dead store.
* src/remove.c (fts_skip_tree): Likewise.
* src/sort.c (key_warnings): Likewise.
(sort): Suppress an uninitialized pointer warning.

13 years agomaint: replace uses of ignore_ptr with ignore_value
Pádraig Brady [Wed, 5 Jan 2011 12:01:14 +0000 (12:01 +0000)]
maint: replace uses of ignore_ptr with ignore_value

* gnulib: Update for enhanced ignore_value()
* src/chcon.c (process_file): Don't use the deprecated ignore_ptr.
* src/chmod.c (process_file): Likewise.
* src/chown-core.c (change_file_owner): Likewise.

13 years agopost-release administrivia
Jim Meyering [Tue, 4 Jan 2011 11:56:30 +0000 (12:56 +0100)]
post-release administrivia

* NEWS: Add header line for next release.
* .prev-version: Record previous version.
* cfg.mk (old_NEWS_hash): Auto-update.

13 years agoversion 8.9 v8.9
Jim Meyering [Tue, 4 Jan 2011 11:18:32 +0000 (12:18 +0100)]
version 8.9

* NEWS: Record release date.

13 years agobuild: update gnulib to latest; portability fixes
Jim Meyering [Tue, 4 Jan 2011 11:17:21 +0000 (12:17 +0100)]
build: update gnulib to latest; portability fixes

13 years agomaint: update all copyright year number ranges
Jim Meyering [Sat, 1 Jan 2011 10:37:32 +0000 (11:37 +0100)]
maint: update all copyright year number ranges

Run "make update-copyright".

13 years agobuild: update gnulib for version-etc copyright year update
Jim Meyering [Sat, 1 Jan 2011 10:10:00 +0000 (11:10 +0100)]
build: update gnulib for version-etc copyright year update

* tests/sample-test: Update copyright to 2011, to appease syntax-check.

13 years agomaint: generate much of the THANKS file
Jim Meyering [Mon, 17 Nov 2008 11:05:27 +0000 (12:05 +0100)]
maint: generate much of the THANKS file

Before this change, we had a tendency to manually list each
contributor's name in THANKS.  Now, each commit "Author" is
included in the generated THANKS file automatically, and most
of the old THANKS file is now a template, THANKS.in.
We'll still have to manually list the names of people who report
problems without a usable patch.

* THANKS.in: New file, derived from THANKS, but removing names of
those who are listed as git log 'Author:'s.
* THANKS: Remove file.
* thanks-gen: New file.
* Makefile.am (THANKS): New rule.
(EXTRA_DIST): Add .mailmap, THANKS.in and thanks-gen.
* .gitignore: Add THANKS and THANKS-to-translators.
* .mailmap: Unify on single address and name-spelling per contributor.

13 years agomaint: update to latest gnulib, for testsuite improvement
Eric Blake [Fri, 31 Dec 2010 16:50:46 +0000 (09:50 -0700)]
maint: update to latest gnulib, for testsuite improvement

* gnulib: Update to latest for init.sh fix.
* bootstrap: Resync from gnulib.
* tests/init.sh: Likewise.

13 years agomaint: allow gettext 0.17 again
Eric Blake [Thu, 30 Dec 2010 20:08:32 +0000 (13:08 -0700)]
maint: allow gettext 0.17 again

Commit 041c9c47 traded the 'gettext' module for the lighter 'gettext-h'
module, so as to not require the latest gettext release (we only need
the latest release if we ship gettext as a dependent library, but
coreutils has long preferred to use it as an external library).
But that commit overlooked two places necessary to allow the use of
gettext 0.17.

This does not force you to downgrade (using gettext 0.18.1.1 is still
just fine), nor does it affect tarballs (once a tarball is built
with a given gettext version, it can be built on other machines
regardless of what gettext version is present).

* bootstrap.conf (buildreq): Relax prerequisite.
* configure.ac (AM_GNU_GETTEXT_VERSION): Likewise.

13 years agosplit: fix the suffix length calculation
Pádraig Brady [Thu, 30 Dec 2010 01:36:59 +0000 (01:36 +0000)]
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,
and exercise the suffix length auto-calculation.
* NEWS: Mention the fix.
Reported by Dmitry V. Levin and Sergey Vlasov at
https://bugzilla.altlinux.org/show_bug.cgi?id=24841

13 years agocoreutils: keep lines within 80-column limits
Paul Eggert [Tue, 28 Dec 2010 20:28:48 +0000 (12:28 -0800)]
coreutils: keep lines within 80-column limits

* cfg.mk (LINE_LEN_MAX, FILTER_LONG_LINES): New macros.
(sc_long_lines): New rule.
* HACKING: Use shorter URLs to the same material.
* doc/Makefile.am, doc/coreutils.texi, m4/boottime.m4:
* man/help2man, man/stdbuf.x, src/Makefile.am, src/cat.c, src/copy.c:
* src/cp.c, src/dd.c, src/df.c, src/du.c, src/groups.c, src/install.c:
* src/ls.c, src/md5sum.c, src/mv.c, src/od.c, src/pinky.c, src/ptx.c:
* src/readlink.c, src/remove.c, src/rmdir.c, src/setuidgid.c:
* src/sort.c, src/tail.c, src/touch.c, tests/Coreutils.pm:
* tests/cp/existing-perm-race, tests/cp/perm, tests/cp/preserve-gid:
* tests/du/2g, tests/du/long-from-unreadable, tests/init.sh:
* tests/install/basic-1, tests/ls/nameless-uid:
* tests/ls/readdir-mountpoint-inode, tests/misc/chroot-credentials:
* tests/misc/cut, tests/misc/date, tests/misc/join, tests/misc/md5sum:
* tests/misc/sha1sum, tests/misc/sha224sum, tests/misc/sort:
* tests/misc/sort-continue, tests/misc/sort-files0-from:
* tests/misc/sort-rand, tests/misc/stdbuf, tests/misc/tr:
* tests/misc/uniq, tests/mv/atomic, tests/mv/part-fail:
* tests/mv/part-symlink, tests/mv/sticky-to-xpart, tests/pr/pr-tests:
* tests/rm/fail-2eperm, tests/rm/interactive-always:
Reformat to fit within 80 columns.
* doc/Makefile.am (BAD_POSIX_PERL): New macro.
* doc/coreutils.texi: Reword slightly, to make menus and
index lines shorter.
* src/md5sum.c: Redo --help output so that it fits within 79
columns, since that's a bit more portable and all the other --help
strings fit in 79 columns.

13 years agomaint: avoid syntax-check failure due to unused #include
Jim Meyering [Fri, 24 Dec 2010 13:59:06 +0000 (14:59 +0100)]
maint: avoid syntax-check failure due to unused #include

* src/getlimits.c: Don't include "c-ctype.h"; no longer used.

13 years agocsplit: diagnose file counter wraparound
Paul Eggert [Thu, 23 Dec 2010 08:07:35 +0000 (00:07 -0800)]
csplit: diagnose file counter wraparound

* src/csplit.c (create_output_file): Detect overflow when the
file counter wraps around, and exit with a diagnostic.  Formerly
the code silently wrapped around and wrote to the wrong file,
losing output data.

13 years agosort: minor performance tweak with num_processors
Paul Eggert [Thu, 23 Dec 2010 07:29:57 +0000 (23:29 -0800)]
sort: minor performance tweak with num_processors

* src/sort.c (main): Don't invoke num_processors twice.

13 years agogetlimits: port to hosts with very wide int, or non-ASCII
Paul Eggert [Thu, 23 Dec 2010 07:11:05 +0000 (23:11 -0800)]
getlimits: port to hosts with very wide int, or non-ASCII

* src/getlimits.c (decimal_ascii_add): Remove, replacing with ...
(decimal_absval_add_one): New function, with different signature,
which does not assume ASCII.  All callers changed.
(print_int): Remove assumptions that integers fit in 206 bits, and
that characters are ASCII.  These assumptions are portable in
practice but are easy to remove here.

13 years agopost-release administrivia
Jim Meyering [Wed, 22 Dec 2010 17:19:37 +0000 (18:19 +0100)]
post-release administrivia

* NEWS: Add header line for next release.
* .prev-version: Record previous version.
* cfg.mk (old_NEWS_hash): Auto-update.

13 years agoversion 8.8 v8.8
Jim Meyering [Wed, 22 Dec 2010 16:43:50 +0000 (17:43 +0100)]
version 8.8

* NEWS: Record release date.

13 years agocsplit: update gnulib for Solaris 8,9 snprintf fix
Jim Meyering [Wed, 22 Dec 2010 08:29:20 +0000 (09:29 +0100)]
csplit: update gnulib for Solaris 8,9 snprintf fix

13 years agomaint: correct test-related comments
Jim Meyering [Wed, 22 Dec 2010 10:49:25 +0000 (11:49 +0100)]
maint: correct test-related comments

* tests/mv/i-3: Adjust comment to match just-changed code.
Spotted by Pádraig Brady.
* tests/init.cfg (retry_delay_): Correct spelling of function name
in usage example.

13 years agotests: adjust preceding change to handle general WERROR_CFLAGS values
Jim Meyering [Wed, 22 Dec 2010 10:10:23 +0000 (11:10 +0100)]
tests: adjust preceding change to handle general WERROR_CFLAGS values

* gnulib-tests/Makefile.am (test_xvasprintf_CFLAGS):
(test_lock_CFLAGS, test_tls_CFLAGS): Avoid a syntax error when
$(WERROR_CFLAGS) expands to more than one token.

13 years agotests: do not assume compiler knows -Wxxx flags
Paul Eggert [Wed, 22 Dec 2010 09:48:27 +0000 (01:48 -0800)]
tests: do not assume compiler knows -Wxxx flags

* gnulib-tests/Makefile.am (test_xvasprintf_CFLAGS):
(test_lock_CFLAGS, test_tls_CFLAGS): Do not append GCC-specific
flags like -Wno-format-security unless the GCC-specific flag
-Werror is also specified.  This avoids a "make check" failure on
Solaris when using Sun C 5.8.

13 years agotests: mv/i-3: avoid false-positive failure on a slow/busy system
Jim Meyering [Wed, 22 Dec 2010 09:29:30 +0000 (10:29 +0100)]
tests: mv/i-3: avoid false-positive failure on a slow/busy system

* tests/mv/i-3: Quadruple the timeout duration.
Without this, I saw an expired timeout on a heavily-loaded system.

13 years agotests: avoid new false-positive failure on at least FreeBSD 8.1
Jim Meyering [Mon, 20 Dec 2010 13:27:08 +0000 (14:27 +0100)]
tests: avoid new false-positive failure on at least FreeBSD 8.1

* tests/mv/trailing-slash: Accommodate different diagnostic
on FreeBSD 8.1.

13 years agowho: omit useless definitions of MAXHOSTNAMELEN
Paul Eggert [Tue, 21 Dec 2010 01:40:31 +0000 (17:40 -0800)]
who: omit useless definitions of MAXHOSTNAMELEN

This prevents a compilation failure on Solaris 8, GCC 4.4.2, with
"configure --enable-gcc-warnings".
* src/who.c (MAXHOSTNAMELEN): Remove; no longer needed.
* src/pinky.c: Likewise.

13 years agomaint: fix a typo in sort --parallel help message
Pádraig Brady [Mon, 20 Dec 2010 07:49:07 +0000 (07:49 +0000)]
maint: fix a typo in sort --parallel help message

Also fix up Chen Guo's contacts
* src/sort.c (usage): Add a missing "of"
* THANKS: Add Chen Guo
* .mailmap: Add Chen Guo's UCLA address

13 years agobuild: update gnulib: ACL-vs-Solaris 8 portability etc.
Jim Meyering [Sun, 19 Dec 2010 20:23:19 +0000 (21:23 +0100)]
build: update gnulib: ACL-vs-Solaris 8 portability etc.

13 years agotests: sync init.sh from gnulib
Paul Eggert [Sun, 19 Dec 2010 04:02:45 +0000 (20:02 -0800)]
tests: sync init.sh from gnulib

* tests/init.sh (setup_): Initialize fail=0 before invoking mktempd_.
Ensure that IFS is defined initially.
(mktempd_): Remove fail=0 initialization; no longer needed.

13 years agowc: fix a possible hang with --files0-from
Pádraig Brady [Sat, 18 Dec 2010 03:25:49 +0000 (03:25 +0000)]
wc: fix a possible hang with --files0-from

* src/wc.c (main): exit when we get a read error on
the --files0-from file, rather than retrying and
spinning the CPU

13 years agocp: ensure backups are created when -T specified
Pádraig Brady [Sat, 18 Dec 2010 02:50:33 +0000 (02:50 +0000)]
cp: ensure backups are created when -T specified

* src/cp.c (do_copy): When -T is specified, initialize
the NEW_DST and SB variables, which are checked when
running: cp -T --force --backup file file
* tests/cp/backup-1: Add the -T case

13 years agosort: use at most 8 threads by default
Pádraig Brady [Sat, 18 Dec 2010 05:27:46 +0000 (05:27 +0000)]
sort: use at most 8 threads by default

* src/sort.c (main): If --parallel isn't specified,
restrict the number of threads to 8 by default.
If the --parallel option is specified, then
allow any number of threads to be set, independent
of the number of processors on the system.
* doc/coreutils.texi (sort invocation): Document the changes
to determining the number of threads to use.
Mention the memory overhead when using multiple threads.
* tests/misc/sort-spinlock-abuse: Allow single core
systems that support pthreads.
* tests/misc/sort-stale-thread-mem: Likewise.
* tests/misc/sort-unique-segv: Likewise.
* NEWS: Mention the change in behaviour.

13 years agodoc: split: add examples showing how to use the new option
Jim Meyering [Fri, 17 Dec 2010 20:58:33 +0000 (21:58 +0100)]
doc: split: add examples showing how to use the new option

* doc/coreutils.texi (split invocation): Add examples.

13 years agotests: avoid spurious du/bigtime failure
Jim Meyering [Fri, 17 Dec 2010 15:55:39 +0000 (16:55 +0100)]
tests: avoid spurious du/bigtime failure

* tests/du/bigtime: Map nonzero block count to 0.
Reported by Assaf Gordon.
* THANKS: Update.

13 years agotests: set fail=0 by default
Paul Eggert [Sat, 18 Dec 2010 06:39:47 +0000 (22:39 -0800)]
tests: set fail=0 by default

* tests/init.sh (setup_): Set fail=0.  This was the intent as per
<http://lists.gnu.org/archive/html/bug-coreutils/2010-12/msg00058.html>
but the assignment in mktempd_ is ineffective, since mktempd_
is used inside `` and its assignments are in a subshell.

13 years agobuild: update gnulib submodule to latest
Jim Meyering [Wed, 15 Dec 2010 13:16:07 +0000 (14:16 +0100)]
build: update gnulib submodule to latest

13 years agosort: do not generate thousands of subprocesses for 16-way merge
Paul Eggert [Fri, 17 Dec 2010 06:31:56 +0000 (22:31 -0800)]
sort: do not generate thousands of subprocesses for 16-way merge

Without this change, tests/misc/sort-compress-hang would consume
more than 10,000 process slots on my RHEL 5.5 x86-64 server,
making it likely for other applications to fail due to lack of
process slots.  With this change, the same benchmark causes 'sort'
to consume at most 19 process slots.  The change also improved
wall-clock time by 2% and user+system time by 14% on that benchmark.
* NEWS: Document this.
* src/sort.c (MAX_PROCS_BEFORE_REAP): Remove.
(reap_exited): Renamed from reap_some; this is a more accurate name,
since "some" incorrectly implies that it reaps at least one process.
All uses changed.
(reap_some): New function: it *does* reap at least one process.
(pipe_fork): Do not allow more than NMERGE + 2 subprocesses.
(mergefps, sort): Omit check for exited processes: no longer needed,
and anyway the code consumed too much CPU per line when 2 < nprocs.

13 years agosort: fix hang with sort --compress
Paul Eggert [Thu, 16 Dec 2010 21:55:13 +0000 (13:55 -0800)]
sort: fix hang with sort --compress

* NEWS: Document this.
* src/sort.c (UNCOMPRESSED, UNREAPED, REAPED): New constants.
(struct tempnode): New member 'state', to hold these constants.
The pid member is now undefined if state == UNCOMPRESSED.
(struct sortfile): Replace member 'pid' with member 'temp'.
(uintptr): Remove.
(proctab_hasher, proctab_comparator, register_proc, delete_proc):
Proctab entries are now struct tempnode *, not pid_t, to handle
the case where multiple tempnode objects correspond to the same
pid.  This avoids a race condition that can cause a hang.
(register_proc): Arg is now struct tempnode *, not pid_t.  All
callers changed.
(delete_proc): Set tempnode state to REAPED.
(create_temp_file): No need to set pid member here; it's now
done when the pid is known.
(maybe_create_temp, create_temp): Remove PPID arg.  Return struct
tempnode *, not char *.  All callers changed.
(maybe_create_temp): Set node state to UNCOMPRESSED or UNREAPED.
No need to set node->pid to 0.
(open_temp): Replace NAME and PID args with a single TEMP arg.
All callers changed.  Wait only for unreaped children.
(zaptemp): Wait for decompressor to finish before removing its
temporary-file input.  This avoids .nfsXXXX hassles with NFS
and fixes a race (leading to a hang) regardless of NFS.
(open_input_files): Adjust to new way of dealing with temp files
and their subprocesses.
* tests/Makefile.am (TESTS): Add misc/sort-compress-hang.
* tests/misc/sort-compress-hang: New file.

13 years agosort: don't dump core when merging from input twice
Paul Eggert [Thu, 16 Dec 2010 08:03:29 +0000 (00:03 -0800)]
sort: don't dump core when merging from input twice

* NEWS: Document this.
* src/sort.c (avoid_trashing_input): The previous fix to this
function didn't fix all the problems with this code.  Replace it
with something simpler: just copy the input file.  This doesn't
change the number of files, so return void instead of the updated
file count.  Caller changed.
* tests/misc/sort-merge-fdlimit: Test for the bug.

13 years agodoc: tail: semi-deprecate --sleep-interval and --max-unchanged-stats
Jim Meyering [Tue, 14 Dec 2010 08:08:37 +0000 (09:08 +0100)]
doc: tail: semi-deprecate --sleep-interval and --max-unchanged-stats

Those options are useful only on systems that lack inotify support
and in the unusual event that a system with inotify support must
resort to polling.
* src/tail.c (usage): Note that the --max-unchanged-stats=N and
--sleep-interval=N options are rarely useful on systems with
inotify support.
* doc/coreutils.texi (tail invocation): Likewise.

13 years agosort: fix very-unlikely buffer overrun when merging to input file
Paul Eggert [Tue, 14 Dec 2010 19:09:32 +0000 (11:09 -0800)]
sort: fix very-unlikely buffer overrun when merging to input file

* src/sort.c (avoid_trashing_input): Fix a typo that could cause a
buffer overrun in theory.  In practice this is extremely unlikely,
as it requires running out of file descriptors in a small merge,
presumably because some other process is hogging all the OS's file
descriptors.

13 years agosort: document --compress reaper fixes
Paul Eggert [Tue, 14 Dec 2010 18:21:49 +0000 (10:21 -0800)]
sort: document --compress reaper fixes

* NEWS: Document the --compress reaper fixes installed yesterday.

13 years agotests: default to /tmp as the temporary directory
Paul Eggert [Tue, 14 Dec 2010 18:07:36 +0000 (10:07 -0800)]
tests: default to /tmp as the temporary directory

* tests/check.mk (TESTS_ENVIRONMENT): Default TMPDIR to /tmp,
rather than to the working directory; this is more common in
practice, which makes the tests more real-worldish; and it is
often faster.  Also, it avoids some problems with NFS cleanups.
* tests/misc/sort-compress: Remove unnecessary code setting TMPDIR.
* tests/misc/sort-compress-proc: Likewise.  Do the final sleep
only if TMPDIR is relative, which should be rarely given the
change to TESTS_ENVIRONMENT.

13 years agosort: fix some --compress reaper bugs
Paul Eggert [Tue, 14 Dec 2010 07:23:17 +0000 (23:23 -0800)]
sort: fix some --compress reaper bugs

* src/sort.c (uintptr): New type.
(enum procstate, struct procnode, update_proc): Remove.
(proctab_hasher, proctab_comparator, register_proc, wait_proc):
(reap_some): The proctab is now simply a hash of process-IDs
rather than of pointers to objects with reference counts and
states; this is smaller and faster and easier to understand.
(nprocs): Now pid_t, not size_t, since one cannot have more than
PID_MAX children.
(reap): If the argument is -1, wait; if 0 (a new value), do not.
Delete pid from proctab as needed.  Ignore children that are not
in proctab, as they are from the program that exec'ed us and are
irrelevant to our success or failure.
(delete_proc, reap_all): New functions.
(open_temp): Register the child.
(sort): Clean up all children afterwards; without this patch,
'sort' sometimes missed failures in children due to race conditions.
* tests/Makefile.am (TESTS): Add misc/sort-compress-proc.
* tests/misc/sort-compress-proc: New file, to test for the
bugs fixed above.

13 years agotests: typo fix
Paul Eggert [Mon, 13 Dec 2010 18:02:06 +0000 (10:02 -0800)]
tests: typo fix

* tests/misc/sort-stale-thread-mem: Fix typo in comment.

13 years agotests: tweak basic-1 to use warn_ rather than literal "exit 77"
Jim Meyering [Mon, 13 Dec 2010 07:19:12 +0000 (08:19 +0100)]
tests: tweak basic-1 to use warn_ rather than literal "exit 77"

* tests/install/basic-1 (just_built_dd): Use warn_, rather than
cat and exit 77.

13 years agotests: mark new test as very expensive
Jim Meyering [Mon, 13 Dec 2010 07:07:25 +0000 (08:07 +0100)]
tests: mark new test as very expensive

* tests/misc/sort-stale-thread-mem: Don't initialize fail=0 here;
that is done in init.sh.  This avoids a syntax-check failure.
Invoke "Exit $fail" at end, too.
Mark as a very expensive test.

13 years agotests: test for access to stale thread memory
Paul Eggert [Sun, 12 Dec 2010 21:38:19 +0000 (13:38 -0800)]
tests: test for access to stale thread memory

* tests/misc/sort-stale-thread-mem: New tests.
* tests/Makefile.am (TESTS): Add it.

13 years agotests: avoid FP failure when run under valgrind
Jim Meyering [Sat, 11 Dec 2010 17:44:57 +0000 (18:44 +0100)]
tests: avoid FP failure when run under valgrind

* tests/misc/printenv: Filter out LD_PRELOAD, as the comment
said, not LD_LIBRARY.

13 years agosort: avoid segfault when using two or more threads
Jim Meyering [Sat, 11 Dec 2010 10:38:21 +0000 (11:38 +0100)]
sort: avoid segfault when using two or more threads

This change does not fix the actual bug.  That was done by commit
c9db0ac6, "sort: preallocate merge tree nodes to heap".  The fix
was to store each "node" structure on the heap, not on the stack.
Otherwise, a node from one thread's stack could be used in another
thread after the first thread had expired (via pthread_join).
This bug was very hard to trigger when using spinlocks, but
easier once we began using mutexes.
* NEWS (Bug fixes): Mention it.
For details, see http://debbugs.gnu.org/7597.

13 years agosort: syntax cleanup
Jim Meyering [Sat, 11 Dec 2010 10:29:38 +0000 (11:29 +0100)]
sort: syntax cleanup

* src/sort.c (xfopen, debug_key, sortlines, sort, main): Adjust
formatting: fix misplaced braces, use consistent spacing,
split a 2-stmt line.

13 years agosort: integer overflow checks in thread counts, etc.
Paul Eggert [Sat, 11 Dec 2010 08:27:05 +0000 (00:27 -0800)]
sort: integer overflow checks in thread counts, etc.

* src/sort.c (specify_nthreads, merge_tree_init, init_node):
(queue_init, sortlines, struct thread_args, sort, main):
Use size_t, not unsigned long int, for thread counts, since thread
counts are now used to compute sizes.
(specify_nthreads): Check for size_t overflow.
(merge_tree_init, sort): Shorten name of local variable, for
readability.
(merge_tree_init): Move constants next to each other in product,
so that the constant folding is easier to see.
(init_node): Now static.  Add 'restrict' only where it might
be helpful for compiler optimization.
(queue_init): 2nd arg is now nthreads, not "reserve", which is
a bit harder to follow.  All uses changed.
(struct thread_args): Rename lo_child to is_lo_child, so that
it's obvious to the reader when we're talking about this boolean
as opposed to the new lo_child member of the other structure.
All uses changed.
(sort): Remove unused local variable end_node.
(main): Don't allow large thread counts to cause undefined behavior
later, due to integer overflow.

13 years agosort: preallocate merge tree nodes to heap.
Chen Guo [Fri, 10 Dec 2010 21:13:36 +0000 (13:13 -0800)]
sort: preallocate merge tree nodes to heap.

* src/sort.c: (merge_tree_init) New function. Allocates memory for
merge tree nodes.
(merge_tree_destory) New function.
(init_node) New function.
(sortlines) Refactor node creation code to init_node. Remove now
superfluous arguments. All callers changed.
(sort) Initialize/destory merge tree. Refactor root node creation
to merge_tree_init.

13 years agosort: comment fix
Paul Eggert [Sat, 11 Dec 2010 04:52:04 +0000 (20:52 -0800)]
sort: comment fix

* src/sort.c: Comment fix re spin locks.

13 years agosort: use mutexes, not spinlocks (avoid busy loop on blocked output)
Chen Guo [Mon, 6 Dec 2010 08:15:42 +0000 (00:15 -0800)]
sort: use mutexes, not spinlocks (avoid busy loop on blocked output)

Running a command like this on a multi-core system
  sort < big-file | less
would peg all processors at near 100% utilization.
* src/sort.c: (struct merge_node) Change member lock to mutex.
All uses changed.
* tests/Makefile.am (XFAIL_TESTS): Remove definition, now that
this test passes once again.  I.e., the sort-spinlock-abuse test
no longer fails.
* NEWS (Bug reports): Mention this.
Reported by DJ Lucas in http://debbugs.gnu.org/7489.

13 years agosplit: fix a case where --elide-empty causes invalid chunking
Pádraig Brady [Wed, 8 Dec 2010 08:33:15 +0000 (08:33 +0000)]
split: fix a case where --elide-empty causes invalid chunking

When -n l/N is used and long lines are present that both
span partitions and multiple buffers, one would get
inconsistent chunk sizes.

* src/split.c (main): Add a new undocumented ---io-blksize option
to support full testing with varied buffer sizes.
(cwrite): Refactor most handling of --elide-empty to here.
(bytes_split): Remove handling of --elide-empty.
(lines_chunk_split): Likewise.  The specific issue here
was the first handling of elide_empty_files interfered
with the replenishing of the input buffer.
* test/misc/split-lchunk: Add -e and the new ---io-blksize
combinations to the test.

13 years agotests: remove useless definition of $SORT in sort-compress
Jim Meyering [Sun, 5 Dec 2010 16:07:35 +0000 (17:07 +0100)]
tests: remove useless definition of $SORT in sort-compress

* tests/misc/sort-compress (SORT): Remove unused definition.

13 years agotests: make it harder to lose a race in spinlock-abuse
Jim Meyering [Sat, 4 Dec 2010 10:52:21 +0000 (11:52 +0100)]
tests: make it harder to lose a race in spinlock-abuse

* tests/misc/sort-spinlock-abuse: On a busy system, with only 12
pauses of length 0.1 seconds, the buggy (busy-spinlock blocked)
sort would fail to accumulate 1 second of CPU time, and hence
would mistakenly pass.  Increase from 12 to 50.

13 years agosort: merge_queue -> queue
Paul Eggert [Fri, 3 Dec 2010 23:39:50 +0000 (15:39 -0800)]
sort: merge_queue -> queue

* src/sort.c (struct thread_args, sortlines_thread, sortlines, sort):
Rename "merge_queue" to "queue", for consistency with other functions
that just use the name "queue" for these things.

13 years agosort: clarify queue_check_insert
Paul Eggert [Fri, 3 Dec 2010 23:23:43 +0000 (15:23 -0800)]
sort: clarify queue_check_insert

* src/sort.c (queue_check_insert): Clarify body a bit, and remove
no-longer-needed comment.

13 years agosort: fix problems with merge node dest pointer
Paul Eggert [Fri, 3 Dec 2010 23:11:46 +0000 (15:11 -0800)]
sort: fix problems with merge node dest pointer

* src/sort.c (mergelines_node): Return void, not size_t.  All
callers changed.  Change *node->dest here, not in caller.
Do not change node->dest: it's not needed and could cause problems
on (mostly theoretical) hosts that do not allow adding integers to
null pointers.
(queue_check_insert_parent): Omit MERGED parameter; no longer needed.
All callers changed.

13 years agosort: simplify write_unique
Paul Eggert [Fri, 3 Dec 2010 23:04:31 +0000 (15:04 -0800)]
sort: simplify write_unique

* src/sort.c (write_unique): Simplify slightly so that there is
just one call to write_line, not two.

13 years agosort: put queue arg first
Paul Eggert [Fri, 3 Dec 2010 23:01:21 +0000 (15:01 -0800)]
sort: put queue arg first

* src/sort.c (queue_check_insert, queue_check_insert_parent): Make
the queue arg first, for consistency with other functions such as
queue_insert that put the queue arg first.  Rename from
check_insert and update_parent, respectively.  All callers
changed.

13 years agosort: tune struct_merge_node slightly
Paul Eggert [Fri, 3 Dec 2010 22:39:23 +0000 (14:39 -0800)]
sort: tune struct_merge_node slightly

* src/sort.c (struct merge_node): 'lock' is now the actual lock,
not a pointer to the lock; there's no need for indirection here.
Make 'level' unsigned int instead of size_t, since it is a
bit-shift count; also, move it next to a bool so that it's more
likely to take less space.  All uses changed.
(sortlines, sort): Spell out initialization instead of using an
initializer.  This makes the initializer a bit easier to understand,
and avoids unnecessary stores into the spin lock.

13 years agosort: Clarify comments
Paul Eggert [Fri, 3 Dec 2010 22:27:02 +0000 (14:27 -0800)]
sort: Clarify comments

* src/sort.c: Improve comments a bit.

13 years agotests: cleanup rm -rf fails under NFS
Paul Eggert [Fri, 3 Dec 2010 19:08:48 +0000 (11:08 -0800)]
tests: cleanup rm -rf fails under NFS

This problem was observed on RHEL 5.5 x86-64 when running as a
client of a NetApp FAS2050.
* tests/cp/cp-mv-backup: Don't leave a file descriptor open to
a file in a directory that will be cleaned up with "rm -rf".
Under NFS, when the rm unlinks that file, it is instead renamed
to .nfsXXXX and then rm cannot remove the parent directory,
and the test fails.
* tests/cp/same-file: Likewise.

13 years agocp: fix bug with fine-grained src to nearby coarse-grained dest
Paul Eggert [Fri, 3 Dec 2010 17:55:48 +0000 (09:55 -0800)]
cp: fix bug with fine-grained src to nearby coarse-grained dest

The actual fix is in gnulib's lib/utimecmp.c.
* NEWS: Document fix.

13 years agobuild: update gnulib submodule to latest
Paul Eggert [Fri, 3 Dec 2010 17:52:44 +0000 (09:52 -0800)]
build: update gnulib submodule to latest

13 years agosort: fix bug on 64-bit hosts with at least 32768 processors
Paul Eggert [Thu, 2 Dec 2010 05:50:00 +0000 (21:50 -0800)]
sort: fix bug on 64-bit hosts with at least 32768 processors

* src/sort.c (MAX_MERGE): Avoid integer overflow when on a machine
with (say) 32-bit int and 64-bit size_t and when level == 15.
Without this fix, on such a machine with 32768 or more processors,
the level computation could overflow on large input, and this
would result in division by zero.

13 years agotests: add test for parallel sort -u segfault bug
Jim Meyering [Sun, 28 Nov 2010 11:59:38 +0000 (12:59 +0100)]
tests: add test for parallel sort -u segfault bug

* tests/misc/sort-unique-segv: New file.
* tests/Makefile.am (TESTS): Add it.