From: Wayne Davison Date: Tue, 6 Nov 2007 15:25:02 +0000 (+0000) Subject: Some changes to allow an unsorted file list even if the iconv option X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/commitdiff_plain/f7a76b9c450c05abb799e1103d90b51f9f06c0c3 Some changes to allow an unsorted file list even if the iconv option was disabled via configure. --- diff --git a/compat.c b/compat.c index 888f94d9..95dd3074 100644 --- a/compat.c +++ b/compat.c @@ -54,16 +54,15 @@ extern char *dest_option; extern char *files_from; extern char *filesfrom_host; extern struct filter_list_struct filter_list; +extern int need_unsorted_flist; #ifdef ICONV_OPTION -extern char *iconv_opt; extern iconv_t ic_send, ic_recv; #endif /* These index values are for the file-list's extra-attribute array. */ -int uid_ndx, gid_ndx, acls_ndx, xattrs_ndx; -#ifdef ICONV_OPTION -int ic_ndx; +int uid_ndx, gid_ndx, acls_ndx, xattrs_ndx, unsort_ndx; +#ifdef ICONV_OPTION int filesfrom_convert = 0; #endif @@ -247,10 +246,8 @@ void setup_protocol(int f_out,int f_in) need_messages_from_generator = 1; } -#ifdef ICONV_OPTION - if (iconv_opt && (!am_sender || inc_recurse)) - ic_ndx = ++file_extra_cnt; -#endif + if (need_unsorted_flist && (!am_sender || inc_recurse)) + unsort_ndx = ++file_extra_cnt; if (partial_dir && *partial_dir != '/' && (!am_server || local_server)) { int flags = MATCHFLG_NO_PREFIXES | MATCHFLG_DIRECTORY; diff --git a/flist.c b/flist.c index 4d81f150..5041d699 100644 --- a/flist.c +++ b/flist.c @@ -63,11 +63,10 @@ extern int copy_links; extern int copy_unsafe_links; extern int protocol_version; extern int sanitize_paths; +extern int need_unsorted_flist; +extern int unsort_ndx; extern struct stats stats; extern char *filesfrom_host; -#ifdef ICONV_OPTION -extern char *iconv_opt; -#endif extern char curr_dir[MAXPATHLEN]; @@ -77,9 +76,7 @@ extern struct filter_list_struct filter_list; extern struct filter_list_struct server_filter_list; #ifdef ICONV_OPTION -extern int ic_ndx; extern int filesfrom_convert; -extern int need_unsorted_flist; extern iconv_t ic_send, ic_recv; #endif @@ -867,10 +864,8 @@ static struct file_struct *recv_file_entry(struct file_list *flist, F_GROUP(file) = gid; file->flags |= gid_flags; } -#ifdef ICONV_OPTION - if (ic_ndx) + if (unsort_ndx) F_NDX(file) = flist->used + flist->ndx_start; -#endif if (basename != thisname) { file->dirname = lastdir; @@ -1229,10 +1224,8 @@ struct file_struct *make_file(const char *fname, struct file_list *flist, if (basename_len == 0+1) return NULL; -#ifdef ICONV_OPTION - if (ic_ndx) + if (unsort_ndx) F_NDX(file) = dir_count - 1; -#endif return file; } @@ -1676,11 +1669,9 @@ void send_extra_file_list(int f, int at_least) flist = flist_new(0, "send_extra_file_list"); start_write = stats.total_written; -#ifdef ICONV_OPTION - if (ic_ndx) + if (unsort_ndx) dir_ndx = F_NDX(file); else -#endif dir_ndx = send_dir_ndx; write_ndx(f, NDX_FLIST_OFFSET - dir_ndx); flist->parent_ndx = dir_ndx; @@ -1706,22 +1697,18 @@ void send_extra_file_list(int f, int at_least) write_byte(f, 0); -#ifdef ICONV_OPTION if (need_unsorted_flist) { if (!(flist->sorted = new_array(struct file_struct *, flist->used))) out_of_memory("send_extra_file_list"); memcpy(flist->sorted, flist->files, flist->used * sizeof (struct file_struct*)); } else -#endif flist->sorted = flist->files; clean_flist(flist, 0); flist->ndx_end = flist->ndx_start + flist->used - 1; -#ifdef ICONV_OPTION - if (!iconv_opt) -#endif + if (!need_unsorted_flist) flist->ndx_end -= (dir_count - dstart); add_dirs_to_tree(send_dir_ndx, flist, dir_count - dstart); @@ -2019,7 +2006,6 @@ struct file_list *send_file_list(int f, int argc, char *argv[]) * receiving side to ask for whatever name it kept. For incremental * recursion mode, the sender marks duplicate dirs so that it can * send them together in a single file-list. */ -#ifdef ICONV_OPTION if (need_unsorted_flist) { if (inc_recurse) { if (!(flist->sorted = new_array(struct file_struct *, flist->used))) @@ -2032,9 +2018,7 @@ struct file_list *send_file_list(int f, int argc, char *argv[]) flist->low = 0; flist->high = flist->used - 1; } - } else -#endif - { + } else { flist->sorted = flist->files; clean_flist(flist, 0); } @@ -2143,11 +2127,7 @@ struct file_list *recv_file_list(int f) file_total += flist->used; flist->ndx_end = flist->ndx_start + flist->used - 1; - if (inc_recurse -#ifdef ICONV_OPTION - && !iconv_opt -#endif - && flist->ndx_start > 1) + if (inc_recurse && !need_unsorted_flist && flist->ndx_start > 1) flist->ndx_end -= dir_flist->used - dstart; if (verbose > 2) @@ -2156,7 +2136,6 @@ struct file_list *recv_file_list(int f) if (show_filelist_p()) finish_filelist_progress(flist); -#ifdef ICONV_OPTION if (need_unsorted_flist) { /* Create an extra array of index pointers that we can sort for * the generator's use (for wading through the files in sorted @@ -2175,9 +2154,7 @@ struct file_list *recv_file_list(int f) (dir_flist->used - dstart) * sizeof (struct file_struct*)); fsort(dir_flist->sorted + dstart, dir_flist->used - dstart); } - } else -#endif - { + } else { flist->sorted = flist->files; if (inc_recurse && dir_flist->used > dstart) { dir_flist->sorted = dir_flist->files; diff --git a/generator.c b/generator.c index f364eefd..8f46d404 100644 --- a/generator.c +++ b/generator.c @@ -95,9 +95,7 @@ extern char *backup_suffix; extern int backup_suffix_len; extern struct file_list *cur_flist, *first_flist, *dir_flist; extern struct filter_list_struct server_filter_list; -#ifdef ICONV_OPTION -extern int ic_ndx; -#endif +extern int unsort_ndx; int ignore_perishable = 0; int non_perishable_cnt = 0; @@ -2060,11 +2058,9 @@ void generate_files(int f_out, const char *local_name) if (!F_IS_ACTIVE(file)) continue; -#ifdef ICONV_OPTION - if (ic_ndx) + if (unsort_ndx) ndx = F_NDX(file); else -#endif ndx = i + cur_flist->ndx_start; if (solo_file) diff --git a/hlink.c b/hlink.c index 2392ecdb..962261c7 100644 --- a/hlink.c +++ b/hlink.c @@ -34,11 +34,9 @@ extern int protocol_version; extern int remove_source_files; extern int stdout_format_has_i; extern int maybe_ATTRS_REPORT; +extern int unsort_ndx; extern char *basis_dir[]; extern struct file_list *cur_flist; -#ifdef ICONV_OPTION -extern int ic_ndx; -#endif #ifdef SUPPORT_HARD_LINKS @@ -145,11 +143,9 @@ static void match_gnums(int32 *ndx_list, int ndx_count) break; F_HL_PREV(file) = prev; /* The linked list must use raw ndx values. */ -#ifdef ICONV_OPTION - if (ic_ndx) + if (unsort_ndx) prev = F_NDX(file); else -#endif prev = ndx_list[from] + hlink_flist->ndx_start; } if (prev < 0 && !inc_recurse) { @@ -163,11 +159,9 @@ static void match_gnums(int32 *ndx_list, int ndx_count) file->flags |= FLAG_HLINK_LAST; F_HL_PREV(file) = prev; if (inc_recurse && CVAL(node->data, 0) == 0) { -#ifdef ICONV_OPTION - if (ic_ndx) + if (unsort_ndx) prev = F_NDX(file); else -#endif prev = ndx_list[from] + hlink_flist->ndx_start; SIVAL(node->data, 1, prev); } diff --git a/options.c b/options.c index 940d53a1..e60778da 100644 --- a/options.c +++ b/options.c @@ -185,8 +185,8 @@ int list_only = 0; #define MAX_BATCH_NAME_LEN 256 /* Must be less than MAXPATHLEN-13 */ char *batch_name = NULL; -#ifdef ICONV_OPTION int need_unsorted_flist = 0; +#ifdef ICONV_OPTION char *iconv_opt = ICONV_OPTION; #endif diff --git a/rsync.h b/rsync.h index aedc76cf..88f55f93 100644 --- a/rsync.h +++ b/rsync.h @@ -647,7 +647,7 @@ extern int xattrs_ndx; #define F_GROUP(f) REQ_EXTRA(f, gid_ndx)->unum #define F_ACL(f) REQ_EXTRA(f, acls_ndx)->num #define F_XATTR(f) REQ_EXTRA(f, xattrs_ndx)->num -#define F_NDX(f) REQ_EXTRA(f, ic_ndx)->num +#define F_NDX(f) REQ_EXTRA(f, unsort_ndx)->num /* These items are per-entry optional: */ #define F_HL_GNUM(f) OPT_EXTRA(f, LEN64_BUMP(f))->num /* non-dirs */