--- bzip2.c.orig 2007-12-09 04:22:06.000000000 -0800 +++ bzip2.c 2008-08-26 18:21:10.000000000 -0700 @@ -152,6 +152,10 @@ #endif /* BZ_LCCWIN32 */ +#ifdef __APPLE__ +#include +#include +#endif /*---------------------------------------------*/ /*-- @@ -1061,6 +1065,27 @@ # endif } +#ifdef __APPLE__ +static void +clear_type_and_creator(char *path) +{ + struct attrlist alist; + struct { + u_int32_t length; + char info[32]; + } abuf; + + memset(&alist, 0, sizeof(alist)); + alist.bitmapcount = ATTR_BIT_MAP_COUNT; + alist.commonattr = ATTR_CMN_FNDRINFO; + + if (!getattrlist(path, &alist, &abuf, sizeof(abuf), 0) && abuf.length == sizeof(abuf)) { + memset(abuf.info, 0, 8); + setattrlist(path, &alist, abuf.info, sizeof(abuf.info), 0); + } +} +#endif /* __APPLE__ */ + static void applySavedFileAttrToOutputFile ( IntNative fd ) { @@ -1071,6 +1096,10 @@ ERROR_IF_NOT_ZERO ( retVal ); (void) fchown ( fd, fileMetaInfo.st_uid, fileMetaInfo.st_gid ); +#if __APPLE__ + copyfile(inName, outName, 0, COPYFILE_ACL | COPYFILE_XATTR); + clear_type_and_creator(outName); +#endif /* chown() will in many cases return with EPERM, which can be safely ignored. */