]> git.ipfire.org Git - thirdparty/libarchive.git/commitdiff
Merge r2269 and part of r2359:
authorJoerg Sonnenberger <joerg.sonnenberger@gmail.com>
Wed, 16 Jun 2010 20:29:53 +0000 (16:29 -0400)
committerJoerg Sonnenberger <joerg.sonnenberger@gmail.com>
Wed, 16 Jun 2010 20:29:53 +0000 (16:29 -0400)
Only enable FreeBSD-style xattr support, if EXTATTR_NAMESPACE_USER
exists.

SVN-Revision: 2479

CMakeLists.txt
configure.ac
libarchive/archive_read_disk_entry_from_file.c
libarchive/archive_write_disk.c

index c80740bb7a0fa5de8c93540b512d20c878ec5aa8..40f70fcde40940d50690c8e6f74edc86ab274056 100644 (file)
@@ -205,13 +205,11 @@ MACRO (LA_CHECK_INCLUDE_FILE header var)
       ENDIF (${var})
 ENDMACRO (LA_CHECK_INCLUDE_FILE)
 
-# Few headers that must precede other headers
-# Must precede sys/extattr.h on FreeBSD
+# Some FreeBSD headers assume sys/types.h was already included.
 LA_CHECK_INCLUDE_FILE("sys/types.h" HAVE_SYS_TYPES_H)
 
 # Alphabetize the rest unless there's a compelling reason
 LA_CHECK_INCLUDE_FILE("acl/libacl.h" HAVE_ACL_LIBACL_H)
-LA_CHECK_INCLUDE_FILE("attr/xattr.h" HAVE_ATTR_XATTR_H)
 LA_CHECK_INCLUDE_FILE("ctype.h" HAVE_CTYPE_H)
 LA_CHECK_INCLUDE_FILE("direct.h" HAVE_DIRECT_H)
 LA_CHECK_INCLUDE_FILE("dlfcn.h" HAVE_DLFCN_H)
@@ -239,7 +237,6 @@ LA_CHECK_INCLUDE_FILE("string.h" HAVE_STRING_H)
 LA_CHECK_INCLUDE_FILE("strings.h" HAVE_STRINGS_H)
 LA_CHECK_INCLUDE_FILE("sys/acl.h" HAVE_SYS_ACL_H)
 LA_CHECK_INCLUDE_FILE("sys/cdefs.h" HAVE_SYS_CDEFS_H)
-LA_CHECK_INCLUDE_FILE("sys/extattr.h" HAVE_SYS_EXTATTR_H)
 LA_CHECK_INCLUDE_FILE("sys/ioctl.h" HAVE_SYS_IOCTL_H)
 LA_CHECK_INCLUDE_FILE("sys/mkdev.h" HAVE_SYS_MKDEV_H)
 LA_CHECK_INCLUDE_FILE("sys/param.h" HAVE_SYS_PARAM_H)
@@ -753,10 +750,12 @@ CHECK_FILE_OFFSET_BITS()
 IF(ENABLE_XATTR)
   LA_CHECK_INCLUDE_FILE(attr/xattr.h     HAVE_ATTR_XATTR_H)
   LA_CHECK_INCLUDE_FILE(sys/xattr.h      HAVE_SYS_XATTR_H)
+  LA_CHECK_INCLUDE_FILE(sys/extattr.h      HAVE_SYS_EXTATTR_H)
   CHECK_LIBRARY_EXISTS(attr "setxattr" "" HAVE_ATTR_LIB)
   IF(HAVE_ATTR_LIB)
     SET(CMAKE_REQUIRED_LIBRARIES "attr")
   ENDIF(HAVE_ATTR_LIB)
+  CHECK_SYMBOL_EXISTS(EXTATTR_NAMESPACE_USER "sys/types.h;sys/extattr.h" HAVE_DECL_EXTATTR_NAMESPACE_USER)
   CHECK_FUNCTION_EXISTS_GLIBC(extattr_get_file HAVE_EXTATTR_GET_FILE)
   CHECK_FUNCTION_EXISTS_GLIBC(extattr_list_file HAVE_EXTATTR_LIST_FILE)
   CHECK_FUNCTION_EXISTS_GLIBC(extattr_set_fd HAVE_EXTATTR_SET_FD)
index a53b4594e74c5b166e5f141414dddaf696c498e5..655a242b693819aead8edb092674ec9fc72f9ae9 100644 (file)
@@ -450,6 +450,9 @@ if test "x$enable_xattr" != "xno"; then
        AC_CHECK_FUNCS([extattr_set_fd extattr_set_file])
        AC_CHECK_FUNCS([fsetxattr getxattr])
        AC_CHECK_FUNCS([lgetxattr listxattr llistxattr lsetxattr])
+       AC_CHECK_DECLS([EXTATTR_NAMESPACE_USER], [], [], [#include <sys/types.h>
+#include <sys/extattr.h>
+])
 fi
 
 # Check for ACL support
index 6acc096623ade9e8de395e84835f5b0ef49260f8..7473c506e8329d15c3e4aa4c34011fd6495cdc5a 100644 (file)
@@ -425,7 +425,8 @@ setup_xattrs(struct archive_read_disk *a,
        return (ARCHIVE_OK);
 }
 
-#elif HAVE_EXTATTR_GET_FILE && HAVE_EXTATTR_LIST_FILE
+#elif HAVE_EXTATTR_GET_FILE && HAVE_EXTATTR_LIST_FILE && \
+    HAVE_DECL_EXTATTR_NAMESPACE_USER
 
 /*
  * FreeBSD extattr interface.
index f61ae1759252a881cedb2252bfbcf0e8ac4dbec1..caf958e79a332f4a7d48cc09c8f9674da54cc2fd 100644 (file)
@@ -2477,7 +2477,7 @@ set_xattrs(struct archive_write_disk *a)
        }
        return (ret);
 }
-#elif HAVE_EXTATTR_SET_FILE
+#elif HAVE_EXTATTR_SET_FILE && HAVE_DECL_EXTATTR_NAMESPACE_USER
 /*
  * Restore extended attributes -  FreeBSD implementation
  */