X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/132fcf36b282b09de835df5fc8f3672bb21fea6f..8c48382049712e11691ca99a4c7583510abf1a32:/flist.c diff --git a/flist.c b/flist.c index 1b021ef6..7e655820 100644 --- a/flist.c +++ b/flist.c @@ -43,8 +43,8 @@ extern int numeric_ids; extern int cvs_exclude; extern int recurse; +extern int keep_dirs; extern char curr_dir[MAXPATHLEN]; -extern char *files_from; extern int filesfrom_fd; extern int one_file_system; @@ -76,7 +76,7 @@ static unsigned int file_struct_len; static struct file_list *received_flist; static void clean_flist(struct file_list *flist, int strip_root, int no_dups); -static void output_flist(struct file_list *flist); +static void output_flist(struct file_list *flist, const char *whose_list); void init_flist(void) { @@ -89,7 +89,7 @@ void init_flist(void) static int show_filelist_p(void) { - return verbose && (recurse || files_from) && !am_server; + return verbose && keep_dirs && !am_server; } static void start_filelist_progress(char *kind) @@ -317,7 +317,7 @@ void flist_expand(struct file_list *flist) new_ptr = realloc_array(flist->files, struct file_struct *, flist->malloced); - if (verbose >= 2) { + if (verbose >= 2 && flist->malloced != FLIST_START) { rprintf(FINFO, "[%s] expand file_list to %.0f bytes, did%s move\n", who_am_i(), (double)sizeof flist->files[0] * flist->malloced, @@ -335,7 +335,7 @@ void send_file_entry(struct file_struct *file, int f, unsigned short base_flags) unsigned short flags; static time_t modtime; static mode_t mode; - static uint64 dev; + static int64 dev; static dev_t rdev; static uint32 rdev_major; static uid_t uid; @@ -527,7 +527,7 @@ void receive_file_entry(struct file_struct **fptr, unsigned short flags, { static time_t modtime; static mode_t mode; - static uint64 dev; + static int64 dev; static dev_t rdev; static uint32 rdev_major; static uid_t uid; @@ -684,7 +684,7 @@ void receive_file_entry(struct file_struct **fptr, unsigned short flags, if (preserve_hard_links && protocol_version < 28 && S_ISREG(mode)) flags |= XMIT_HAS_IDEV_DATA; if (flags & XMIT_HAS_IDEV_DATA) { - uint64 inode; + int64 inode; if (protocol_version < 26) { dev = read_int(f); inode = read_int(f); @@ -804,7 +804,7 @@ struct file_struct *make_file(char *fname, struct file_list *flist, if (exclude_level == NO_EXCLUDES) goto skip_excludes; - if (S_ISDIR(st.st_mode) && !recurse && !files_from) { + if (S_ISDIR(st.st_mode) && !keep_dirs) { rprintf(FINFO, "skipping directory %s\n", thisname); return NULL; } @@ -1043,9 +1043,9 @@ static void send_directory(int f, struct file_list *flist, char *dir) if (dname[0] == '.' && (dname[1] == '\0' || (dname[1] == '.' && dname[2] == '\0'))) continue; - if (strlcpy(p, dname, MAXPATHLEN - offset) < MAXPATHLEN - offset) + if (strlcpy(p, dname, MAXPATHLEN - offset) < MAXPATHLEN - offset) { send_file_name(f, flist, fname, recurse, 0); - else { + } else { io_error |= IOERR_GENERAL; rprintf(FINFO, "cannot send long-named file %s\n", @@ -1135,7 +1135,7 @@ struct file_list *send_file_list(int f, int argc, char *argv[]) continue; } - if (S_ISDIR(st.st_mode) && !recurse && !files_from) { + if (S_ISDIR(st.st_mode) && !keep_dirs) { rprintf(FINFO, "skipping directory %s\n", fname); continue; } @@ -1167,21 +1167,17 @@ struct file_list *send_file_list(int f, int argc, char *argv[]) } *p = '/'; if (fn != p || (*lp && *lp != '/')) { - int copy_links_saved = copy_links; - int recurse_saved = recurse; + int save_copy_links = copy_links; + int save_keep_dirs = keep_dirs; copy_links = copy_unsafe_links; - /* set recurse to 1 to prevent make_file - * from ignoring directory, but still - * turn off the recursive parameter to - * send_file_name */ - recurse = 1; + keep_dirs = 1; while ((slash = strchr(slash+1, '/')) != 0) { *slash = 0; send_file_name(f, flist, fname, 0, 0); *slash = '/'; } - copy_links = copy_links_saved; - recurse = recurse_saved; + copy_links = save_copy_links; + keep_dirs = save_keep_dirs; *p = 0; strlcpy(lastpath, fname, sizeof lastpath); *p = '/'; @@ -1257,7 +1253,7 @@ struct file_list *send_file_list(int f, int argc, char *argv[]) } if (verbose > 3) - output_flist(flist); + output_flist(flist, f < 0 ? "delete" : who_am_i()); if (verbose > 2) rprintf(FINFO, "send_file_list done\n"); @@ -1331,7 +1327,7 @@ struct file_list *recv_file_list(int f) } if (verbose > 3) - output_flist(flist); + output_flist(flist, who_am_i()); if (list_only) { int i; @@ -1507,7 +1503,7 @@ static void clean_flist(struct file_list *flist, int strip_root, int no_dups) } } -static void output_flist(struct file_list *flist) +static void output_flist(struct file_list *flist, const char *whose_list) { char uidbuf[16], gidbuf[16]; struct file_struct *file; @@ -1524,7 +1520,7 @@ static void output_flist(struct file_list *flist) else *gidbuf = '\0'; rprintf(FINFO, "[%s] i=%d %s %s %s mode=0%o len=%.0f%s%s\n", - who_am_i(), i, NS(file->basedir), NS(file->dirname), + whose_list, i, NS(file->basedir), NS(file->dirname), NS(file->basename), (int)file->mode, (double)file->length, uidbuf, gidbuf); }