/* -*- c-file-style: "linux" -*-
Copyright (C) 1998-2001 by Andrew Tridgell <tridge@samba.org>
- Copyright (C) 2000-2001 by Martin Pool <mbp@samba.org>
+ Copyright (C) 2000, 2001, 2002 by Martin Pool <mbp@samba.org>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
#endif
int blocking_io=0;
-/** Global options set from command line. **/
-struct global_opts global_opts = {
+/** Network address family. **/
#ifdef INET6
- 0, /* af_hint -- allow any protocol */
+int default_af_hint = 0; /* Any protocol */
#else
- AF_INET, /* af_hint -- prefer IPv4 */
+int default_af_hint = AF_INET; /* Must use IPv4 */
#endif
- 0, /* no_detach */
-};
-int read_batch=0; /* dw */
-int write_batch=0; /* dw */
+/** Do not go into the background when run as --daemon. Good
+ * for debugging and required for running as a service on W32,
+ * or under Unix process-monitors. **/
+int no_detach = 0;
+
+
+int read_batch=0;
+int write_batch=0;
char *backup_suffix = BACKUP_SUFFIX;
char *tmpdir = NULL;
char const *hardlinks = "no ";
char const *links = "no ";
char const *ipv6 = "no ";
+ STRUCT_STAT *dumstat;
#ifdef HAVE_SOCKETPAIR
got_socketpair = "";
rprintf(f, "%s version %s protocol version %d\n",
RSYNC_NAME, RSYNC_VERSION, PROTOCOL_VERSION);
rprintf(f,
- "Copyright (C) 1996-2001 by Andrew Tridgell and others\n");
+ "Copyright (C) 1996-2002 by Andrew Tridgell and others\n");
rprintf(f, "<http://rsync.samba.org/>\n");
rprintf(f, "Capabilities: %d-bit files, %ssocketpairs, "
- "%shard links, %ssymlinks, batchfiles, %sIPv6\n\n",
+ "%shard links, %ssymlinks, batchfiles, %sIPv6,\n",
(int) (sizeof(OFF_T) * 8),
got_socketpair, hardlinks, links, ipv6);
+ /* Note that this field may not have type ino_t. It depends
+ * on the complicated interaction between largefile feature
+ * macros. */
+ rprintf(f, " %d-bit system inums, %d-bit internal inums\n",
+ (int) (sizeof(dumstat->st_ino) * 8),
+ (int) (sizeof(INO64_T) * 8));
+
#ifdef NO_INT64
rprintf(f, "WARNING: no 64-bit integers on this platform!\n");
#endif
rprintf(F," --backup-dir make backups into this directory\n");
rprintf(F," --suffix=SUFFIX override backup suffix\n");
rprintf(F," -u, --update update only (don't overwrite newer files)\n");
- rprintf(F," -l, --links preserve soft links\n");
- rprintf(F," -L, --copy-links treat soft links like regular files\n");
+ rprintf(F," -l, --links copy symlinks as symlinks\n");
+ rprintf(F," -L, --copy-links copy the referent of symlinks\n");
rprintf(F," --copy-unsafe-links copy links outside the source tree\n");
rprintf(F," --safe-links ignore links outside the destination tree\n");
rprintf(F," -H, --hard-links preserve hard links\n");
rprintf(F," --log-format=FORMAT log file transfers using specified format\n");
rprintf(F," --password-file=FILE get password from FILE\n");
rprintf(F," --bwlimit=KBPS limit I/O bandwidth, KBytes per second\n");
- rprintf(F," -f --read-batch=EXT read batch file\n");
- rprintf(F," -F --write-batch write batch file\n");
+ rprintf(F," --read-batch=EXT read batch file\n");
+ rprintf(F," --write-batch write batch file\n");
rprintf(F," -h, --help show this help screen\n");
#ifdef INET6
rprintf(F," -4 prefer IPv4\n");
OPT_LOG_FORMAT, OPT_PASSWORD_FILE, OPT_SIZE_ONLY, OPT_ADDRESS,
OPT_DELETE_AFTER, OPT_EXISTING, OPT_MAX_DELETE, OPT_BACKUP_DIR,
OPT_IGNORE_ERRORS, OPT_BWLIMIT, OPT_BLOCKING_IO,
- OPT_MODIFY_WINDOW};
+ OPT_MODIFY_WINDOW, OPT_READ_BATCH, OPT_WRITE_BATCH};
static struct poptOption long_options[] = {
/* longName, shortName, argInfo, argPtr, value, descrip, argDesc */
{"update", 'u', POPT_ARG_NONE, &update_only},
{"links", 'l', POPT_ARG_NONE, &preserve_links},
{"copy-links", 'L', POPT_ARG_NONE, ©_links},
- {"whole", 'W', POPT_ARG_NONE, &whole_file},
+ {"whole-file", 'W', POPT_ARG_NONE, &whole_file},
{"copy-unsafe-links", 0, POPT_ARG_NONE, ©_unsafe_links},
{"perms", 'p', POPT_ARG_NONE, &preserve_perms},
{"owner", 'o', POPT_ARG_NONE, &preserve_uid},
/* TODO: Should this take an optional int giving the compression level? */
{"compress", 'z', POPT_ARG_NONE, &do_compression},
{"daemon", 0, POPT_ARG_NONE, &am_daemon},
- {"no-detach", 0, POPT_ARG_NONE, &global_opts.no_detach},
+ {"no-detach", 0, POPT_ARG_NONE, &no_detach},
{"stats", 0, POPT_ARG_NONE, &do_stats},
{"progress", 0, POPT_ARG_NONE, &do_progress},
{"partial", 0, POPT_ARG_NONE, &keep_partial},
{"address", 0, POPT_ARG_STRING, &bind_address, 0},
{"backup-dir", 0, POPT_ARG_STRING, &backup_dir},
{"hard-links", 'H', POPT_ARG_NONE, &preserve_hard_links},
- {"read-batch", 'f', POPT_ARG_STRING, &batch_ext, 'f'},
- {"write-batch", 'F', POPT_ARG_NONE, &write_batch, 0},
+ {"read-batch", 0, POPT_ARG_STRING, &batch_ext, OPT_READ_BATCH},
+ {"write-batch", 0, POPT_ARG_NONE, &write_batch},
#ifdef INET6
- {0, '4', POPT_ARG_VAL, &global_opts.af_hint, AF_INET },
- {0, '6', POPT_ARG_VAL, &global_opts.af_hint, AF_INET6 },
+ {0, '4', POPT_ARG_VAL, &default_af_hint, AF_INET },
+ {0, '6', POPT_ARG_VAL, &default_af_hint, AF_INET6 },
#endif
{0,0,0,0}
};
keep_partial = 1;
break;
-
- case 'f':
- /* The filename is stored for us by popt */
+ case OPT_READ_BATCH:
+ /* The filename is stored in batch_ext for us by popt */
read_batch = 1;
break;
static char mdelete[30];
static char mwindow[30];
static char bw[50];
- static char fext[20]; /* dw */
+ static char fext[20];
+ static char wbatch[14];
int i, x;
argstr[x++] = 'S';
if (do_compression)
argstr[x++] = 'z';
- if (write_batch)
- argstr[x++] = 'F'; /* dw */
/* this is a complete hack - blame Rusty
args[ac++] = mdelete;
}
+ if (write_batch) {
+ snprintf(wbatch,sizeof(wbatch),"--write-batch");
+ args[ac++] = wbatch;
+ }
+
if (batch_ext != NULL) {
- sprintf(fext,"-f%s",batch_ext);
+ snprintf(fext,sizeof(fext),"--read-batch=%s",batch_ext);
args[ac++] = fext;
}