return NULL;
}
- if (one_file_system && st.st_dev != filesystem_dev) {
- /* We allow a directory though to preserve the mount point.
- * However, flag it so that we don't recurse. */
- if (!S_ISDIR(st.st_mode))
- return NULL;
+ /* We only care about directories because we need to avoid recursing
+ * into a mount-point directory, not to avoid copying a symlinked
+ * file if -L (or similar) was specified. */
+ if (one_file_system && st.st_dev != filesystem_dev
+ && S_ISDIR(st.st_mode))
flags |= FLAG_MOUNT_POINT;
- }
if (check_exclude_file(thisname, S_ISDIR(st.st_mode) != 0, exclude_level))
return NULL;
linkname_len = 0;
#endif
- idev_len = 0;
#if SUPPORT_HARD_LINKS
- if (preserve_hard_links && st.st_nlink > 1) {
+ if (preserve_hard_links) {
if (protocol_version < 28) {
if (S_ISREG(st.st_mode))
idev_len = sizeof (struct idev);
+ else
+ idev_len = 0;
} else {
- if (!S_ISDIR(st.st_mode))
+ if (!S_ISDIR(st.st_mode) && st.st_nlink > 1)
idev_len = sizeof (struct idev);
+ else
+ idev_len = 0;
}
- }
+ } else
#endif
+ idev_len = 0;
sum_len = always_checksum && S_ISREG(st.st_mode) ? MD4_SUM_LENGTH : 0;
file_struct_len = idev_len? sizeof file[0] : min_file_struct_len;