Some changes to allow an unsorted file list even if the iconv option
authorWayne Davison <wayned@samba.org>
Tue, 6 Nov 2007 15:25:02 +0000 (15:25 +0000)
committerWayne Davison <wayned@samba.org>
Tue, 6 Nov 2007 15:25:02 +0000 (15:25 +0000)
was disabled via configure.

compat.c
flist.c
generator.c
hlink.c
options.c
rsync.h

index 888f94d..95dd307 100644 (file)
--- 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 char *files_from;
 extern char *filesfrom_host;
 extern struct filter_list_struct filter_list;
+extern int need_unsorted_flist;
 #ifdef ICONV_OPTION
 #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. */
 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
 
 int filesfrom_convert = 0;
 #endif
 
@@ -247,10 +246,8 @@ void setup_protocol(int f_out,int f_in)
                need_messages_from_generator = 1;
        }
 
                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;
 
        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 4d81f15..5041d69 100644 (file)
--- 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 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;
 extern struct stats stats;
 extern char *filesfrom_host;
-#ifdef ICONV_OPTION
-extern char *iconv_opt;
-#endif
 
 extern char curr_dir[MAXPATHLEN];
 
 
 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 struct filter_list_struct server_filter_list;
 
 #ifdef ICONV_OPTION
-extern int ic_ndx;
 extern int filesfrom_convert;
 extern int filesfrom_convert;
-extern int need_unsorted_flist;
 extern iconv_t ic_send, ic_recv;
 #endif
 
 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;
        }
                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;
                F_NDX(file) = flist->used + flist->ndx_start;
-#endif
 
        if (basename != thisname) {
                file->dirname = lastdir;
 
        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;
 
        if (basename_len == 0+1)
                return NULL;
 
-#ifdef ICONV_OPTION
-       if (ic_ndx)
+       if (unsort_ndx)
                F_NDX(file) = dir_count - 1;
                F_NDX(file) = dir_count - 1;
-#endif
 
        return file;
 }
 
        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;
 
                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
                        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;
                        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);
 
 
                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
                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;
                        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);
                        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. */
         * 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)))
        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;
                }
                        flist->low = 0;
                        flist->high = flist->used - 1;
                }
-       } else
-#endif
-       {
+       } else {
                flist->sorted = flist->files;
                clean_flist(flist, 0);
        }
                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;
        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)
                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);
 
        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
        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);
                }
                               (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;
                flist->sorted = flist->files;
                if (inc_recurse && dir_flist->used > dstart) {
                        dir_flist->sorted = dir_flist->files;
index f364eef..8f46d40 100644 (file)
@@ -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;
 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;
 
 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;
 
                        if (!F_IS_ACTIVE(file))
                                continue;
 
-#ifdef ICONV_OPTION
-                       if (ic_ndx)
+                       if (unsort_ndx)
                                ndx = F_NDX(file);
                        else
                                ndx = F_NDX(file);
                        else
-#endif
                                ndx = i + cur_flist->ndx_start;
 
                        if (solo_file)
                                ndx = i + cur_flist->ndx_start;
 
                        if (solo_file)
diff --git a/hlink.c b/hlink.c
index 2392ecd..962261c 100644 (file)
--- 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 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;
 extern char *basis_dir[];
 extern struct file_list *cur_flist;
-#ifdef ICONV_OPTION
-extern int ic_ndx;
-#endif
 
 #ifdef SUPPORT_HARD_LINKS
 
 
 #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. */
                                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
                                prev = F_NDX(file);
                        else
-#endif
                                prev = ndx_list[from] + hlink_flist->ndx_start;
                }
                if (prev < 0 && !inc_recurse) {
                                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) {
                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
                                prev = F_NDX(file);
                        else
-#endif
                                prev = ndx_list[from] + hlink_flist->ndx_start;
                        SIVAL(node->data, 1, prev);
                }
                                prev = ndx_list[from] + hlink_flist->ndx_start;
                        SIVAL(node->data, 1, prev);
                }
index 940d53a..e60778d 100644 (file)
--- 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;
 
 #define MAX_BATCH_NAME_LEN 256 /* Must be less than MAXPATHLEN-13 */
 char *batch_name = NULL;
 
-#ifdef ICONV_OPTION
 int need_unsorted_flist = 0;
 int need_unsorted_flist = 0;
+#ifdef ICONV_OPTION
 char *iconv_opt = ICONV_OPTION;
 #endif
 
 char *iconv_opt = ICONV_OPTION;
 #endif
 
diff --git a/rsync.h b/rsync.h
index aedc76c..88f55f9 100644 (file)
--- 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_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 */
 
 /* These items are per-entry optional: */
 #define F_HL_GNUM(f) OPT_EXTRA(f, LEN64_BUMP(f))->num /* non-dirs */