1 This patch makes the xattr functions skip devices and special files,
2 because OS X returns the wrong errno when getting/setting xattrs on
3 them (it returns EPERM instead of ENOTSUP).
5 To use this patch, run these commands for a successful build:
7 patch -p1 <patches/osx-xattr-nodev.diff
8 ./configure (optional if already run)
11 diff --git a/flist.c b/flist.c
14 @@ -1355,6 +1355,7 @@ static struct file_struct *send_file_name(int f, struct file_list *flist,
17 if (preserve_xattrs) {
18 + sx.st.st_mode = file->mode;
20 if (get_xattr(fname, &sx) < 0) {
21 io_error |= IOERR_GENERAL;
22 diff --git a/xattrs.c b/xattrs.c
25 @@ -281,6 +281,10 @@ int get_xattr(const char *fname, stat_x *sxp)
27 sxp->xattr = new(item_list);
28 *sxp->xattr = empty_xattr;
30 + if (IS_SPECIAL(sxp->st.st_mode) || IS_DEVICE(sxp->st.st_mode))
33 if (rsync_xal_get(fname, sxp->xattr) < 0) {
36 @@ -861,6 +865,11 @@ int set_xattr(const char *fname, const struct file_struct *file,
40 + if (IS_SPECIAL(sxp->st.st_mode) || IS_DEVICE(sxp->st.st_mode)) {
46 return rsync_xal_set(fname, lst + ndx, fnamecmp, sxp);