Source
--- sender.c.orig 2006-01-09 12:35:38.000000000 -0600
+++ sender.c 2006-01-09 12:35:52.000000000 -0600
#include "rsync.h"
+#ifdef HAVE_COPYFILE_H
+#include <copyfile.h>
+#endif
+
extern int verbose;
extern int do_xfers;
extern int am_server;
extern struct file_list *the_file_list;
extern char *log_format;
+#ifdef EA_SUPPORT
+extern int extended_attributes;
+#endif
/**
* @file
return;
}
+#ifdef HAVE_COPYFILE
+ if (extended_attributes
+ && !strncmp(file->basename, "._", 2)) {
+ char fname_tmp[MAXPATHLEN];
+ char fname_src[MAXPATHLEN];
+ extern char *tmpdir;
+
+ if (tmpdir == NULL)
+ tmpdir = "/tmp";
+
+ strlcpy(fname_src, fname, MAXPATHLEN);
+
+ if (file->dirname)
+ sprintf(fname_src + offset, "%s/%s",
+ file->dirname, file->basename + 2);
+ else
+ strlcpy(fname_src + offset, file->basename + 2, MAXPATHLEN);
+
+ if(!get_tmpname(fname_tmp, file->basename))
+ continue;
+
+ if(mktemp(fname_tmp)
+ && !copyfile(fname_src, fname_tmp, NULL,
+ COPYFILE_PACK | COPYFILE_METADATA)) {
+ fd = do_open(fname_tmp, O_RDONLY, 0);
+ unlink(fname_tmp);
+ }
+ else
+ {
+ rprintf(FERROR, "send_files failed to open %s: %s\n",
+ full_fname(fname_tmp), strerror(errno));
+ continue;
+ }
+ } else
+#endif
fd = do_open(fname, O_RDONLY, 0);