summaryrefslogtreecommitdiff
path: root/filesystems/libntfs/patches/patch-ntfsprogs_ntfsclone.c
blob: 4d3e1a5674c4b78ff64db7a3ab74c6b42e5e99c8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
$NetBSD: patch-ntfsprogs_ntfsclone.c,v 1.1 2014/05/19 12:22:06 adam Exp $

--- ntfsprogs/ntfsclone.c.orig	2014-02-15 14:07:52.000000000 +0000
+++ ntfsprogs/ntfsclone.c
@@ -68,6 +68,19 @@
  */
 #define NTFS_DO_NOT_CHECK_ENDIANS
 
+#ifdef __NetBSD__
+#  include <sys/param.h>
+   /* NetBSD versions later than 2.99.9 have statvfs(2) instead of statfs(2) */
+#  if __NetBSD_Version__ >= 299000900
+#    include <sys/statvfs.h>
+#    define F_TYPE	f_fsid
+#  else
+#    define F_TYPE	f_type
+#  endif
+#else
+#  define F_TYPE	f_type
+#endif
+
 #include "debug.h"
 #include "types.h"
 #include "support.h"
@@ -161,8 +174,12 @@ static struct {
 	char *output;
 	char *volume;
 #ifndef NO_STATFS
+#if defined(__NetBSD__) && (__NetBSD_Version__ >= 299000900)
+	struct statvfs stfs;
+#else
 	struct statfs stfs;
 #endif
+#endif
 } opt;
 
 struct bitmap {
@@ -818,7 +835,7 @@ static void copy_cluster(int rescue, u64
 #ifndef NO_STATFS
 		int err = errno;
 		perr_printf("Write failed");
-		if (err == EIO && opt.stfs.f_type == 0x517b)
+		if (err == EIO && opt.stfs.F_TYPE == 0x517b)
 			Printf("Apparently you tried to clone to a remote "
 			       "Windows computer but they don't\nhave "
 			       "efficient sparse file handling by default. "
@@ -2238,7 +2255,7 @@ static void set_filesize(s64 filesize)
 		Printf("WARNING: Couldn't get filesystem type: "
 		       "%s\n", strerror(errno));
 	else
-		fs_type = opt.stfs.f_type;
+		fs_type = opt.stfs.F_TYPE;
 
 	if (fs_type == 0x52654973)
 		Printf("WARNING: You're using ReiserFS, it has very poor "