--- syscall.c.orig 2006-01-09 12:35:38.000000000 -0600 +++ syscall.c 2006-01-09 12:35:52.000000000 -0600 @@ -30,10 +30,18 @@ #include #endif +#ifdef HAVE_COPYFILE_H +#include +#include +#endif + extern int dry_run; extern int read_only; extern int list_only; extern int preserve_perms; +#ifdef EA_SUPPORT +extern int extended_attributes; +#endif #define RETURN_ERROR_IF(x,e) \ do { \ @@ -148,6 +156,19 @@ { if (dry_run) return 0; RETURN_ERROR_IF_RO_OR_LO; +#ifdef HAVE_COPYFILE + if(extended_attributes) + { + char dst_fname[MAXPATHLEN]; + if(!strncmp(basename(fname1), ".._", 3)) + { + snprintf(dst_fname, MAXPATHLEN, "%s/%s", dirname(fname2), basename(fname2) + 2); + if(copyfile(fname1, dst_fname, 0, + COPYFILE_UNPACK | COPYFILE_METADATA) == 0) + return unlink(fname1); + } + } +#endif return rename(fname1, fname2); }