- Needed to use a name buffer in delete_missing() to avoid having
authorWayne Davison <wayned@samba.org>
Sat, 19 Feb 2005 23:41:52 +0000 (23:41 +0000)
committerWayne Davison <wayned@samba.org>
Sat, 19 Feb 2005 23:41:52 +0000 (23:41 +0000)
  a recursive delete reuse our buffer from f_name().
- Moved the backup-handling into delete_file() in rsync.c.
- Moved the --max-delete counting into delete_file() in rsync.c.

flist.c

diff --git a/flist.c b/flist.c
index c90a21d..70b647c 100644 (file)
--- a/flist.c
+++ b/flist.c
@@ -39,15 +39,9 @@ extern int always_checksum;
 extern int module_id;
 extern int ignore_errors;
 extern int numeric_ids;
-
 extern int recurse;
 extern int xfer_dirs;
-extern char curr_dir[MAXPATHLEN];
-extern unsigned int curr_dir_len;
-extern char *backup_dir;
-extern char *backup_suffix;
 extern int filesfrom_fd;
-
 extern int one_file_system;
 extern int keep_dirlinks;
 extern int preserve_links;
@@ -58,17 +52,19 @@ extern int preserve_uid;
 extern int preserve_gid;
 extern int relative_paths;
 extern int implied_dirs;
-extern int make_backups;
-extern int backup_suffix_len;
 extern int copy_links;
 extern int copy_unsafe_links;
 extern int protocol_version;
 extern int sanitize_paths;
+extern int deletion_count;
 extern int max_delete;
 extern int orig_umask;
 extern int list_only;
+extern unsigned int curr_dir_len;
 extern char *log_format;
 
+extern char curr_dir[MAXPATHLEN];
+
 extern struct filter_list_struct filter_list;
 extern struct filter_list_struct server_filter_list;
 
@@ -78,7 +74,6 @@ static char empty_sum[MD4_SUM_LENGTH];
 static unsigned int file_struct_len;
 static struct file_list *received_flist, *sorting_flist;
 static dev_t filesystem_dev; /* used to implement -x */
-static int deletion_count = 0; /* used to implement --max-delete */
 
 static void clean_flist(struct file_list *flist, int strip_root, int no_dups);
 static void output_flist(struct file_list *flist, const char *whose_list);
@@ -1751,12 +1746,6 @@ char *f_name(struct file_struct *f)
 }
 
 
-static int is_backup_file(char *fn)
-{
-       int k = strlen(fn) - backup_suffix_len;
-       return k > 0 && strcmp(fn+k, backup_suffix) == 0;
-}
-
 struct file_list *get_dirlist(const char *dirname, int ignore_filter_rules)
 {
        struct file_list *dirlist;
@@ -1846,7 +1835,8 @@ void delete_in_dir(struct file_list *flist, char *fbuf,
 void delete_missing(struct file_list *full_list, struct file_list *dir_list,
                    const char *dirname)
 {
-       int i, mode;
+       char fbuf[MAXPATHLEN];
+       int i;
 
        if (max_delete && deletion_count >= max_delete)
                return;
@@ -1857,20 +1847,11 @@ void delete_missing(struct file_list *full_list, struct file_list *dir_list,
        for (i = dir_list->count; i--; ) {
                if (!dir_list->files[i]->basename)
                        continue;
-               mode = dir_list->files[i]->mode;
                if (flist_find(full_list, dir_list->files[i]) < 0) {
-                       char *f = f_name(dir_list->files[i]);
-                       if (make_backups && (backup_dir || !is_backup_file(f))
-                         && !S_ISDIR(mode)) {
-                               make_backup(f);
-                               if (verbose || log_format)
-                                       log_delete(f, mode);
-                       } else if (S_ISDIR(mode))
-                               delete_file(f, mode, DEL_FORCE_RECURSE);
-                       else
-                               delete_file(f, mode, 0);
-                       deletion_count++;
-                       if (max_delete && deletion_count >= max_delete)
+                       char *fn = f_name_to(dir_list->files[i], fbuf);
+                       int mode = dir_list->files[i]->mode;
+                       int dflag = S_ISDIR(mode) ? DEL_FORCE_RECURSE : 0;
+                       if (delete_file(fn, mode, dflag) < 0)
                                break;
                }
        }