X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/1c53e5171cfce78416c0a534dbe8fb2d0725fd2e..16edf86595a5a990a942fa045dfb523dae1fe6cb:/flist.c diff --git a/flist.c b/flist.c index df4beb94..23def370 100644 --- a/flist.c +++ b/flist.c @@ -43,6 +43,7 @@ extern int one_file_system; extern int copy_dirlinks; extern int keep_dirlinks; extern int preserve_acls; +extern int preserve_xattrs; extern int preserve_links; extern int preserve_hard_links; extern int preserve_devices; @@ -888,6 +889,10 @@ static struct file_struct *recv_file_entry(struct file_list *flist, if (preserve_acls && !S_ISLNK(mode)) receive_acl(file, f); #endif +#ifdef SUPPORT_XATTRS + if (preserve_xattrs) + receive_xattr(file, f ); +#endif if (S_ISREG(mode) || S_ISLNK(mode)) stats.total_size += file_length; @@ -1160,7 +1165,7 @@ static struct file_struct *send_file_name(int f, struct file_list *flist, int flags, int filter_flags) { struct file_struct *file; -#ifdef SUPPORT_ACLS +#if defined SUPPORT_ACLS || defined SUPPORT_XATTRS statx sx; #endif @@ -1179,6 +1184,13 @@ static struct file_struct *send_file_name(int f, struct file_list *flist, return NULL; } #endif +#ifdef SUPPORT_XATTRS + if (preserve_xattrs && f >= 0) { + sx.xattr = NULL; + if (get_xattr(fname, &sx) < 0) + return NULL; + } +#endif maybe_emit_filelist_progress(flist->count + flist_count_offset); @@ -1191,6 +1203,12 @@ static struct file_struct *send_file_name(int f, struct file_list *flist, send_acl(&sx, f); free_acl(&sx); } +#endif +#ifdef SUPPORT_XATTRS + if (preserve_xattrs) { + F_XATTR(file) = send_xattr(&sx, f); + free_xattr(&sx); + } #endif } return file;