extern int copy_unsafe_links;
extern int protocol_version;
extern int sanitize_paths;
-extern int orig_umask;
+extern const char *io_write_phase;
extern struct stats stats;
extern struct file_list *the_file_list;
static void list_file_entry(struct file_struct *f)
{
- char perms[11];
+ char permbuf[PERMSTRING_SIZE];
if (!f->basename) {
/* this can happen if duplicate names were removed */
return;
}
- permstring(perms, f->mode);
+ permstring(permbuf, f->mode);
#ifdef SUPPORT_LINKS
if (preserve_links && S_ISLNK(f->mode)) {
rprintf(FINFO, "%s %11.0f %s %s -> %s\n",
- perms,
+ permbuf,
(double)f->length, timestring(f->modtime),
f_name(f, NULL), f->u.link);
} else
#endif
{
rprintf(FINFO, "%s %11.0f %s %s\n",
- perms,
+ permbuf,
(double)f->length, timestring(f->modtime),
f_name(f, NULL));
}
read_buf(f, sum, checksum_len);
}
- if (!preserve_perms) {
- /* set an appropriate set of permissions based on original
- * permissions and umask. This emulates what GNU cp does */
- file->mode &= ~orig_umask;
- }
-
return file;
}
flags |= read_byte(f) << 8;
file = receive_file_entry(flist, flags, f);
- if (S_ISREG(file->mode))
+ if (S_ISREG(file->mode) || S_ISLNK(file->mode))
stats.total_size += file->length;
flist->files[flist->count++] = file;
memset(file, 0, file_struct_len);
/* In an empty entry, dir.depth is an offset to the next non-empty
* entry. Likewise for length in the opposite direction. We assume
- * that we're alone for now since flist_find() will collate adjacent
- * items for any entries that are encountered during the find. */
+ * that we're alone for now since flist_find() will adjust the counts
+ * it runs into that aren't up-to-date. */
file->length = file->dir.depth = 1;
}
struct file_list *dirlist;
char dirbuf[MAXPATHLEN];
int save_recurse = recurse;
+ int save_xfer_dirs = xfer_dirs;
if (dlen < 0) {
dlen = strlcpy(dirbuf, dirname, MAXPATHLEN);
dirlist = flist_new(WITHOUT_HLINK, "get_dirlist");
recurse = 0;
+ xfer_dirs = 1;
send_directory(ignore_filter_rules ? -2 : -1, dirlist, dirname, dlen);
+ xfer_dirs = save_xfer_dirs;
recurse = save_recurse;
if (do_progress)
flist_count_offset += dirlist->count;