Btrfs-progs: Fix compiler warnings on PPC64
authorWade Cline <clinew@linux.vnet.ibm.com>
Thu, 20 Sep 2012 21:26:28 +0000 (14:26 -0700)
committerDavid Sterba <dsterba@suse.cz>
Thu, 17 Jan 2013 17:12:57 +0000 (18:12 +0100)
The kernel uses unsigned long long for u64, but PPC64 uses unsigned
long by default. This results in compilation warnings such as:

print-tree.c:333: warning: format '%llu' expects type 'long long
unsigned int', but argument 4 has type 'u64'

To fix this, the macro __KERNEL__ needs to be defined before including
the file <asm/types.h>. This can be done by defining the macro in
"kerncompat.h" and making it the first included file in the relevant
header files; this fixes the compiler warnings on PPC64.

Reviewed-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Wade Cline <clinew@linux.vnet.ibm.com>
cmds-receive.c
cmds-scrub.c
cmds-send.c
convert.c
kerncompat.h
mkfs.c
restore.c

index a8be6fa43db3eb22e5ca62d54e1068351acf675f..a21c037663ebbf34d27bd6ccc4c5b3a022830522 100644 (file)
@@ -21,6 +21,8 @@
 #define _XOPEN_SOURCE 700
 #define _BSD_SOURCE
 
+#include "kerncompat.h"
+
 #include <unistd.h>
 #include <stdint.h>
 #include <dirent.h>
index 24be20ff0713b55ac7ee7a953c24e68d35a53985..e29db27d1b01dabc8ad22089a5eef292ad219b87 100644 (file)
@@ -16,6 +16,8 @@
  * Boston, MA 021110-1307, USA.
  */
 
+#include "kerncompat.h"
+
 #include <sys/ioctl.h>
 #include <sys/wait.h>
 #include <sys/stat.h>
index 9b47e706074bb8731afb78d283995b818b2c057f..59522c351fdbccdc4bb32dba975d686e408fce52 100644 (file)
@@ -18,6 +18,8 @@
 
 #define _GNU_SOURCE
 
+#include "kerncompat.h"
+
 #include <unistd.h>
 #include <stdint.h>
 #include <dirent.h>
index fa7bf8c52ee98b6047ef0ff3536fb8ee559fd903..1de2a44185697a3c402f523c872caff55ba58479 100644 (file)
--- a/convert.c
+++ b/convert.c
@@ -18,6 +18,9 @@
 
 #define _XOPEN_SOURCE 600
 #define _GNU_SOURCE 1
+
+#include "kerncompat.h"
+
 #ifndef __CHECKER__
 #include <sys/ioctl.h>
 #include <sys/mount.h>
@@ -31,7 +34,7 @@
 #include <unistd.h>
 #include <uuid/uuid.h>
 #include <linux/fs.h>
-#include "kerncompat.h"
+
 #include "ctree.h"
 #include "disk-io.h"
 #include "volumes.h"
index 46236cd51e62ed62197824316583b788f316cee3..d60f72222e14b1b455d5fa48a1f10cdd496b0afe 100644 (file)
@@ -18,6 +18,7 @@
 
 #ifndef __KERNCOMPAT
 #define __KERNCOMPAT
+
 #include <stdio.h>
 #include <stdlib.h>
 #include <errno.h>
 #endif
 
 #ifndef __CHECKER__
+/*
+ * Since we're using primitive definitions from kernel-space, we need to
+ * define __KERNEL__ so that system header files know which definitions
+ * to use.
+ */
+#define __KERNEL__
 #include <asm/types.h>
 typedef __u32 u32;
 typedef __u64 u64;
 typedef __u16 u16;
 typedef __u8 u8;
+/*
+ * Continuing to define __KERNEL__ breaks others parts of the code, so
+ * we can just undefine it now that we have the correct headers...
+ */
+#undef __KERNEL__
 #else
 typedef unsigned int u32;
 typedef unsigned int __u32;
diff --git a/mkfs.c b/mkfs.c
index 47f0c9ca98904edb667460ab9aed37907ad3745e..8fda48a826d7abf3dd7c59fc3b9ca1877e69f05b 100644 (file)
--- a/mkfs.c
+++ b/mkfs.c
@@ -19,6 +19,8 @@
 #define _XOPEN_SOURCE 500
 #define _GNU_SOURCE
 
+#include "kerncompat.h"
+
 #ifndef __CHECKER__
 #include <sys/ioctl.h>
 #include <sys/mount.h>
@@ -37,7 +39,6 @@
 #include <linux/fs.h>
 #include <ctype.h>
 #include <attr/xattr.h>
-#include "kerncompat.h"
 #include "ctree.h"
 #include "disk-io.h"
 #include "volumes.h"
index b9e5381f1d87c5400644c061386d58c1479a1351..c447416ab0533566fc76af3a8b0cb7a3ac46f936 100644 (file)
--- a/restore.c
+++ b/restore.c
@@ -18,6 +18,9 @@
 
 #define _XOPEN_SOURCE 500
 #define _GNU_SOURCE 1
+
+#include "kerncompat.h"
+
 #include <ctype.h>
 #include <stdio.h>
 #include <stdlib.h>
@@ -25,7 +28,7 @@
 #include <fcntl.h>
 #include <sys/stat.h>
 #include <zlib.h>
-#include "kerncompat.h"
+
 #include "ctree.h"
 #include "disk-io.h"
 #include "print-tree.h"