cp: fix recursion check to not waste bytes remembering names of dirs

This commit is contained in:
Denis Vlasenko 2007-08-27 17:02:19 +00:00
parent 8a5fab6333
commit 0f214ecef0

View File

@ -114,7 +114,7 @@ int copy_file(const char *source, const char *dest, int flags)
if (S_ISDIR(source_stat.st_mode)) { if (S_ISDIR(source_stat.st_mode)) {
DIR *dp; DIR *dp;
const char *existing_name; const char *tp;
struct dirent *d; struct dirent *d;
mode_t saved_umask = 0; mode_t saved_umask = 0;
@ -124,11 +124,11 @@ int copy_file(const char *source, const char *dest, int flags)
} }
/* Did we ever create source ourself before? */ /* Did we ever create source ourself before? */
existing_name = is_in_ino_dev_hashtable(&source_stat); tp = is_in_ino_dev_hashtable(&source_stat);
if (existing_name) { if (tp) {
/* We did! it's a recursion! man the lifeboats... */ /* We did! it's a recursion! man the lifeboats... */
bb_error_msg("recursion detected, omitting directory '%s'", bb_error_msg("recursion detected, omitting directory '%s'",
existing_name); source);
return -1; return -1;
} }
@ -222,8 +222,7 @@ int copy_file(const char *source, const char *dest, int flags)
int dst_fd; int dst_fd;
if (ENABLE_FEATURE_PRESERVE_HARDLINKS && !FLAGS_DEREF) { if (ENABLE_FEATURE_PRESERVE_HARDLINKS && !FLAGS_DEREF) {
char *link_target; const char *link_target;
link_target = is_in_ino_dev_hashtable(&source_stat); link_target = is_in_ino_dev_hashtable(&source_stat);
if (link_target) { if (link_target) {
if (link(link_target, dest) < 0) { if (link(link_target, dest) < 0) {