- on systems (such as intel linux) where off_t is 32 bits but "long long"
[rsync/rsync.git] / main.c
diff --git a/main.c b/main.c
index ec40818..206a24c 100644 (file)
--- a/main.c
+++ b/main.c
@@ -22,7 +22,7 @@
 int verbose = 0;
 int always_checksum = 0;
 time_t starttime;
-off_t total_size = 0;
+int64 total_size = 0;
 int block_size=BLOCK_SIZE;
 
 char *backup_suffix = BACKUP_SUFFIX;
@@ -54,6 +54,7 @@ int am_root=0;
 int orig_umask=0;
 int relative_paths=0;
 int numeric_ids = 0;
+int force_delete = 0;
 
 extern int csum_length;
 
@@ -65,7 +66,7 @@ static void usage(FILE *f);
 
 static void report(int f)
 {
-  off_t in,out,tsize;
+  int64 in,out,tsize;
   time_t t = time(NULL);
   
   if (!verbose) return;
@@ -175,6 +176,9 @@ static void server_options(char **args,int *argc)
   if (delete_mode)
     args[ac++] = "--delete";
 
+  if (force_delete)
+    args[ac++] = "--force";
+
   if (numeric_ids)
     args[ac++] = "--numeric-ids";
 
@@ -192,7 +196,7 @@ static int do_cmd(char *cmd,char *machine,char *user,char *path,int *f_in,int *f
 {
   char *args[100];
   int i,argc=0, ret;
-  char *tok,*p,*dir=NULL;
+  char *tok,*dir=NULL;
 
   if (!local_server) {
     if (!cmd)
@@ -439,6 +443,7 @@ static void usage(FILE *f)
   fprintf(f,"    --rsync-path PATH    specify path to rsync on the remote machine\n");
   fprintf(f,"-C, --cvs-exclude        auto ignore files in the same way CVS does\n");
   fprintf(f,"    --delete             delete files that don't exist on the sending side\n");
+  fprintf(f,"    --force              force deletion of directories even if not empty\n");
   fprintf(f,"    --numeric-ids        don't map uid/gid values by user/group name\n");
   fprintf(f,"-I, --ignore-times       don't exclude files that match length and time\n");
   fprintf(f,"-T  --temp-dir DIR       create temporary files in directory DIR\n");
@@ -454,7 +459,7 @@ static void usage(FILE *f)
 }
 
 enum {OPT_VERSION,OPT_SUFFIX,OPT_SENDER,OPT_SERVER,OPT_EXCLUDE,
-      OPT_EXCLUDE_FROM,OPT_DELETE,OPT_NUMERIC_IDS,OPT_RSYNC_PATH};
+      OPT_EXCLUDE_FROM,OPT_DELETE,OPT_NUMERIC_IDS,OPT_RSYNC_PATH,OPT_FORCE};
 
 static char *short_options = "oblLWHpguDCtcahvrRIxnSe:B:T:z";
 
@@ -463,6 +468,7 @@ static struct option long_options[] = {
   {"server",      0,     0,    OPT_SERVER},
   {"sender",      0,     0,    OPT_SENDER},
   {"delete",      0,     0,    OPT_DELETE},
+  {"force",       0,     0,    OPT_FORCE},
   {"numeric-ids", 0,     0,    OPT_NUMERIC_IDS},
   {"exclude",     1,     0,    OPT_EXCLUDE},
   {"exclude-from",1,     0,    OPT_EXCLUDE_FROM},
@@ -553,6 +559,10 @@ int main(int argc,char *argv[])
          delete_mode = 1;
          break;
 
+       case OPT_FORCE:
+         force_delete = 1;
+         break;
+
        case OPT_NUMERIC_IDS:
          numeric_ids = 1;
          break;