Define the WEXITSTATUS macro for systems that don't have it.
[rsync/rsync.git] / options.c
index abdfff3..623385a 100644 (file)
--- a/options.c
+++ b/options.c
@@ -62,6 +62,7 @@ int safe_symlinks=0;
 int copy_unsafe_links=0;
 int block_size=BLOCK_SIZE;
 int size_only=0;
+int delete_after=0;
 
 char *backup_suffix = BACKUP_SUFFIX;
 char *tmpdir = NULL;
@@ -78,6 +79,8 @@ int quiet = 0;
 int always_checksum = 0;
 int list_only = 0;
 
+struct in_addr socket_address = {INADDR_ANY};
+
 void usage(int F)
 {
   rprintf(F,"rsync version %s Copyright Andrew Tridgell and Paul Mackerras\n\n",
@@ -124,6 +127,7 @@ void usage(int F)
   rprintf(F," -C, --cvs-exclude           auto ignore files in the same way CVS does\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,"     --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");
@@ -132,6 +136,7 @@ void usage(int F)
   rprintf(F,"     --size-only             only use file size when determining if a file should be transferred\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," -P                          equivalent to --partial --progress\n");
   rprintf(F," -z, --compress              compress file data\n");
   rprintf(F,"     --exclude=PATTERN       exclude files matching PATTERN\n");
   rprintf(F,"     --exclude-from=FILE     exclude patterns listed in FILE\n");
@@ -139,6 +144,7 @@ void usage(int F)
   rprintf(F,"     --include-from=FILE     don't exclude patterns listed in FILE\n");
   rprintf(F,"     --version               print version number\n");  
   rprintf(F,"     --daemon                run as a rsync daemon\n");  
+  rprintf(F,"     --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,"     --stats                 give some file transfer stats\n");  
@@ -158,9 +164,10 @@ enum {OPT_VERSION, OPT_SUFFIX, OPT_SENDER, OPT_SERVER, OPT_EXCLUDE,
       OPT_RSYNC_PATH, OPT_FORCE, OPT_TIMEOUT, OPT_DAEMON, OPT_CONFIG, OPT_PORT,
       OPT_INCLUDE, OPT_INCLUDE_FROM, OPT_STATS, OPT_PARTIAL, OPT_PROGRESS,
       OPT_COPY_UNSAFE_LINKS, OPT_SAFE_LINKS, OPT_COMPARE_DEST,
-      OPT_LOG_FORMAT, OPT_PASSWORD_FILE, OPT_SIZE_ONLY};
+      OPT_LOG_FORMAT, OPT_PASSWORD_FILE, OPT_SIZE_ONLY, OPT_ADDRESS,
+      OPT_DELETE_AFTER};
 
-static char *short_options = "oblLWHpguDCtcahvqrRIxnSe:B:T:z";
+static char *short_options = "oblLWHpguDCtcahvqrRIxnSe:B:T:zP";
 
 static struct option long_options[] = {
   {"version",     0,     0,    OPT_VERSION},
@@ -213,9 +220,11 @@ static struct option long_options[] = {
   {"stats",       0,     0,    OPT_STATS},
   {"progress",    0,     0,    OPT_PROGRESS},
   {"partial",     0,     0,    OPT_PARTIAL},
+  {"delete-after",0,     0,    OPT_DELETE_AFTER},
   {"config",      1,     0,    OPT_CONFIG},
   {"port",        1,     0,    OPT_PORT},
   {"log-format",  1,     0,    OPT_LOG_FORMAT},
+  {"address",     1,     0,    OPT_ADDRESS},
   {0,0,0,0}};
 
 
@@ -311,6 +320,10 @@ int parse_arguments(int argc, char *argv[], int frommain)
                        delete_mode = 1;
                        break;
 
+               case OPT_DELETE_AFTER:
+                       delete_after = 1;
+                       break;
+
                case OPT_DELETE_EXCLUDED:
                        delete_excluded = 1;
                        delete_mode = 1;
@@ -500,6 +513,11 @@ int parse_arguments(int argc, char *argv[], int frommain)
                        keep_partial = 1;
                        break;
 
+               case 'P':
+                       do_progress = 1;
+                       keep_partial = 1;
+                       break;
+
                case OPT_CONFIG:
                        config_file = optarg;
                        break;
@@ -512,6 +530,15 @@ int parse_arguments(int argc, char *argv[], int frommain)
                        log_format = optarg;
                        break;
 
+               case OPT_ADDRESS:
+                       {
+                               struct in_addr *ia;
+                               if ((ia = ip_address(optarg))) {
+                                       socket_address = *ia;
+                               }
+                       }
+                       break;
+
                default:
                        slprintf(err_buf,sizeof(err_buf),"unrecognised option\n");
                        return 0;
@@ -613,6 +640,9 @@ void server_options(char **args,int *argc)
        if (force_delete)
                args[ac++] = "--force";
 
+       if (delete_after)
+               args[ac++] = "--delete-after";
+
        if (copy_unsafe_links)
                args[ac++] = "--copy-unsafe-links";