Age | Commit message (Collapse) | Author |
|
(copy_reg): Align I/O buffers to page boundaries.
|
|
(copy_internal): Compare time stamps using utimecmp rather than
MTIME_CMP.
|
|
mv mistakenly fails to preserve a hard link. Reported by IIDA Yosiaki.
When moving a set of N hard-linked files between
partitions, via two or more command line arguments where the
command line argument containing the Nth link contains no other
link to that same file, mv would mistakenly copy the file, rather
than hard-linking it to the other(s). That happens because when the
final link is processed, its link count has been reduced to 1 since
the other links have been `copied' to the destination partition
and the source links have been removed.
(copy_internal): When in move mode, use the source dev/inode
pair to look up destination name even when st_nlink == 1.
|
|
produce an invalid copy on the destination device.
(copy_reg): Even with --sparse=always, try to
make `holes' only if the destination is a regular file.
Reported by Szakacsits Szabolcs.
|
|
portable, since some systems (OSF V5.1, Solaris 2.5.1) provide static
inline `stat' and `lstat' functions, thus making the tests of
`xstat == lstat' in copy.c always fail.
(copy_dir): Set `.dereference' member, not .xstat.
(copy_internal): Use `XSTAT (x, ...)' in place of `*(x->xstat) (...)'.
Use `x->dereference == DEREF_NEVER' in place of `x->xstat == lstat'.
(valid_options): Remove now-obsolete FIXME comments.
|
|
|
|
The former is more maintainable and usually shorter.
|
|
type changes (unsigned int -> size_t) in hash.c.
|
|
S_ISLNK or S_ISSOCK. The S_IS* macros are guaranteed to be defined
via system.h.
|
|
|
|
Remove duplicate inclusion of "same.h".
|
|
on a partition (e.g. VFAT) on which distinct names may refer to the
same directory entry (often due to variations in case), and when the
link count for the file is 1, mv no longer unlinks the file.
FIXME: this is a band-aid fix. If the file happens to have a link
count of 2 or greater, mv will still unlink it.
(same_file_ok): Invoke same_name (which might still
return false for names that refer to the same directory entry)
only if the link count is 2 or more.
|
|
(copy_internal): Set file timestamps with utimens, not utime.
|
|
|
|
adequate, since join.c uses alloca, yet lacked an in-file #pragma.
Remove `#pragma alloca'.
|
|
Use `error_t' (rather than int) as type for local `err'.
|
|
Fix author preservation code.
|
|
(triple_free): Don't apply cast to argument of free.
(seen_file): Add cast here instead.
|
|
xrealloc, and xcalloc return values and of xrealloc's first argument.
|
|
`mv a b' would not remove `a' in some unusual cases. Work around
this by unlinking `a' when necessary.
(same_file_ok): Add an output parameter.
Set it in the offending case.
(copy_internal): When necessary, unlink SRC_PATH and inform caller.
|
|
failure to create a hard link, do not remove the entry associating
the source dev/ino with the destination file name.
|
|
existing destination file, unlink that file and try again.
|
|
|
|
rename a directory, this code would never attempt to rename any
other file in that directory, but would thenceforth always copy.
On some systems (NetApp version ??), renaming a directory may fail
with EXDEV, yet renaming files within that directory to a newly-
created destination directory succeeds.
(copy_internal): Remove local, move_mode;
use x->move_mode instead. Based on a patch from Tom Haynes.
|
|
Patch by Alfred M. Szmidt.
|
|
`failed to preserve ...' to make the failure clearer.
|
|
(copy_internal): Preserve the stat.st_author field.
|
|
from gcc -W about comparison between signed and unsigned.
(copy_internal): Likewise, but use a cast.
|
|
down to just before the first use of that variable. Otherwise, it was
possible to make mv (and probably cp, too) malfunction when copying
hard-linked files into a directory containing at least one of the
source file names. Call forget_created everywhere thereafter where
this function returns without creating a destination file that might
subsequently be linked. Reported by Iida Yosiaki.
|
|
|
|
(using errno from the failed unlink) when a cross-device `mv'
fails, e.g., because the destination cannot be unlinked.
Prompted by a report from Karl Berry.
|
|
Instead, just skip it like the diagnostic says.
Reported by Paul Eggert.
|
|
reporting replaced files. This avoids a bug in the code,
which mishandled ino_t wider than long.
|
|
|
|
|
|
issue a warning that `cp -r' is not portable.
|
|
whereby an unprivileged user could gain read access to otherwise-
inaccessible files when root uses cp or mv to copy a hierarchy
belonging to that user.
|
|
|
|
(same_file_ok): Detect a case that would have lead to the errno==ENOENT
condition above (and a misleading diagnostic), and return 0 so we give
a diagnostic about the source and destination being the same file.
(copy_internal): Use an explicit test for errno==EXDEV to detect
that rename has failed because source and destination are on
different devices. This reverts part of a change from 1997-12-13,
and is to avoid letting a race condition evoke a bogus diagnostic.
Note that while POSIX has encouraged the errno==EXDEV test for
years, it was inadequate back in 1997. I'm hoping that many
more systems have conforming support these days.
Reported by Michael Gaughen <mgaughen@polyserve.com>
|
|
(src_info_init): New function.
(copy_internal): Warn and return early for the second and subsequent
occurrences of the same source file named on the command line.
|
|
(copy_internal): Update caller.
|
|
(seen_file): Rename from seen_dest. Rename parameters accordingly.
(record_file): Rename from record_dest. Rename parameters accordingly.
(triple_hash): Rename from dest_info_hash.
(triple_compare): Rename from dest_info_compare.
(triple_free): Rename from dest_info_free.
|
|
(dest_info): Remove declaration of file-scoped global.
(dest_info_init): Require a parameter.
Update all callers.
(seen_dest): Require a hash table parameter. Update callers.
(record_dest): Likewise.
|
|
gcc-3.0 didn't complain.
|
|
(copy_internal): Don't use PATH_MAX.
Rewrite the symlink-copying code to use xreadlink.
|
|
(dest_info_init): Make the hash table code use it.
(record_dest): Store each DEST in malloc'd memory. Hence the above.
Use dest_info_free to free the `ent' we couldn't insert.
|
|
describing the test for when to record (via remember_copied)
a <dst_path, source_dev, source_ino> triple.
Relax the test that guards the hard-linked-dir check and
the hard-link-preserving code.
|
|
s/preserve_owner_and_group/preserve_ownership/, and
s/preserve_chmod_bits/preserve_mode/.
* src/copy.c, src/cp.c, src/install.c, src/mv.c: Update all uses.
|
|
file name, free the temporary `dst_path' allocated here.
|
|
Thank heavens for regression tests.
|