X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/2855f61f4a0003d508b9e4cc1314f9bd52f2cf42..7c06e407ecb9c99abce58665f85551d8e99707a9:/options.c diff --git a/options.c b/options.c index c49f948d..6b3227dd 100644 --- a/options.c +++ b/options.c @@ -74,6 +74,9 @@ int modify_window=0; #endif int blocking_io=0; +int read_batch=0; /* dw */ +int write_batch=0; /* dw */ + char *backup_suffix = BACKUP_SUFFIX; char *tmpdir = NULL; char *compare_dest = NULL; @@ -81,7 +84,7 @@ char *config_file = RSYNCD_CONF; char *shell_cmd = NULL; char *log_format = NULL; char *password_file = NULL; -char *rsync_path = RSYNC_NAME; +char *rsync_path = RSYNC_PATH; char *backup_dir = NULL; int rsync_port = RSYNC_PORT; @@ -90,6 +93,8 @@ int quiet = 0; int always_checksum = 0; int list_only = 0; +char *batch_ext = NULL; + static int modify_window_set; @@ -118,14 +123,15 @@ static void print_rsync_version(int f) RSYNC_NAME, VERSION, PROTOCOL_VERSION); rprintf(f, "Copyright (C) 1996-2001 by Andrew Tridgell, Paul Mackerras and others\n"); + rprintf(f, "\n"); rprintf(f, "Capabilities: %d-bit files, %ssocketpairs, " - "%shard links, %ssymlinks\n\n", - sizeof(int64) * 8, + "%shard links, %ssymlinks, batchfiles\n\n", + (int) (sizeof(int64) * 8), got_socketpair, hardlinks, links); #ifdef NO_INT64 - rprintf(logcode, "WARNING: no 64-bit integers on this platform!\n"); + rprintf(f, "WARNING: no 64-bit integers on this platform!\n"); #endif } @@ -206,6 +212,8 @@ void usage(enum logcode F) 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," -h, --help show this help screen\n"); rprintf(F,"\n"); @@ -273,7 +281,7 @@ static struct poptOption long_options[] = { {"max-delete", 0, POPT_ARG_INT, &max_delete}, {"timeout", 0, POPT_ARG_INT, &io_timeout}, {"temp-dir", 'T', POPT_ARG_STRING, &tmpdir}, - {"compare-dest", 0, POPT_ARG_NONE, &compare_dest}, + {"compare-dest", 0, POPT_ARG_STRING, &compare_dest}, /* 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}, @@ -290,10 +298,11 @@ static struct poptOption long_options[] = { {"address", 0, POPT_ARG_STRING, 0, OPT_ADDRESS}, {"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}, {0,0,0,0} }; - static char err_buf[100]; @@ -327,7 +336,7 @@ static int check_refuse_options(char *ref, int opt) while ((p = strstr(ref,name))) { if ((p==ref || p[-1]==' ') && (p[len] == ' ' || p[len] == 0)) { - slprintf(err_buf,sizeof(err_buf), + snprintf(err_buf,sizeof(err_buf), "The '%s' option is not supported by this server\n", name); return 1; } @@ -361,8 +370,7 @@ int parse_arguments(int *argc, const char ***argv, int frommain) /* The context leaks in case of an error, but if there's a * problem we always exit anyhow. */ - pc = poptGetContext(RSYNC_NAME, *argc, (const char **) *argv, - long_options, 0); + pc = poptGetContext(RSYNC_NAME, *argc, *argv, long_options, 0); while ((opt = poptGetNextOpt(pc)) != -1) { if (ref) { @@ -419,7 +427,7 @@ int parse_arguments(int *argc, const char ***argv, int frommain) * rprintf? Everybody who gets this message * ought to send it to the client and also to * the logs. */ - slprintf(err_buf,sizeof(err_buf), + snprintf(err_buf,sizeof(err_buf), "hard links are not supported on this %s\n", am_server ? "server" : "client"); rprintf(FERROR,"ERROR: hard links not supported on this platform\n"); @@ -463,16 +471,21 @@ int parse_arguments(int *argc, const char ***argv, int frommain) case OPT_ADDRESS: { struct in_addr *ia; - if ((ia = ip_address(optarg))) { + if ((ia = ip_address (poptGetOptArg (pc)))) { socket_address = *ia; } } break; + case 'f': + /* The filename is stored for us by popt */ + read_batch = 1; + break; + default: /* FIXME: If --daemon is specified, then errors for later * parameters seem to disappear. */ - slprintf(err_buf, sizeof(err_buf), + snprintf(err_buf, sizeof(err_buf), "%s%s: %s\n", am_server ? "on remote machine: " : "", poptBadOption(pc, POPT_BADOPTION_NOALIAS), @@ -502,6 +515,7 @@ void server_options(char **args,int *argc) static char mdelete[30]; static char mwindow[30]; static char bw[50]; + static char fext[20]; /* dw */ int i, x; @@ -556,6 +570,8 @@ void server_options(char **args,int *argc) argstr[x++] = 'S'; if (do_compression) argstr[x++] = 'z'; + if (write_batch) + argstr[x++] = 'F'; /* dw */ /* this is a complete hack - blame Rusty @@ -569,22 +585,27 @@ void server_options(char **args,int *argc) if (x != 1) args[ac++] = argstr; if (block_size != BLOCK_SIZE) { - slprintf(bsize,sizeof(bsize),"-B%d",block_size); + snprintf(bsize,sizeof(bsize),"-B%d",block_size); args[ac++] = bsize; } if (max_delete && am_sender) { - slprintf(mdelete,sizeof(mdelete),"--max-delete=%d",max_delete); + snprintf(mdelete,sizeof(mdelete),"--max-delete=%d",max_delete); args[ac++] = mdelete; } + + if (batch_ext != NULL) { + sprintf(fext,"-f%s",batch_ext); + args[ac++] = fext; + } if (io_timeout) { - slprintf(iotime,sizeof(iotime),"--timeout=%d",io_timeout); + snprintf(iotime,sizeof(iotime),"--timeout=%d",io_timeout); args[ac++] = iotime; } if (bwlimit) { - slprintf(bw,sizeof(bw),"--bwlimit=%d",bwlimit); + snprintf(bw,sizeof(bw),"--bwlimit=%d",bwlimit); args[ac++] = bw; } @@ -603,7 +624,7 @@ void server_options(char **args,int *argc) args[ac++] = "--size-only"; if (modify_window_set) { - slprintf(mwindow,sizeof(mwindow),"--modify-window=%d", + snprintf(mwindow,sizeof(mwindow),"--modify-window=%d", modify_window); args[ac++] = mwindow; }