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>
#define _XOPEN_SOURCE 700
#define _BSD_SOURCE
+#include "kerncompat.h"
+
#include <unistd.h>
#include <stdint.h>
#include <dirent.h>
* Boston, MA 021110-1307, USA.
*/
+#include "kerncompat.h"
+
#include <sys/ioctl.h>
#include <sys/wait.h>
#include <sys/stat.h>
#define _GNU_SOURCE
+#include "kerncompat.h"
+
#include <unistd.h>
#include <stdint.h>
#include <dirent.h>
#define _XOPEN_SOURCE 600
#define _GNU_SOURCE 1
+
+#include "kerncompat.h"
+
#ifndef __CHECKER__
#include <sys/ioctl.h>
#include <sys/mount.h>
#include <unistd.h>
#include <uuid/uuid.h>
#include <linux/fs.h>
-#include "kerncompat.h"
+
#include "ctree.h"
#include "disk-io.h"
#include "volumes.h"
#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;
#define _XOPEN_SOURCE 500
#define _GNU_SOURCE
+#include "kerncompat.h"
+
#ifndef __CHECKER__
#include <sys/ioctl.h>
#include <sys/mount.h>
#include <linux/fs.h>
#include <ctype.h>
#include <attr/xattr.h>
-#include "kerncompat.h"
#include "ctree.h"
#include "disk-io.h"
#include "volumes.h"
#define _XOPEN_SOURCE 500
#define _GNU_SOURCE 1
+
+#include "kerncompat.h"
+
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <zlib.h>
-#include "kerncompat.h"
+
#include "ctree.h"
#include "disk-io.h"
#include "print-tree.h"