This patch makes the xattr functions skip devices and special files, because OS X returns the wrong errno when getting/setting xattrs on them (it returns EPERM instead of ENOTSUP). To use this patch, run these commands for a successful build: patch -p1 mode; sx.xattr = NULL; if (get_xattr(fname, &sx) < 0) { io_error |= IOERR_GENERAL; diff --git a/xattrs.c b/xattrs.c --- a/xattrs.c +++ b/xattrs.c @@ -281,6 +281,10 @@ int get_xattr(const char *fname, stat_x *sxp) { sxp->xattr = new(item_list); *sxp->xattr = empty_xattr; + + if (IS_SPECIAL(sxp->st.st_mode) || IS_DEVICE(sxp->st.st_mode)) + return 0; + if (rsync_xal_get(fname, sxp->xattr) < 0) { free_xattr(sxp); return -1; @@ -864,6 +868,11 @@ int set_xattr(const char *fname, const struct file_struct *file, return -1; } + if (IS_SPECIAL(sxp->st.st_mode) || IS_DEVICE(sxp->st.st_mode)) { + errno = ENOTSUP; + return -1; + } + ndx = F_XATTR(file); return rsync_xal_set(fname, lst + ndx, fnamecmp, sxp); }