Better pid handling.
[rsync/rsync.git] / options.c
index c022ed0..00a22fc 100644 (file)
--- a/options.c
+++ b/options.c
@@ -78,7 +78,6 @@ int do_progress=0;
 int keep_partial=0;
 int safe_symlinks=0;
 int copy_unsafe_links=0;
-int block_size=0;
 int size_only=0;
 int bwlimit=0;
 int delete_after=0;
@@ -88,6 +87,7 @@ int max_delete=0;
 int ignore_errors=0;
 int modify_window=0;
 int blocking_io=-1;
+unsigned int block_size = 0;
 
 
 /** Network address family. **/
@@ -124,6 +124,7 @@ int quiet = 0;
 int always_checksum = 0;
 int list_only = 0;
 
+#define MAX_BATCH_PREFIX_LEN 256       /* Must be less than MAXPATHLEN-13 */
 char *batch_prefix = NULL;
 
 static int modify_window_set;
@@ -218,9 +219,9 @@ void usage(enum logcode F)
   rprintf(F," -R, --relative              use relative path names\n");
   rprintf(F,"     --no-relative           turn off --relative\n");
   rprintf(F,"     --no-implied-dirs       don't send implied dirs with -R\n");
-  rprintf(F," -b, --backup                make backups (default %s suffix)\n",BACKUP_SUFFIX);
+  rprintf(F," -b, --backup                make backups (see --suffix & --backup-dir)\n");
   rprintf(F,"     --backup-dir            make backups into this directory\n");
-  rprintf(F,"     --suffix=SUFFIX         override backup suffix\n");
+  rprintf(F,"     --suffix=SUFFIX         backup suffix (default %s w/o --backup-dir)\n",BACKUP_SUFFIX);
   rprintf(F," -u, --update                update only (don't overwrite newer files)\n");
   rprintf(F," -l, --links                 copy symlinks as symlinks\n");
   rprintf(F," -L, --copy-links            copy the referent of symlinks\n");
@@ -241,19 +242,19 @@ void usage(enum logcode F)
   rprintf(F," -e, --rsh=COMMAND           specify the remote shell\n");
   rprintf(F,"     --rsync-path=PATH       specify path to rsync on the remote machine\n");
   rprintf(F,"     --existing              only update files that already exist\n");
-  rprintf(F,"     --ignore-existing       ignore files that already exist on the receiving side\n");
+  rprintf(F,"     --ignore-existing       ignore files that already exist on receiving side\n");
   rprintf(F,"     --delete                delete files that don't exist on the sending side\n");
   rprintf(F,"     --delete-excluded       also delete excluded files on the receiving side\n");
-  rprintf(F,"     --delete-after          delete after transferring, not before\n");
-  rprintf(F,"     --ignore-errors         delete even if there are IO errors\n");
+  rprintf(F,"     --delete-after          receiver deletes after transferring, not before\n");
+  rprintf(F,"     --ignore-errors         delete even if there are I/O errors\n");
   rprintf(F,"     --max-delete=NUM        don't delete more than NUM files\n");
   rprintf(F,"     --partial               keep partially transferred files\n");
   rprintf(F,"     --force                 force deletion of directories even if not empty\n");
   rprintf(F,"     --numeric-ids           don't map uid/gid values by user/group name\n");
-  rprintf(F,"     --timeout=TIME          set IO timeout in seconds\n");
-  rprintf(F," -I, --ignore-times          don't exclude files that match length and time\n");
-  rprintf(F,"     --size-only             only use file size when determining if a file should be transferred\n");
-  rprintf(F,"     --modify-window=NUM     Timestamp window (seconds) for file match (default=%d)\n",modify_window);
+  rprintf(F,"     --timeout=TIME          set I/O timeout in seconds\n");
+  rprintf(F," -I, --ignore-times          turn off mod time & file size quick check\n");
+  rprintf(F,"     --size-only             ignore mod time for quick check (use size)\n");
+  rprintf(F,"     --modify-window=NUM     compare mod times with reduced accuracy\n");
   rprintf(F," -T  --temp-dir=DIR          create temporary files in directory DIR\n");
   rprintf(F,"     --compare-dest=DIR      also compare destination files relative to DIR\n");
   rprintf(F,"     --link-dest=DIR         create hardlinks to DIR for unchanged files\n");
@@ -265,14 +266,14 @@ void usage(enum logcode F)
   rprintf(F,"     --include=PATTERN       don't exclude files matching PATTERN\n");
   rprintf(F,"     --include-from=FILE     don't exclude patterns listed in FILE\n");
   rprintf(F,"     --files-from=FILE       read FILE for list of source-file names\n");
-  rprintf(F," -0  --from0                 file names we read are separated by nulls, not newlines\n");
+  rprintf(F," -0  --from0                 all *-from file lists are delimited by nulls\n");
   rprintf(F,"     --version               print version number\n");
-  rprintf(F,"     --daemon                run as a rsync daemon\n");
+  rprintf(F,"     --daemon                run as an rsync daemon\n");
   rprintf(F,"     --no-detach             do not detach from the parent\n");
   rprintf(F,"     --address=ADDRESS       bind to the specified address\n");
   rprintf(F,"     --config=FILE           specify alternate rsyncd.conf file\n");
   rprintf(F,"     --port=PORT             specify alternate rsyncd port number\n");
-  rprintf(F,"     --blocking-io           use blocking IO for the remote shell\n");
+  rprintf(F,"     --blocking-io           use blocking I/O for the remote shell\n");
   rprintf(F,"     --no-blocking-io        turn off --blocking-io\n");
   rprintf(F,"     --stats                 give some file transfer stats\n");
   rprintf(F,"     --progress              show progress during transfer\n");
@@ -602,6 +603,17 @@ int parse_arguments(int *argc, const char ***argv, int frommain)
                        "write-batch and read-batch can not be used together\n");
                exit_cleanup(RERR_SYNTAX);
        }
+       if (batch_prefix && strlen(batch_prefix) > MAX_BATCH_PREFIX_LEN) {
+               rprintf(FERROR,
+                       "the batch-file prefix must be %d characters or less.\n",
+                       MAX_BATCH_PREFIX_LEN);
+               exit_cleanup(RERR_SYNTAX);
+       }
+
+       if (tmpdir && strlen(tmpdir) >= MAXPATHLEN - 10) {
+               rprintf(FERROR, "the --temp-dir path is WAY too long.\n");
+               exit_cleanup(RERR_SYNTAX);
+       }
 
        if (do_compression && (write_batch || read_batch)) {
                rprintf(FERROR,
@@ -707,7 +719,7 @@ void server_options(char **args,int *argc)
        static char mwindow[30];
        static char bw[50];
        /* Leave room for ``--(write|read)-batch='' */
-       static char fext[MAXPATHLEN + 15];
+       static char fext[MAX_BATCH_PREFIX_LEN + 15];
 
        int i, x;
 
@@ -790,7 +802,7 @@ void server_options(char **args,int *argc)
        if (x != 1) args[ac++] = argstr;
 
        if (block_size) {
-               snprintf(bsize,sizeof(bsize),"-B%d",block_size);
+               snprintf(bsize, sizeof bsize, "-B%u", block_size);
                args[ac++] = bsize;
        }