-char rsync_flist_file[27] = "rsync_flist.";
-char rsync_csums_file[27] = "rsync_csums.";
-char rsync_delta_file[27] = "rsync_delta.";
-char rsync_argvs_file[27] = "rsync_argvs.";
-
-char batch_file_ext[15];
-
-int fdb;
-int fdb_delta;
-int fdb_open;
-int fdb_close;
-
-struct file_list *batch_flist;
-
-void create_batch_file_ext()
-{
- struct tm *timeptr;
- time_t elapsed_seconds;
-
- /* Save run date and time to use for batch file extensions */
- time(&elapsed_seconds);
- timeptr = localtime(&elapsed_seconds);
-
- sprintf(batch_file_ext, "%4d%02d%02d%02d%02d%02d",
- timeptr->tm_year + 1900, timeptr->tm_mon + 1,
- timeptr->tm_mday, timeptr->tm_hour, timeptr->tm_min,
- timeptr->tm_sec);
-}
-
-void set_batch_file_ext(char *ext)
-{
- strcpy(batch_file_ext, ext);
-}
-
-void write_batch_flist_file(char *buff, int bytes_to_write)
-{
-
- if (fdb_open) {
- /* Set up file extension */
- strcat(rsync_flist_file, batch_file_ext);
-
- /* Open batch flist file for writing; create it if it doesn't exist */
- fdb =
- do_open(rsync_flist_file, O_WRONLY | O_CREAT | O_TRUNC,
- S_IREAD | S_IWRITE);
- if (fdb == -1) {
- rprintf(FERROR, "Batch file %s open error: %s\n",
- rsync_flist_file, strerror(errno));
- close(fdb);
- exit_cleanup(1);
+extern int eol_nulls;
+extern int recurse;
+extern int xfer_dirs;
+extern int preserve_links;
+extern int preserve_hard_links;
+extern int preserve_devices;
+extern int preserve_uid;
+extern int preserve_gid;
+extern int always_checksum;
+extern int do_compression;
+extern int def_compress_level;
+extern int protocol_version;
+extern char *batch_name;
+
+extern struct filter_list_struct filter_list;
+
+static int tweaked_compress_level;
+
+static int *flag_ptr[] = {
+ &recurse, /* 0 */
+ &preserve_uid, /* 1 */
+ &preserve_gid, /* 2 */
+ &preserve_links, /* 3 */
+ &preserve_devices, /* 4 */
+ &preserve_hard_links, /* 5 */
+ &always_checksum, /* 6 */
+ &xfer_dirs, /* 7 (protocol 29) */
+ &tweaked_compress_level,/* 8 (protocol 29) */
+ NULL
+};
+
+static char *flag_name[] = {
+ "--recurse (-r)",
+ "--owner (-o)",
+ "--group (-g)",
+ "--links (-l)",
+ "--devices (-D)",
+ "--hard-links (-H)",
+ "--checksum (-c)",
+ "--dirs (-d)",
+ "--compress (-z)",
+ NULL
+};
+
+void write_stream_flags(int fd)
+{
+ int i, flags;
+
+#if Z_DEFAULT_COMPRESSION == -1
+ tweaked_compress_level = do_compression ? def_compress_level + 2 : 0;
+#else
+#error internal logic error! Fix def_compress_level logic above and below too!
+#endif
+
+ /* Start the batch file with a bitmap of data-stream-affecting
+ * flags. */
+ if (protocol_version < 29)
+ flag_ptr[7] = NULL;
+ for (i = 0, flags = 0; flag_ptr[i]; i++) {
+ if (*flag_ptr[i])
+ flags |= 1 << i;
+ }
+ write_int(fd, flags);
+}
+
+void read_stream_flags(int fd)
+{
+ int i, flags;
+
+ if (protocol_version < 29)
+ flag_ptr[7] = NULL;
+ for (i = 0, flags = read_int(fd); flag_ptr[i]; i++) {
+ int set = flags & (1 << i) ? 1 : 0;
+ if (*flag_ptr[i] != set) {
+ if (verbose) {
+ rprintf(FINFO,
+ "%sing the %s option to match the batchfile.\n",
+ set ? "Sett" : "Clear", flag_name[i]);
+ }
+ *flag_ptr[i] = set;