extern int verbose;
extern int dry_run;
+extern int itemize_changes;
extern int preserve_times;
extern int omit_dir_times;
extern int am_root;
extern int preserve_uid;
extern int preserve_gid;
extern int force_delete;
+extern int inplace;
extern int recurse;
extern int keep_dirlinks;
extern int make_backups;
+extern struct stats stats;
extern char *backup_dir;
-extern int inplace;
+extern char *log_format;
/*
* delete a file or directory. If force_delete is set then delete
* recursively
*/
-int delete_file(char *fname, int flags)
+int delete_file(char *fname, int mode, int flags)
{
DIR *d;
struct dirent *di;
STRUCT_STAT st;
int zap_dir;
- if (!(flags & DEL_DIR)) {
+ if (!S_ISDIR(mode)) {
if (robust_unlink(fname) == 0) {
- if (verbose && !(flags & DEL_TERSE)) {
- rprintf(FINFO, "deleting %s\n",
- safe_fname(fname));
- }
+ if ((verbose || log_format) && !(flags & DEL_TERSE))
+ log_delete(fname, mode);
return 0;
}
if (errno == ENOENT)
if (dry_run && zap_dir)
errno = ENOTEMPTY;
else if (do_rmdir(fname) == 0) {
- if (verbose && !(flags & DEL_TERSE)) {
- rprintf(FINFO, "deleting %s/\n",
- safe_fname(fname));
- }
+ if ((verbose || log_format) && !(flags & DEL_TERSE))
+ log_delete(fname, mode);
return 0;
}
if (errno == ENOENT)
}
if (!(flags & DEL_TERSE)) {
- if (verbose)
- rprintf(FINFO, "deleting %s/\n", safe_fname(fname));
+ if (verbose || log_format)
+ log_delete(fname, mode);
flags |= DEL_TERSE;
}
if (do_lstat(buf, &st) < 0)
continue;
- if (S_ISDIR(st.st_mode))
- flags |= DEL_DIR;
- else
- flags &= ~DEL_DIR;
-
- if (verbose) {
- rprintf(FINFO, "deleting %s%s\n", safe_fname(buf),
- flags & DEL_DIR ? "/" : "");
- }
- if (delete_file(buf, flags) != 0) {
+ if (verbose || log_format)
+ log_delete(buf, st.st_mode);
+ if (delete_file(buf, st.st_mode, flags) != 0) {
closedir(d);
return -1;
}
change_uid = am_root && preserve_uid && st->st_uid != file->uid;
change_gid = preserve_gid && file->gid != GID_NONE
&& st->st_gid != file->gid;
-#if !HAVE_LCHOWN && !CHOWN_MODIFIES_SYMLINK
+#if !defined HAVE_LCHOWN && !defined CHOWN_MODIFIES_SYMLINK
if (S_ISLNK(st->st_mode))
;
else
updated = 1;
}
-#if HAVE_CHMOD
+#ifdef HAVE_CHMOD
if (!S_ISLNK(st->st_mode)) {
if ((st->st_mode & CHMOD_BITS) != (file->mode & CHMOD_BITS)) {
updated = 1;