+extern int dry_run;
+extern int list_only;
+extern int am_root;
+extern int am_server;
+extern int am_sender;
+extern int am_generator;
+extern int am_daemon;
+extern int blocking_io;
+extern int remove_sent_files;
+extern int daemon_over_rsh;
+extern int need_messages_from_generator;
+extern int kluge_around_eof;
+extern int do_stats;
+extern int log_got_error;
+extern int module_id;
+extern int copy_links;
+extern int copy_dirlinks;
+extern int keep_dirlinks;
+extern int preserve_hard_links;
+extern int protocol_version;
+extern int recurse;
+extern int relative_paths;
+extern int rsync_port;
+extern int whole_file;
+extern int read_batch;
+extern int write_batch;
+extern int batch_fd;
+extern int batch_gen_fd;
+extern int filesfrom_fd;
+extern pid_t cleanup_child_pid;
+extern struct stats stats;
+extern char *filesfrom_host;
+extern char *rsync_path;
+extern char *shell_cmd;
+extern char *batch_name;
+
+int local_server = 0;
+mode_t orig_umask = 0;
+struct file_list *the_file_list;
+
+/* There's probably never more than at most 2 outstanding child processes,
+ * but set it higher, just in case. */
+#define MAXCHILDPROCS 7
+
+#ifdef HAVE_SIGACTION
+# ifdef HAVE_SIGPROCMASK
+# define SIGACTMASK(n,h) SIGACTION(n,h), sigaddset(&sigmask,(n))
+# else
+# define SIGACTMASK(n,h) SIGACTION(n,h)
+# endif
+static struct sigaction sigact;
+#endif
+
+struct pid_status {
+ pid_t pid;
+ int status;
+} pid_stat_table[MAXCHILDPROCS];
+
+static time_t starttime, endtime;
+static int64 total_read, total_written;