2006-04-23 Francesco Montorsi * Version 6.0-cvs. New option for ls: --group-directories-first. It makes ls list directories before files. * NEWS [New features]: Mention it. * src/ls.c (sort_type): Rearrange to use as an array index when choosing sort function; added new sort_numtypes member for compile-time check. (time_type): Add new time_numtypes member for compile-time check. (directories_first): New global variable. (GROUP_DIRECTORIES_FIRST_OPTION): New enum. (long_options): Add --directories-first. (main): Support new option. (is_directory): New function. (extract_dirs_from_files): Use it. (DIRFIRST_CHECK, DEFINE_SORT_FUNCTIONS) (LIST_SORTFUNCTION_VARIANTS): New macros. (sort_functions): New global variable. (sort_files): Use it. (usage): Document new option. 2006-04-18 Paul Eggert * src/shred.c (fillrand): The assertion was way too weak, due to what must be a typo. Strengthen it to its intended value. (dopass): Don't use alloca; it's not worth the aggravation here, since it's used only to get a page-aligned buffer, and page alignment doesn't buy us much here. I'm suspicious that alloca causes problems on some hosts, due to a recent bug report by Adam Waltman. 2006-04-18 Jim Meyering * tests/misc/tty-eof: Add new programs, base64, sha224sum, sha256sum, sha384sum, sha512sum. 2006-04-17 Paul Eggert * src/chmod.c (describe_change): Adjust to filemode changes. * src/ls.c (HAVE_ST_DM_MODE): Remove; moved to ../lib/filemode.c. (print_long_format): Use (new) filemodestring rather than (old) mode_string, so that we get more file types right, at least in theory. Adjust to filemode changes. * src/stat.c (human_access): Likewise. 2006-04-18 Jim Meyering * src/ptx.c (main) [DEFAULT_IGNORE_FILE]: Remove code to use a default ignore file. This has never been enabled. Reported by Eric Blake. 2006-04-12 Paul Eggert * src/ln.c (linkfunc): Remove. This method ran into a compiler/linker bug in Interix. Just call symlink or link directly. All uses changed. * src/setuidgid.c (main) [! HAVE_SETGROUPS]: Don't call setgroups. * src/stat.c (USE_STATVFS): New macro. Include and use statvfs only if USE_STATVFS. (NAMEMAX_FORMAT): define a bit more clearly, now that the statvfs-using code is a bit more regular. * src/system.h (sync) [!HAVE_SYNC]: New macro. 2006-04-11 Paul Eggert * NEWS: csplit, nl, expr now conform to POSIX better, and are more-compatible with traditional Unix, with respect to regular expressions. * src/csplit.c (extract_regexp): Set re_syntax_options to a value that is compatible with what POSIX requires. * src/nl.c (build_type_arg): Likewise. * src/expr.c (docolon): Likewise. Also, don't let anchors match newline; this fixes an incompatibility with tradition and with POSIX. Don't warn about leading ^. POSIX says it is unspecified whether ^ is a special character, which means that implementations can either treat it as special or not, but either way a warning is not allowed (unless the regexp is otherwise invalid). Instead, anchor the expression but treat ^ as an anchor; this is the traditional behavior (e.g., Solaris 10). (eval4, eval3, eval2): Treat non-numeric args, division by zero, and the like as invalid expressions (exit status 2), not as failure of 'expr' (exit status 3). This is more consistent with how Solaris behaves. * tests/expr/basic (fail-a): Adjust exit status to match new expr behavior, for status 2 versus 3. (anchor): New test. (bre1, bre2, bre3, bre4, bre5, bre6, bre7, bre8, bre9, bre10): (bre11, bre12, bre13, bre14, bre15, bre16, bre17, bre18, bre19, bre20): (bre21, bre22, bre23, bre24, bre25, bre26, bre27, bre28, bre29, bre30): (bre31, bre32, bre33, bre34, bre35, bre36, bre37, bre38, bre39, bre40): (bre41, bre42, bre43, bre44, bre45, bre46, bre47, bre48, bre49, bre50): (bre51, bre52, bre53, bre54, bre55, bre56, bre57, bre58, bre59, bre60): (bre61, bre62): New tests. * tests/misc/csplit: Use \{...\} in test RE, to test that we're conforming to POSIX. Port to Solaris 8. * tests/du/long-from-unreachable: Solaris 8 sh doesn't understand "if !". Do not assume that 'sed' can handle long, newline-free input. * tests/du/long-sloop: Likewise. Evaluate expr once, not $n times. 2006-04-10 Paul Eggert Adjust to new regex.h API (with new fastmap type), and clean up the regex storage allocation a bit. * src/csplit.c (struct control): Put re_compiled member at the end, since it's large. Change regexpr member from char * to bool; all uses changed. Add new member fastmap. (extract_regexp): regexp arg is now char const *, not char *. Don't bother duplicating the regular expression; it's not needed. Set fastmap from new fastmap member. Don't bother allocating a buffer, as the regexp code does a better job than we do. * src/expr.c (docolon): Allocate and use a fastmap. Don't bother allocating a buffer. * src/nl.c (body_fastmap, header_fastmap, footer_fastmap): New vars. (build_type_arg): New fastmap arg. All uses changed. Don't bother allocating a buffer, but set a fastmap. * src/ptx.c (context_regex_string, word_regex_string): Remove. (context_regex, word_regex): New vars, replacing the above. All uses changed. (struct regex_data): New type. (compile_regex): Renamed from alloc_and_compile_regex, since we no longer allocate storage. Arg is now a struct regex_data *, not a const char *. All uses changed. Don't allocate the fastmap; instead, take it from the caller. Don't convert size_t to int, to avoid arithmetic overflow problems. Don't bother freeing storage afterwards; it's not worth the aggravation. * src/tac.c (compiled_separator_fastmap): New ver. (main): Use it. Don't bother allocating a buffer. 2006-03-30 Jim Meyering * src/dd.c (iwrite): Remove assignment without effect. Reported by Felix Rauch Valenti. 2006-03-22 Eric Blake * src/ptx.c (usage): Remove mention of --copyright/-C. (main): Alias --copyright to --version plus a deprecation warning. * NEWS: Mention this. 2006-03-27 Jim Meyering * src/Makefile.am (uptime_LDADD): Add $(POW_LIB), for uptime's use of strtod. Tiny patch from Nickolai Zeldovich. 2006-03-11 Eric Blake * tests/misc/dirname: New file. * tests/basename/Makefile.am: Delete. * tests/basename/basic: Move to... * tests/misc/basename: ... this new file. Add some tests, including fixed behavior for //. * tests/misc/Makefile.am (TESTS): Sort. Add basename, dirname. * tests/Makefile.am (SUBDIRS): Remove basename. * configure.ac (AC_CONFIG_FILES): Remove tests/basename. Improvements to dirname/basename handling on platforms like cygwin with distinct // and with drive letters. * NEWS: Document new behavior. * src/basename.c (main): Don't strip suffix from file system roots. * src/cp.c (target_directory_operand): Use new last_component. (ASSIGN_BASENAME_STRDUPA): Likewise. Reduce time spent traversing the string. * src/dircolors.c (guess_shell_syntax): Use new last_component. * src/install.c (target_directory_operand, install_file_in_dir): Likewise. * src/ln.c (target_directory_operand, main): Likewise. * src/ls.c (basename_is_dot_or_dotdot): Likewise. * src/mv.c (target_directory_operand, movefile): Likewise. * src/remove.c (rm_1): Likewise. * src/shred.c (wipename): Likewise. * src/split.c (next_file_name): Likewise. * src/su.c (log_su, run_shell): Likewise. 2006-03-23 Paul Eggert * NEWS: nohup diagnostics are now more precise, and nohup now redirects stderr to nohup.out if stdout is closed and stderr is a tty. * src/nohup.c (main): Implement this. * tests/misc/nohup: Test the new behavior. 2006-03-12 Jim Meyering * src/copy.c (set_author): Rename function, from preserve_author. * src/remove.c (AD_pop_and_chdir): Use new macro, CYCLE_CHECK_REFLECT_CHDIR_UP, rather than open-coding it. * src/system.h (SAME_INODE): Remove definition. Include "same-inode.h", instead. 2006-03-11 Eric Blake * src/pwd.c (robust_getcwd): Prepend only one slash, not two. 2006-03-10 Jim Meyering Fix a bug whereby a user with write access to a directory being removed could cause the removal of that directory to fail with an erroneous diagnostic about a directory cycle. Reported by Vineet Chadha. * NEWS: Mention this. * src/remove.c (AD_pop_and_chdir): If the directory we're about to leave (and try to rmdir) is the one whose dev_ino is being used to detect a cycle, reset cycle_check_state.dev_ino to that of the parent. 2006-03-08 Paul Eggert * NEWS: Document dd's new 'directory' and 'nolinks' flags. * src/dd.c (set_fd_flags): Handle file-creation flags on file descriptors, rather than ignoring them. * tests/dd/misc: Add test cases for append, nofollow, directory, and nolinks flags. Simplify redirection to /dev/null in some cases. * tests/dd/misc: iflags->iflag. This fixes a typo that meant the noatime test never tested anything. 2006-03-05 Paul Eggert * src/dd.c (flags, usage): New flags directory, nolinks. * src/system.h (O_NOLINKS): Define to 0 if not already defined. * src/ls.c (usage): Mention that -f disables --color. Problem reported by Niels Möller. 2006-03-03 Justin Pryzby * man/*.x: Add references to syscalls from utilities of the same name. 2006-03-05 Jim Meyering * tests/help-version: Set SHELL, if not already set, in order to avoid failure when `make check' is run through debuild; dircolors would fail due to lack of $SHELL. Reported by Sven Joachim. Make `base64 --wrap=N' work for N=0, and for N larger than SIZE_MAX. * src/base64.c (wrap_write, do_encode, main): Change type of parameters and locals, wrap_column, form size_t to uintmax_t. (main): Adjust to use xstrtoumax, accordingly. 2006-03-03 Jim Meyering Don't fail when run from an environment with SHELL not a Bourne shell, e.g. `env SHELL=/bin/csh make check' would fail this test. * tests/dircolors/simple: Invoke each non-failing test with -b. Reported by Michael Stone. 2006-02-27 Jim Meyering * tests/misc/base64: Derive --decode-using tests from the encode-based ones. * tests/misc/base64: Factor out a long constant string. Split lines to stay within 80 columns. * tests/misc/Makefile.am (TESTS): Add base64. * tests/misc/base64: Test base64. From Simon Josefsson. * src/base64.c (do_decode): Use correct type for parameter, ignore_garbage: s/size_t/bool/. * src/base64.c: Don't include .h files already included by system.h: , , , , . Include "system.h" before the other lib/*.h header files. Include before "system.h". (wrap_write): Remove declaration of unused local, initial_column. (wrap_write): Correct declaration syntax: s/size_t * V/size_t *V/. * README: Add base64 to the list. 2006-02-17 Simon Josefsson New program: base64. * AUTHORS: Mention base64. * NEWS: Likewise. * man/Makefile.am: Build base64.1. * man/base64.x: New file. * src/Makefile.am (bin_PROGRAMS): Add base64. * src/base64.c: New file. 2006-02-25 Eric Blake In ls, avoid calling stat for --inode (-i), when possible. * src/pwd.c (NOT_AN_INODE_NUMBER, D_INO): Move to ... * src/system.h: ... here, for use in ... * src/ls.c (main): ... here. Prefer dirent.d_ino to stat when possible. (gobble_file): Add inode argument. (print_dir): Pass inode if available. (usage): Remove inaccuracy. 2006-02-23 Jim Meyering * TODO: Update/correct some obsolete entries. 2006-02-20 Paul Eggert * doc/coreutils.texi (join invocation): Mention `sort -k 1b,1'. * src/join.c (usage): Likewise. Documentation problem reported by Philip Kensche. 2006-02-20 Eric Blake * man/rm.x: Update documentation to match previous patch. 2006-02-18 Eric Blake New option for rm: --interactive=once (-I). * NEWS: Document it, along with change to rm --interactive. * TODO: Remove entry for implementing rm -I * src/rm.c (INTERACTIVE_OPTION): New enum value. (interactive_type): New enum. (long_opts): Let interactive take an optional argument. (interactive_args, interactive_types): New option arguments. (usage): Document -I, --interactive=WHEN. Use program_name instead of a basename. (main): New -I option, new behavior to --interactive. * tests/rm/interactive-once: New tests. * tests/rm/interactive-always: Ditto. * tests/rm/Makefile.am (TESTS): Run them. 2006-02-18 Jim Meyering * Makefile.maint (sc_two_space_separator_in_usage): Make the regular expression match more of the target lines, e.g., those that start with `-S,' (short option followed by a comma) or that include `=[...]'. Patch by Nicolas François. Fix the four offenders thus exposed: * src/join.c (usage): Use two spaces (not one) to separate the --first-only option string from its description, so help2man formats the derived man page properly. * src/pr.c (usage): Likewise. * src/uniq.c (usage): Likewise. * src/install.c (usage): Likewise. 2006-02-15 Jim Meyering * Makefile.maint (alpha beta major): For `make major', ensure that the version string is of the form N.N[.N]*, where N is one or more digits. 2006-02-14 Jim Meyering * INSTALL: Update from gnulib. 2006-02-13 Jim Meyering * GNUmakefile (all): Emit diagnostics to stderr, not stdout. 2006-02-12 Jim Meyering * Makefile.maint (patch-check): New target. (local-checks-available): Add to the list. 2006-02-11 Jim Meyering * src/c99-to-c89.diff: New file. * src/Makefile.am (EXTRA_DIST): Add c99-to-c89.diff. * .x-po-check: New file, with exclusions so that `make distcheck' passes once again. * Makefile.am (EXTRA_DIST): Add .x-po-check. rm -r must remove an empty directory, even if it is inaccessible. * src/remove.c (close_preserve_errno): New function. (fd_to_subdirp): Don't print a diagnostic in this function. Do it from the callers instead, unless rmdir succeeds. (remove_cwd_entries, remove_dir): Adjust callers. * tests/rm/empty-inacc: New test for the above. * tests/rm/Makefile.am (TESTS): Add empty-inacc. * NEWS: Mention this bug fix. * tests/rm/rm2: Adjust two expected diagnostics, now that they're a tiny bit less precise: cannot remove `a/1': ... instead of cannot open directory `a/1': ... * Makefile.maint (syntax-check-rules): Automatically derive this list of sc_-prefixed rule names. 2006-02-10 Paul Eggert * Makefile.maint (CVS_LIST): Don't assume cvsu is available. (CVS_LIST_EXCEPT): New macro, to simplify exception-processing. Most uses of CVS_LIST changed to use CVS_LIST_EXCEPT. (syntax-check-rules): Bring back sc_changelong. (Hmm, why did it go away? was that an accident?) (sc_cast_of_argument_to_free, sc_cast_of_x_alloc_return_value): (sc_cast_of_alloca_return_value, sc_space_tab, sc_prohibit_atoi_atof): (sc_error_exit_success, sc_file_system, sc_no_if_have_config_h): (sc_system_h_headers, sc_sun_os_names, sc_trailing_blank): (sc_two_space_separator_in_usage, sc_unmarked_diagnostics): (sc_obsolete_symbols, sc_changelog, sc_prohibit_jm_in_m4): (sc_useless_cpp_parens, makefile-check, m4-check, po-check): (author_mark_check, makefile_path_separator_check): Output line numbers, to simplify navigation of Emacs *compilation* buffers. (sc_prohibit_atoi_atof, sc_file_system): Rework slightly so that Makefile.maint doesn't get reported as a violation of its own syntax rules. (sc_dd_max_sym_length): Use ifneq to do nothing, instead of doing it at run-time (which didn't work with Bison). Fix a makefile typo, caught by Makefile.maint itself: spaces where a tab should be. (po-check): Check lib/*.[ch] even if not in CVS; used by Bison, which copies from ../gnulib/lib/*.[ch] to lib/*.[ch]. Ignore djgpp and man subdirectories, to avoid false matches with Bison and coreutils, respectively. Use sort -u to remove the resulting duplicates. * gnupload: Rework slightly to avoid bogus warning from sc_two_space_separator_in_usage. 2006-02-10 Jim Meyering Use gzip's --rsyncable option only if it's available. * Makefile.maint (gzip_rsyncable): New variable. (GZIP_ENV): Use it. 2006-02-08 Jim Meyering * Makefile.maint (local-checks-available): Define in terms of the expansion, $(syntax-check-rules), rather than the single, top-level target `syntax-check', so that it's easier to exclude individual rules (via $(local-checks-to-skip)). (tgz-md5, tgz-sha1, ...): Remove now-unused definitions. 2006-02-07 Jim Meyering * src/system.h (!defined O_DIRECT): If O_DIRECTIO is defined (as it is on Tru64), define O_DIRECT to that. Patch From James Lemley. * tests/help-version (expected_failure_status_vdir): Redirect an expected disk-full diagnostic to /dev/null. 2006-02-06 Jim Meyering * src/unexpand.c (usage): Use two spaces (not one) to separate the --first-only option string from its description, so help2man formats the derived man page properly. * src/rm.c (usage): Likewise for --no-preserve-root. * src/chown.c (usage): Likewise. * src/chgrp.c (usage): Likewise. Add a rule to ensure that the above doesn't happen again. * Makefile.maint (sc_two_space_separator_in_usage): New rule. (syntax-check-rules): Add it. * .x-sc_two_space_separator_in_usage: New empty file. * Makefile.am (EXTRA_DIST): Add .x-sc_two_space_separator_in_usage. 2006-02-06 Jim Meyering * src/cp.c (usage): Use two spaces (not one) to separate each option string from its description, so help2man formats the derived man page properly. * src/mv.c (usage): Likewise. Patch from Nicolas François in http://bugs.debian.org/351601. 2006-02-04 Jim Meyering * src/copy.c (copy_internal): cp -RL would fail when encountering the same directory more than once in the hierarchy beneath a single command-line argument. That is legitimate, e.g. when there are two or more symbolic links, each pointing to some directory that would not otherwise be copied. Reported by Christophe LYON. * tests/cp/cp-deref: New file. Test for today's fix. * tests/cp/Makefile.am (TESTS): Add cp-deref. * NEWS: Document this. 2006-02-03 Jim Meyering * configure.ac: Require automake-1.9.6, not 1.8.3. 2006-02-01 Paul Eggert * src/od.c (usage): Mention that -t a ignores high order bit. Documentation problem reported by Ed Avis. 2006-02-01 Jim Meyering * src/pwd.c (find_dir_entry): Remove unused local, `ent_sb_valid'. 2006-01-30 Paul Eggert * src/head.c (main): Use a better diagnostic when someone uses a trailing numeric option in an invalid way. Problem reported by Karl Berry. * src/tail.c (parse_options): Likewise. 2006-01-30 Jim Meyering * man/wc.x: Include `count' keyword in man page synopsis, per suggestion from http://bugs.debian.org/181585. 2006-01-24 Paul Eggert * src/df.c (show_dev): If the file system claims to have more available than total blocks, report the number of used blocks as being total - available (a negative number) rather than as garbage. Problem reported by Toralf Foerster. 2006-01-24 Jim Meyering * src/tail.c (tail_forever): Don't exit-nonzero when an attempt to put a regular file in O_NONBLOCK mode fails with EPERM. That happens on Linux (up to 2.6.15) when using tail -f on a file with the append-only attribute. Reported by Dean Gaudet. For details, see http://savannah.gnu.org/bugs/?func=detailitem&item_id=15473. * NEWS: Mention this fix. * tests/tail-2/append-only: New file. Test for the above. * tests/tail-2/Makefile.am (TESTS): Add append-only. * tests/Makefile.am (check-root): Add tail-2/append-only 2006-01-21 Jim Meyering * NEWS: Mention fts-related improvements and bug fixes. 2006-01-19 Jim Meyering * tests/fmt/basic (pfx-1, pfx-2): New tests, to demonstrate the bug reported as http://bugs.debian.org/147577. Forwarded by Thomas Hood. 2006-01-18 Jim Meyering * tests/du/Makefile.am (TESTS): Add long-from-unreadable. 2006-01-17 Jim Meyering Now that fts no longer changes the current working directory, adjust its clients accordingly -- note that du.c uses fts but doesn't need any adjustment, since it doesn't operate on the actual files, but rather just uses the stat buffers provided by fts. * src/chown-core.c: Include "openat.h". Don't include "lchown.h". (restricted_chown): Accept a new parameter, CWD_FD, and use it in calling openat, lchownat, chownat, rather than open, lchown, chown. Update caller. * src/chmod.c: Include "openat.h". (process_file): Use chmodat (fts->fts_cwd_fd,... in place of chmod (... * tests/du/long-from-unreadable: New test, to exercise one small corner of fts.c. 2006-01-13 Jim Meyering * tests/Makefile.am (SUBDIRS): Add comments discouraging the addition of new directories under tests/. * tests/acl: Redirect stdin to /dev/null. Otherwise, FreeBSD 5.0's getfacl would hang. 2006-01-12 Jim Meyering * tests/du/long-sloop: Adjust not to hard-code the expected diagnostic corresponding to ELOOP. Solaris' diagnostic differs from that of GNU libc. Reported by Paul Eggert. * tests/du/long-sloop: Create file at end of symlink chain. * tests/misc/test: New file, with a test for one of the bugs fixed by yesterday's test.c changes. * tests/misc/Makefile.am (TESTS): Add test. 2006-01-11 Jim Meyering * tests/du/long-sloop: New file. Test for today's fts.c bug fix. That bug could make du -L, chgrp -L, or chown -L fail to diagnose a very long sequence of symbolic links (not necessarily a loop). * tests/du/Makefile.am (TESTS): Add long-sloop. 2006-01-11 Paul Eggert * src/test.c (test_syntax_error): Append a newline. All callers changed, except for the ones that didn't already append a newline. Bug reported by Eric Blake. 2006-01-11 Jim Meyering * src/system.h (X2NREALLOC): Now that verify_true is no longer void, cast its result to void, to avoid gcc's warning that ``left-hand operand of comma expression has no effect''. (DECIMAL_DIGIT_ACCUMULATE, X2REALLOC): Likewise. 2006-01-10 Jim Meyering * tests/chmod/no-x: Add a test for today's fts.c fix. 2006-01-10 Jim Meyering (tiny change) * src/ls.c (gobble_file): Use DTTOIF only if it's defined. This is necessary for Dragonfly. Patch by Joerg Sonnenberger. 2006-01-10 Paul Eggert * src/system.h (X2NREALLOC, X2REALLOC, DECIMAL_DIGIT_ACCUMULATE): Use verify_true instead of verify_expr, to sync with gnulib. 2006-01-08 Jim Meyering * src/date.c (usage): Adjust the formatting of the entries for %::z and %:::z (separate with two spaces, not one) so that help2man formats them properly. Reported by Philip Rowlands. 2006-01-06 Paul Eggert * configure.ac (gl_IGNORE_UNUSED_LIBRARIES): Add. 2006-01-06 Jim Meyering * Makefile.maint (copyright-check): Use date +%Y in place of hard-coded 2005. * src/remove.c (rm_1): Remove `static' attribute on local `status'. First off, the attribute should have been `volatile' (not static) to avoid longjmp-related risk of clobber. Secondly, now there is no longer any risk of a local variable being clobbered, so there's no need for any attribute at all. 2006-01-05 Jim Meyering * src/remove.c: Give a few functions the inline attribute. (AD_pop_and_chdir): Use gotos to avoid some duplication. (AD_push): Rewrite an assertion so that the entire computation goes away when assertions are turned off. * src/tail.c (ENOSYS) [!defined ENOSYS]: Don't define here. It's already defined in "system.h". * Makefile.maint: Add a FIXME comment. 2006-01-04 Jim Meyering * ChangeLog: Remove entries from 2005-10-22 and earlier. * ChangeLog-2005: New file, for entries up to version 5.92. 2006-01-03 Jim Meyering * tests/du/no-x: Also allow a slightly different diagnostic -- the one you get when using openat-enabled fts.c and du (coming soon). * tests/chmod/no-x: Likewise. * tests/chgrp/no-x: Likewise. * src/system.h (O_DIRECTORY) [!defined O_DIRECTORY]: Define. 2006-01-02 Paul Eggert * src/chown-core.c (RC_do_ordinary_chown): New enum value. (restricted_chown): Return it, if the file cannot be accessed due to EPERM, or if no uid or gid are required, or if the file is neither a directory nor a regular file. Rewrite to avoid gotos. (change_file_owner): Handle RC_do_ordinary_chown case. Rewrite to avoid gotos. * tests/chgrp/basic: Make sure we can change the group of inaccessible files. * src/date.c (usage): Explain %g, %G, and %V a bit better. 2006-01-02 Jim Meyering * src/copy.c (set_owner): Correct a comment. * src/tail.c (parse_options): Change warning to say that --retry is useful `mainly' (not `only') when following by name. Reported here: http://bugs.debian.org/273781 2006-01-01 Paul Eggert * NEWS: Document that mkfifo and mknod -m no longer set special bits. * src/copy.c: Include lchmod.h. (copy_internal): Use lchmod rather than chmod. * src/cp.c: Include lchmod.h. (re_protect, make_dir_parents_private): Use lchmod rather than chmod. * src/mkdir.c: Include lchmod.h. (usage): Clarify -m's operation. (main): Use lchmod rather than chmod. Don't use lchmod unless the new mode contains bits outside the 777 range. * src/mkfifo.c (usage): Clarify -m's operation. (main): If -m is given, don't invoke chmod; use umask 0 instead. Report an error if -m asks for bits outside the 777 range. * src/mknod.c (usage, main): Likewise. * src/mkdir.c, src/mkfifo.c, src/mknod.c: Undo 2005-12-19 changes. 2005-12-27 Jim Meyering * Makefile.maint (sc_obsolete_symbols): Prohibit use of O_NDELAY. (sc_prohibit_assert_without_use): New rule. (syntax-check-rules): Add it to the list. * .x-sc_prohibit_assert_without_use: New empty file. * Makefile.am (EXTRA_DIST): Add it. * Makefile.maint (CVS_LIST): Define in terms of $(srcdir). * cp.c, df.c, link.c, mknod.c, nice.c, sleep.c, unlink.c: Don't include ; it wasn't used. 2005-12-26 Paul Eggert * src/chown-core.c (restricted_chown): Don't try O_WRONLY unless O_RDONLY failed wth EACCES. * src/remove.c (fd_to_subdirp): Open with O_DIRECTORY | O_NOCTTY | O_NOFOLLOW too, for consistency with other dir-openers. Use POSIX-preferred O_NONBLOCK rather than O_NDELAY. (is_empty_dir): Likewise. * src/shred.c (wipename): Likewise. Don't bother trying to open dir for writing, since POSIX prohibits it. 2005-12-22 Jim Meyering * tests/help-version: Redirect stderr to /dev/full, to suppress write error diagnostic. 2005-12-19 Jim Meyering * src/mkdir.c, src/mknod.c, src/mkfifo.c (main) Avoid a minor race condition when `-m MODE' is specified, by using open, fchown, and close rather than just chown. To do that reliably -- even with an overly restrictive umask -- ensure that each mkdir, mknod and mkfifo call uses a mode including at least owner-read access. * src/mknod.c (main): When `-m MODE' is specified, exit nonzero if the subsequent chown (or equivalent open,fchown,close) fails. * tests/misc/mknod: New tests. * tests/misc/Makefile.am (TESTS): Add mknod. 2005-12-17 Jim Meyering * src/remove.c (is_empty_dir): Open with O_NDELAY, so we don't hang, e.g., on a named pipe. (OPEN_NO_FOLLOW_SYMLINK): Remove definition. Use O_NOFOLLOW in place of all uses, since it is guaranteed (system.h) to be defined. 2005-12-05 Andreas Gruenbacher Add POSIX ACL support * src/ls.c: Switch back from HAVE_ACL to USE_ACL: The acl() syscall is no requirement for ACL support; particularly, it does not exist on systems that have POSIX ACLs. * src/copy.h (cp_option_init) [umask_kill]: Remove member. * src/cp.c (umask_kill): With default acls, the umask is not to be applied. Remove umask_kill, don't change the process umask, and let the kernel apply the umask where appropriate. * src/cp.c (make_dir_parents_private): Fix logic for POSIX ACLs. * src/copy.c (get_dest_mode): Remove; it is obsolete after removing umask_kill. (copy_reg, copy_internal): Use copy_acl and set_acl instead of fchown/chown. Fix the logic for POSIX ACLs. (chown_succeded): Remove; we now always copy acls and preserve S_ISUID, S_ISGID, and S_ISVTX when needed, no matter if we did a chown before or not. * src/mv.c, src/install.c (cp_option_init): Don't set umask_kill member. * src/Makefile.am (dir_LDADD, ls_LDADD, vdir_LDADD, cp_LDADD, mv_LDADD, ginstall_LDADD): On systems with an ACL library, arrange to link with it via $(LIB_ACL), for the utilities that need it. 2005-12-16 Paul Eggert * src/remove.c (OPENAT_CWD_RESTORE__REQUIRE): Remove. (OPENAT_CWD_RESTORE__ALLOW_FAILURE): Likewise. (fd_to_subdirp): Remove openat_cwd_restore_allow_failure arg; its value is now signified by whether cwd_errno is null. (fd_to_subdirp, remove_dir, rm_1); Change cwd failure indicator from pointer-to-bool to pointer-to-errno-value. All callers changed. (rm_1): Don't bother setting a local cwd failure flag and then ORing it into the caller's. Just set the caller's. (rm): Use cwd failure errno value to print a slightly-better diagnostic. 2005-12-15 Jim Meyering * src/stat.c (print_it): Properly handle a backslash at the end of a --printf format string. Reported by Paul Eggert. * tests/misc/stat-printf (end-bs): Add a test for the above. 2005-12-15 Paul Eggert * tests/acl: Port to pre-POSIX shells like Solaris 8 /bin/sh. Don't assume /etc/passwd contains user names; use 'id' instead. 2005-12-15 Jim Meyering stat: revert behavior of --format=FMT (-c) stat: add new option: --printf=FMT * NEWS: Mention this. * src/stat.c (isodigit, octtobin, hextobin): Define. (PRINTF_OPTION): Define. (interpret_backslash_escapes, trailing_delim): New globals. (usage): Document them. Alphabetize on long option names. (print_esc_char): New function. (print_it): Rewrite, in order to handle backslash escapes. (main): Handle new option. Set globals for --format, too. * tests/misc/stat-printf: Test --printf and --format. * tests/misc/Makefile.am (TESTS): Add stat-printf. 2005-12-14 Paul Eggert * NEWS: sort now reports incompatible options. * src/sort.c (incompatible_options, check_ordering_compatibility): New functions. (main): Use them. Don't bother with a usage message for "sort -c a b", for consistency with other error diagnostics. * tests/sort/Test.pm (incompat1, incompat2, incompat3, incompat4): New tests. * src/cat.c (main): Undo previous change. close_stdout already does the check, so the previous change wasn't necessary. 2005-12-13 Paul Eggert * src/cat.c (main): Check for close (STDOUT_FILENO) failure. 2005-12-12 Paul Eggert Install a more-conservative approach for sort -R. It's the same basic idea as the existing code, except it uses the full ISAAC approach (called the "more kosher" approach in the existing comments). This makes "sort -R" quite a bit slower (about a factor of 2 on my little tests involving 10000 lines on a 2.4 GHz P4), but I think it's better to be conservative here at first, and review any performance improvements carefully. * .x-sc_require_config_h: Add src/rand-isaac.c. * src/rand-isaac.h: Remove. All uses now simply include rand-isaac.c. * src/Makefile.am (noinst_HEADERS): Remove rand-isaac.h. (shred_SOURCES, sort_SOURCES): Remove. (EXTRA_DIST): Add rand-isaac.c. * src/rand-isaac.c: Revert to what used to be in shred.c, without changing it to allow for varying numbers of words in the state. Alter so that we include rand-isaac.c directly rather than compiling it and linking to it. Don't include config.h or system.h; that's the includer's responsibility. Omit functions that are specific to shred. (ISAAC_LOG, ISAAC_WORDS, ISAAC_BYTES, struct isaac_state, ind): (isaac_step, struct irand_state): Resurrect these, with the same defns that used to be in shred.c. (ISAAC_SIZE, isaac_new, isaac_copy): Remove. (isaac_refill, isaac_seed_start, isaac_seed_data, irand_init, irand32): static again. (struct isaac_state, isaac_refill, isaac_mix, isaac_init): (isaac_seed_start, isaac_seed_data, isaac_seed_finish, isaac_seed): (irand_init, irand32, irand_mod): Number of words is constant again. (struct irand_state, irand_init, irand32, irand_mod): Move to shred.c. * src/shred.c: Include rand-isaac.c rather than rand-isaac.h. * src/sort.c: Likewise. * src/shred.c (fillrand, dopass, main): Undo previous change. (struct irand_state, irand_init, irand32, irand_mod): Moved back here, from rand-isaac.c. * src/sort.c: Don't include md5.h; it wasn't needed. (struct keyfield): Rename random_hash to random, for consistency with the other member names. All uses changed. (usage): Tweak wording to mention STRING for --seed option. (short_options): Rorder for consistency with other programs. (rand_state): Now a struct, not a pointer to one. All uses changed. (HASH_WORDS, HASH_SIZE): Remove. (get_hash): Remove comments around resbuf size, since we can assume C89. Use a "more-kosher" (but slower) approach of invoking isaac_refill. (keycompare): Adjust to the new get_hash. Add a FIXME. (badfieldspec): Omit recently-introduced comment; it isn't needed. (main): Don't set need_random simply because gkey has it set; that doesn't necessarily mean we'll need random numbers. Redo seeding to match new get_hash approach. 2005-12-10 Jim Meyering * src/Makefile.am (noinst_HEADERS): Add rand-isaac.h. Avoid shred segfault on 64-bit systems. * src/rand-isaac.c (isaac_refill): Don't try to negate a local of type uint32_t. Make the local an `int' instead. * NEWS: Mention sort's new options. * src/rand-isaac.c (isaac_mix): Declare to be static. Mark all other functions as `extern' so the tight-scope part of `make distcheck' passes once again. * src/rand-isaac.h (isaac_mix): Remove declaration. * src/sort.c (get_hash): Change position of `*' in parameter type to conform with convention. (main): Split a long line so it fits in 80 columns. (keycompare): Remove stray SPACE before TAB that was causing `make distcheck' to fail. * src/shred.c: Don't include gethrxtime.h. No longer needed. * tests/misc/sort-rand: New file: basic tests for the new options. * tests/misc/Makefile.am (TESTS): Add sort-rand. 2005-12-10 Frederik Eaton * src/Makefile.am (sort_LDADD): Add $(LIB_GETHRXTIME). (shred_SOURCES, sort_SOURCES): New macros, so we compile rand-isaac.c. * src/rand-isaac.c: New file, containing ISAAC code that was in shred.c. Make state size runtime-configurable. (isaac_new, isaac_copy): New functions. * src/rand-isaac.h: New file. * src/shred.c: Include rand-isaac.h. Move ISAAC code to rand-isaac.c. (fillrand, main): Adjust to the fact that the state size is now runtime-configurable. * src/sort.c (short_options, long_options, WORDS, keycompare, main): (usage): Add options --random-sort and --seed to implement a random shuffle. Include md5.h and rand-isaac.h. (get_hash): New function. (rand_state): New var. (HASH_WORDS, HASH_SIZE): New macros. 2005-12-09 Paul Eggert * tests/dd/misc: Add test for dd iflags=noatime. 2005-12-09 Jim Meyering * src/sort.c (usage): Mention white space vs -b and -t options. From The Wanderer. 2005-12-09 Eric Blake * src/test.c (main): Fix misleading comment. 2005-12-07 Paul Eggert * NEWS: Mention dd's new noatime flag. * src/system.h (O_NOATIME): Define to 0 if not already defined. * src/dd.c (flags, usage): Add support for noatime flag. 2005-12-07 Jim Meyering Distribute the cvsu script, used only by `make syntax-check'. * Makefile.am (EXTRA_DIST): Add build-aux/cvsu. * Makefile.maint (CVS_LIST): Use build-aux/cvsu, now that we distribute a copy of this script. * .x-sc_unmarked_diagnostics: Add build-aux/cvsu. * tests/mv/acl: exit-77 before the trap, not after, if we fail to create a temporary directory on another partition. From Andreas Gruenbacher. 2005-12-06 Tomas Pospisek (tiny change) * man/basename.x: Cross-reference to dirname and readlink. * man/dirname.x: Cross-reference to basename and readlink. 2005-12-05 Andreas Gruenbacher * src/copy.c [!HAVE_FCHOWN]: Define fchown(...) to -1. (set_owner, preserve_author): New functions, factored out of copy_reg. (copy_reg): Use them. (copy_internal): Use them here, too. 2005-12-04 Jim Meyering * src/sleep.c (usage): Say what happens with two or more arguments. Suggested by Justin Pryzby. * src/uptime.c (print_uptime): Move decl of `upsecs' into scope where it's used. 2005-12-03 Jim Meyering * src/rm.c (long_opts): Change the name of each undocumented, for- testing-only option to start with `-', so that it cannot render ambiguous any prefix it happens to share with some other option name. Problem reported by Eric Blake. * src/head.c (long_options): Likewise. * src/tail.c (long_options): Likewise. * tests/misc/head-elide-tail: Update uses of undocumented, for- testing-only --presume* options to start with `---'. * tests/rm/dangling-symlink: Likewise. * tests/rm/dir-no-w: Likewise. * tests/rm/isatty: Likewise. 2005-11-30 Jim Meyering * Makefile.maint: Add a comment about cvsu. 2005-11-25 Paul Eggert * NEWS: df updates for "none", "proc", inaccessible file systems. * src/df.c (show_point): Ignore inaccessible file systems. (usage): -a includes dummy file systems, not size-0 file systems. * src/od.c (unsigned_long_long_int): Renamed from ulonglong_t, to avoid collision with POSIX name space. All uses changed. 2005-11-24 Jim Meyering * tests/Makefile.am (EXTRA_DIST): Add acl to the list. * tests/acl: Add `$0: ' prefix to diagnostics. * .x-sc_require_config_h: Add lib/buffer-lcm.c to the list. 2005-11-23 Paul Eggert * src/copy.c: Improve performance a bit by optimizing away unnecessary system calls and going to a block size of at least 8192 (on normal hosts, anyway). This improved performance 5% on my Debian stable host (2.4.27 kernel, x86, copying from root ext3 file system to itself). Include "buffer-lcm.h". (copy_reg): Omit last argument. All callers changed. Use xmalloc to allocate rather than trusting alloca (which is unwise with large block sizes). Declare locals more locally, if possible. Use uintptr_t words instead of int words, for a bit more speed when looking for null blocks on 64-bit hosts. Optimize away reads of zero bytes on regular files. In the typical case, insist on 8 KiB buffers, at least. Avoid unnecessary extra call to fstat when checking for sparse files. Avoid now-unnecessary cast to off_t, and "0L". Avoid unnecessary test of *new_dst when checking for same owner and group. 2005-11-22 Paul Eggert * src/remove.c (rm): Don't assume C99 for-loop syntax. 2005-11-22 Jim Meyering * src/remove.c (AD_push): Remove debugging cruft. * tests/rm/unread2 (rm): Change expected diagnostic, `cannot open directory' to `cannot remove', to align with new version of rm. * tests/rm/rm2: Ensure that rm now continues removing entries even after certain types of failure. * src/remove.c: Rewrite. Now, this module is reentrant on systems that provide openat (Solaris), and on systems like Linux+procfs where our openat emulation code is reentrant. This also fixes a few low-probability leaks and eliminates some code that could, in very unusual circumstances, cause rm() (via a callee) to exit. * NEWS: Mention this. * configure.ac: Put copyright dates all on one line so the emacs function that updates them works properly. 2005-11-18 Paul Eggert * configure.ac (AM_PROG_CC_C_O): Add. Needed for CVS Automake. Problem reported by Eric Blake. (AC_PROG_CC_STDC): Use this instead of AC_PROG_CC, so that we get a standard-conforming compiler. This relies on the new m4/c.m4 file. Note that it's a bit tricky, since c.m4 doesn't define AC_PROG_CC_STDC; we are relying on Autoconf 2.59 internals. m4/c.m4 can go away with Autoconf 2.60 comes out. 2005-11-17 Jim Meyering * src/remove.c (AD_mark_helper): Make a `char *' parameter `const'. (AD_mark_current_as_unremovable): Likewise, but for a local. (rm_1): Likewise. * tests/mv/acl: Let traps handle removing temporary directories. Expect acl-related tests to fail, until the corresponding patches are committed. * tests/mv/Makefile.am (XFAIL_TESTS): Add acl. * tests/cp/Makefile.am (XFAIL_TESTS): Likewise. ACL tests, from Andreas Gruenbacher. * tests/acl, tests/mv/acl, tests/cp/acl: New files. * tests/mv/Makefile.am (TESTS): Add acl. * tests/cp/Makefile.am (TESTS): Add acl. * src/ls.c (basename_is_dot_or_dotdot): Correct wording in comment. 2005-11-16 Paul Eggert * NEWS: Improve quality of ln's diagnostics. * src/ln.c (do_link, usage): Likewise. (do_link): Don't use alloca on a buffer of unbounded size. 2005-11-16 Jim Meyering * tests/cp/fail-perm: Accommodate HPUX. It appears to fail with EACCES rather than EPERM. Reported by Peter O'Gorman here: http://article.gmane.org/gmane.comp.gnu.core-utils.bugs/5766 2005-11-14 Jim Meyering * NEWS (sort): Mention consequences of today's mkstemp-safer.c fix. 2005-11-13 Jim Meyering * announce-gen: Accept new option, --gpg-key-id=ID and emit a blurb telling how to use the .sig files. * Makefile.cfg (gpg_key_ID): Define. * Makefile.maint (announcement): Use new option and key. Require that most .c files include . * Makefile.maint (sc_require_config_h): New rule. (syntax-check-rules): Add it. * .x-sc_require_config_h: New file listing exceptions to the above rule. Some are legit, others are simply grandfathered in. * Makefile.am (EXTRA_DIST): Add .x-sc_require_config_h here, too. 2005-11-12 Jim Meyering * src/checksum.h, src/md5.c, src/sha1sum.c: Remove now-unused files. 2005-11-11 Jim Meyering * NEWS: Mention `readlink -f' bug fix in 5.3.0 news. Mention new readlink options in 5.3.0's `New features' section. Spotted by Thomas Hood. 2005-11-08 Jim Meyering * NEWS: Merge in changes from b5_9x branch. 2005-11-08 Paul Eggert * NEWS: ls now defaults to --time-style='locale', which in turn acts like --time-style='posix-long-iso' if the locale settings are messed up. * src/ls.c (decode_switches): Implement this. 2005-11-08 Jim Meyering * tests/du/2g: s/expensive/very expensive/ in a comment. From Paul Townsend. 2005-10-17 Eric Blake * src/ls.c (usage): Fix descriptions of --sort, --time. Reported by Vitaly A. Ostanin. 2005-11-04 Paul Eggert * src/ln.c: Include filenamecat.c. (FILE_BASENAME_CONCAT): Remove. (do_link): Remove last arg DEST_IS_DIR. All callers changed. (main): Use file_name_concat, base_name, and strip_trailing_slashes instead of FILE_BASENAME_CONCAT. This simplifies the code, and avoids the use of alloca. 2005-11-04 Jim Meyering * src/du.c (process_file): Don't overflow for files of size >= 2^31 on systems with stat.st_blocks of a signed 32-bit type. This bug causes trouble on some AIX 5.1 systems. Report and trivial patch from Paul Townsend: * NEWS: Mention this. * tests/du/2g: New (very-expensive) test for the above-fixed bug. * tests/du/Makefile.am (TESTS): Add it here. * tests/very-expensive: New file. * tests/Makefile.am (EXTRA_DIST): Add it here. * tests/cp/perm: Mark this test as `very-expensive', too. 2005-11-02 Paul Eggert * NEWS: Mention that rm -d and maybe ln -d are scheduled for removal in 2006. * src/remove.h (struct rm_options): Remove unlink_dirs. All uses removed. * src/rm.c (usage): Don't mention rm -d. 2005-11-02 Jim Meyering * tests/dd/skip-seek: Fix typo in comment: s/fileutils/coreutils. From Andreas Schwab. * tests/dd/unblock-sync: Redirect stderr to /dev/null so the `M+N records in/out' lines don't pollute `make check' output. * tests/dd/skip-seek (sk-seek4): New test, to exercise the bug fixed on 2005-10-31. This test uses the new, IN_PIPE specifier. * tests/Coreutils.pm: Accept a new type of input specifier: IN_PIPE, to indicate that the input file should be piped into the command under test (via `cat FILE | $prog ...'). * src/remove.c (remove_entry): Emit a better diagnostic when rm (without -r) fails to remove a directory on a non-Linux system. This change affects only newer Solaris systems (with priv_* functions like priv_allocset). Reported by Keith Thompson. * tests/rm/dir-nonrecur: New file/test for the above fix. * tests/rm/Makefile.am (TESTS): Add dir-nonrecur. 2005-11-01 Paul Eggert * NEWS: "tail -c 2 FILE" and "touch 0101000000" now operate as POSIX 1002.1-2001 requires. * src/tail.c (parse_obsolete_option): Implement this. Problem reported by Vincent Lefevre. * src/touch.c (main): Pass PDS_PRE_2000 to posixtime. * tests/tail/Test.pm (c-2, c-2-minus, c2, c2-minus): New tests. (test_vector): Add special cases for _POSIX2_VERSION, and regularize the old ones a bit. * tests/touch/obsolescent: Add y2000 test. 2005-10-31 Paul Eggert * src/dd.c (skip): Fix off-by-one error reported by Theodoros V. Kalamatianos. 2005-10-30 Paul Eggert * tests/mkdir/p-3: Require that the test be run as non-root. Problem and trivial fix reported by Theodoros V. Kalamatianos. 2005-10-28 Paul Eggert * src/ln.c (FILE_BASENAME_CONCAT): Omit unnecessary slashes in the boundary between DEST and SOURCE in the result. 2005-10-26 Dmitry V. Levin * src/md5sum.c (main) [!O_BINARY]: Changed default read mode back to text, to sync with documentation and for backwards compatibility. 2005-10-25 Jim Meyering * tests/dircolors/simple (other-wr): Add an explicit test for the dircolors bug (NULL-dereference) fixed yesterday. 2005-10-24 Jim Meyering * src/tac.c (tac_file): When determining whether a file is seekable, also test whether it is a tty. Using only the lseek-based test would give a false positive on Solaris. Reported by Peter Fales. 2005-10-24 Dmitry V. Levin * tests/install/d-slashdot: New test, for "install -d" failure. * tests/install/Makefile.am (TESTS): Add d-slashdot. * tests/mkdir/p-slashdot: New test, for "mkdir -p" failure. * tests/mkdir/Makefile.am (TESTS): Add p-slashdot. 2005-10-24 Jim Meyering * src/dircolors.c (ls_codes): Add missing comma. Anonymous report and patch from http://savannah.gnu.org/bugs/?func=detailitem&item_id=14849 * src/dircolors.c: Add compile-time assertion that the slack_codes and ls_codes arrays have the same number of elements. This would have prevented the above-fixed bug. * src/expand.c (parse_tab_stops): Add a comment to make this function identical to the one in unexpand.c. * src/unexpand.c (parse_tab_stops): Adjust syntax to make this function identical to the one in expand.c. * src/expand.c (next_file): Don't assume fopen cannot return stdin. 2005-10-23 Jim Meyering * src/md5sum.c (digest_check, main): Use ptr_align rather than a dangerous pointer-value-to-`unsigned' cast. * NEWS: mention the new sha* programs. * AUTHORS: Add new sha* programs. 2005-08-28 David Madore Add new programs: sha224sum, sha256sum, sha384sum, sha512sum. * README: Add their names to the list. * src/md5sum.c: Provide framework for computing sha-2 hashes. * src/Makefile.am (sha224sum, sha256sum, sha384sum, sha512sum): Rules for compiling sha-2 utilities (noinst_HEADERS): Remove checksum.h. * man/sha512sum.x, man/sha384sum.x, man/sha256sum.x, man/sha224sum.x: New files. * man/Makefile.am (dist_man_MANS): Add the corresponding .1 names. (sha224sum.1, sha256sum.1, sha384sum.1, sha512sum.1): New dependencies. * tests/misc/sha224sum, tests/misc/sha256sum: New files. * tests/misc/sha384sum, tests/misc/sha512sum: New files. * tests/misc/Makefile.am (TESTS): Add new sha224sum, sha256sum, sha384sum, sha512sum test scripts here rather that each in its own directory. 2005-08-28 David Madore * tests/sha1sum/basic-1 (million-a): Add the "million a's" test (one of the FIPS test vectors). 2005-10-23 Jim Meyering * configure.ac: Use 6.0-cvs as the version string. * NEWS: Adjust accordingly.