osxcross/patches/xar-netbsd.patch
Thomas Pöchtrager a829f523b8 support NetBSD (https://github.com/tpoechtrager/osxcross/issues/7)
bump version (0.5 -> 0.6)
update CHANGELOG
misc adjustments
2014-03-26 20:39:20 +01:00

93 lines
2.3 KiB
Diff

--- lib/linuxattr.c
+++ lib/linuxattr.c
@@ -52,9 +52,7 @@
#include <sys/param.h>
#endif
-#ifdef HAVE_SYS_STATFS_H /* Nonexistant future OS needs this */
-#include <sys/statfs.h>
-#endif
+#include <sys/statvfs.h>
#ifdef HAVE_SYS_MOUNT_H
#include <sys/mount.h>
@@ -138,7 +136,7 @@
#if defined(HAVE_SYS_XATTR_H) && defined(HAVE_LGETXATTR) && !defined(__APPLE__)
char *i, *buf = NULL;
int ret, retval=0, bufsz = 1024;
- struct statfs sfs;
+ struct statvfs sfs;
char *fsname = NULL;
struct _linuxattr_context context;
@@ -165,8 +163,9 @@
if( ret == 0 ) goto BAIL;
memset(&sfs, 0, sizeof(sfs));
- statfs(file, &sfs);
+ statvfs(file, &sfs);
+#if 0
switch(sfs.f_type) {
case EXT3_SUPER_MAGIC: fsname = "ext3"; break; /* assume ext3 */
case JFS_SUPER_MAGIC: fsname = "jfs" ; break;
@@ -174,6 +173,15 @@
case XFS_SUPER_MAGIC: fsname = "xfs" ; break;
default: retval=0; goto BAIL;
};
+#endif
+
+ fsname = sfs.f_fstypename;
+
+ if(strcmp(fsname, "ext3") && strcmp(fsname, "jfs") &&
+ strcmp(fsname, "reiser") && strcmp(fsname, "xfs")) {
+ retval=0;
+ goto BAIL;
+ }
for( i=buf; (i-buf) < ret; i += strlen(i)+1 ) {
xar_ea_t e;
@@ -202,7 +210,7 @@
{
#if defined HAVE_SYS_XATTR_H && defined(HAVE_LSETXATTR) && !defined(__APPLE__)
const char *fsname = "bogus";
- struct statfs sfs;
+ struct statvfs sfs;
int eaopt = 0;
struct _linuxattr_context context;
xar_prop_t p;
@@ -217,19 +225,31 @@
/* Check for EA extraction behavior */
memset(&sfs, 0, sizeof(sfs));
- if( statfs(file, &sfs) != 0 ) {
+ if( statvfs(file, &sfs) != 0 ) {
char *tmp, *bname;
tmp = strdup(file);
bname = dirname(tmp);
- statfs(bname, &sfs);
+ statvfs(bname, &sfs);
free(tmp);
}
+#if 0
switch(sfs.f_type) {
case EXT3_SUPER_MAGIC: fsname = "ext3"; break; /* assume ext3 */
case JFS_SUPER_MAGIC: fsname = "jfs" ; break;
case REISERFS_SUPER_MAGIC:fsname = "reiser" ; break;
case XFS_SUPER_MAGIC: fsname = "xfs" ; break;
};
+#endif
+
+ {
+ const char *pp = fsname;
+ fsname = sfs.f_fstypename;
+
+ if(strcmp(fsname, "ext3") && strcmp(fsname, "jfs") &&
+ strcmp(fsname, "reiser") && strcmp(fsname, "xfs")) {
+ fsname = pp;
+ }
+ }
for(p = xar_prop_pfirst(f); p; p = xar_prop_pnext(p)) {
const char *fs = NULL;