git: /bin/mv: Sync with FreeBSD

John Marino marino at
Fri Nov 16 01:28:11 PST 2012

commit 46c7fb85d65f149352ad0eeb4d067b97ff57ce9e
Author: John Marino <draco at>
Date:   Fri Nov 16 10:21:09 2012 +0100

    /bin/mv: Sync with FreeBSD
    1. Utilize central <paths.h> header
    2. Meet posix spec for moving directory to existing non-empty directory
    3. Meet posix spec for not moving directory over a file
    4. Don't chop IO into pieces, use MAXPHYS
    5. Add -h flag (similar to ln -h flag)
    6. Test for input_is_terminal
    7. Regression test added.
    1. remove pathnames.h file and add _PATH_RM to paths.h
    2. Moving a directory to an existing non-empty directory will now fail as
    3. Prior to change this test past, but after change it failed on
       cross-link devices.  Original code added to check for case and return
       -1 for the cross-link case.
    4. Read files in one block and improve warn messages.
    5. Using -h flag will force mv to treat a symbolic link to a directory
       for the target as a symbolic link instead of a directory.  This makes
       it possible to atomically update a symbolic link using rename().
    6. POSIX requires this behavior:
       if (exists and (NOT f_options) AND
         ((not_writable AND input_is_terminal) OR i_option)) then
       This behavior was implemented.
    7. Passes all tests in suite.  Prior to change it failed 2 of 32 tests.

Summary of changes:
 bin/mv/mv.1                        |   33 +++--
 bin/mv/mv.c                        |  191 ++++++++++++++----------
 bin/mv/pathnames.h                 |   35 -----
 include/paths.h                    |    1 +
 tools/regression/bin/mv/Makefile   |    4 +
 tools/regression/bin/mv/ |  296 ++++++++++++++++++++++++++++++++++++
 tools/regression/bin/mv/regress.t  |    6 +
 7 files changed, 443 insertions(+), 123 deletions(-)
 delete mode 100644 bin/mv/pathnames.h
 create mode 100644 tools/regression/bin/mv/Makefile
 create mode 100644 tools/regression/bin/mv/
 create mode 100644 tools/regression/bin/mv/regress.t

DragonFly BSD source repository

More information about the Commits mailing list