diff options
Diffstat (limited to 'src/metastore.c')
-rw-r--r-- | src/metastore.c | 29 |
1 files changed, 28 insertions, 1 deletions
diff --git a/src/metastore.c b/src/metastore.c index ada41c4..9f01a8c 100644 --- a/src/metastore.c +++ b/src/metastore.c @@ -25,7 +25,11 @@ #include <sys/stat.h> #include <getopt.h> #include <utime.h> -#include <sys/xattr.h> + +#if !defined(NO_XATTR) || !NO_XATTR +# include <sys/xattr.h> +#endif /* !NO_XATTR */ + #include <stdlib.h> #include <string.h> #include <unistd.h> @@ -122,6 +126,11 @@ compare_print(struct metaentry *real, struct metaentry *stored, int cmp) if (cmp & DIFF_XATTR) msg(MSG_QUIET, "xattr "); msg(MSG_QUIET, "\n"); + + if (NO_XATTR && cmp & DIFF_XATTR) { + msg(MSG_WARNING, "%s:\txattr difference may be bogus: %s\n", + real->path, NO_XATTR_MSG); + } } /* @@ -235,9 +244,16 @@ compare_fix(struct metaentry *real, struct metaentry *stored, int cmp) msg(MSG_NORMAL, "%s:\tremoving xattr %s\n", real->path, real->xattr_names[i]); + if (NO_XATTR) { + msg(MSG_WARNING, "%s:\tremoving xattr %s failed: %s\n", + real->path, real->xattr_names[i], NO_XATTR_MSG); + } +#if !defined(NO_XATTR) || !NO_XATTR + else if (lremovexattr(real->path, real->xattr_names[i])) msg(MSG_DEBUG, "\tlremovexattr failed: %s\n", strerror(errno)); +#endif /* !NO_XATTR */ } for (i = 0; i < stored->xattrs; i++) { @@ -247,12 +263,19 @@ compare_fix(struct metaentry *real, struct metaentry *stored, int cmp) msg(MSG_NORMAL, "%s:\tadding xattr %s\n", stored->path, stored->xattr_names[i]); + if (NO_XATTR) { + msg(MSG_WARNING, "%s:\tadding xattr %s failed: %s\n", + stored->path, stored->xattr_names[i], NO_XATTR_MSG); + } +#if !defined(NO_XATTR) || !NO_XATTR + else if (lsetxattr(stored->path, stored->xattr_names[i], stored->xattr_values[i], stored->xattr_lvalues[i], XATTR_CREATE) ) msg(MSG_DEBUG, "\tlsetxattr failed: %s\n", strerror(errno)); +#endif /* !NO_XATTR */ } } } @@ -401,6 +424,10 @@ version(void) { printf("metastore %s\n", METASTORE_VER); + if (NO_XATTR) { + printf("Built with %s.\n", NO_XATTR_MSG); + } + exit(EXIT_SUCCESS); } |