f2fs-tools: build binaries in Mac
authorJaegeuk Kim <jaegeuk@kernel.org>
Tue, 14 Nov 2017 18:53:32 +0000 (10:53 -0800)
committerJaegeuk Kim <jaegeuk@kernel.org>
Wed, 15 Nov 2017 03:43:48 +0000 (19:43 -0800)
This patch modifies f2fs-tools to be built in mac.

Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
19 files changed:
configure.ac
fsck/dump.c
fsck/f2fs.h
fsck/fsck.c
fsck/mount.c
fsck/quotaio_tree.h
fsck/resize.c
fsck/sload.c
fsck/xattr.c
fsck/xattr.h
include/android_config.h [new file with mode: 0644]
include/f2fs_fs.h
lib/libf2fs.c
lib/libf2fs_io.c
mkfs/f2fs_format.c
mkfs/f2fs_format_utils.c
tools/Makefile.am
tools/f2fscrypt.c
tools/fibmap.c

index 451b2de..73c830d 100644 (file)
@@ -35,16 +35,6 @@ AC_CONFIG_MACRO_DIR([m4])
 AC_CONFIG_AUX_DIR([build-aux])
 AM_INIT_AUTOMAKE([foreign tar-pax dist-xz])
 
-AC_CHECK_HEADERS_ONCE([
-       fcntl.h
-       mntent.h
-       stdlib.h
-       string.h
-       unistd.h
-       sys/ioctl.h
-       sys/mount.h
-])
-
 # Test configure options.
 AC_ARG_WITH([selinux],
        AS_HELP_STRING([--without-selinux],
@@ -91,9 +81,30 @@ AS_IF([test "x$have_blkid" = "xyes"],
 )
 
 # Checks for header files.
-AC_CHECK_HEADERS([linux/fs.h linux/blkzoned.h fcntl.h mntent.h stdlib.h string.h \
-               sys/ioctl.h sys/mount.h unistd.h linux/falloc.h byteswap.h \
-               attr/xattr.h linux/xattr.h linux/posix_acl.h sys/acl.h])
+AC_CHECK_HEADERS(m4_flatten([
+       attr/xattr.h
+       byteswap.h
+       fcntl.h
+       linux/blkzoned.h
+       linux/falloc.h
+       linux/fs.h
+       linux/hdreg.h
+       linux/limits.h
+       linux/posix_acl.h
+       linux/types.h
+       linux/xattr.h
+       mntent.h
+       scsi/sg.h
+       stdlib.h
+       string.h
+       sys/acl.h
+       sys/ioctl.h
+       sys/syscall.h
+       sys/mount.h
+       sys/sysmacros.h
+       sys/xattr.h
+       unistd.h
+]))
 
 # Checks for typedefs, structures, and compiler characteristics.
 AC_C_INLINE
@@ -104,15 +115,75 @@ AC_TYPE_SIZE_T
 # Checks for library functions.
 AC_FUNC_GETMNTENT
 AC_CHECK_FUNCS_ONCE([
+       add_key
        fallocate
+       fsetxattr
+       fstat
+       fstat64
        getmntent
+       keyctl
+       llseek
+       lseek64
        memset
-       fsetxattr
+       setmntent
 ])
 
 AS_IF([test "$ac_cv_header_byteswap_h" = "yes"],
       [AC_CHECK_DECLS([bswap_64],,,[#include <byteswap.h>])])
 
+dnl
+dnl Check to see if llseek() is declared in unistd.h.  On some libc's
+dnl it is, and on others it isn't..... Thank you glibc developers....
+dnl
+AC_CHECK_DECL(llseek,[AC_DEFINE(HAVE_LLSEEK_PROTOTYPE, 1,
+                       [Define to 1 if llseek declared in unistd.h])],,
+                       [#include <unistd.h>])
+dnl
+dnl Check to see if lseek64() is declared in unistd.h.  Glibc's header files
+dnl are so convoluted that I can't tell whether it will always be defined,
+dnl and if it isn't defined while lseek64 is defined in the library,
+dnl disaster will strike.
+dnl
+dnl Warning!  Use of --enable-gcc-wall may throw off this test.
+dnl
+dnl
+AC_CHECK_DECL(lseek64,[AC_DEFINE(HAVE_LSEEK64_PROTOTYPE, 1,
+               [Define to 1 if lseek64 declared in unistd.h])],,
+               [#define _LARGEFILE_SOURCE
+               #define _LARGEFILE64_SOURCE
+               #include <unistd.h>])
+dnl
+dnl Word sizes...
+dnl
+
+# AC_CANONICAL_HOST is needed to access the 'host_os' variable
+AC_CANONICAL_HOST
+
+build_linux=no
+build_windows=no
+build_mac=no
+
+# Detect the target system
+case "${host_os}" in
+linux*)
+       build_linux=yes
+       ;;
+cygwin*|mingw*)
+       build_windows=yes
+       ;;
+darwin*)
+       build_mac=yes
+       ;;
+*)
+       AC_MSG_ERROR(["OS $host_os is not supported"])
+       ;;
+esac
+
+# Pass the conditionals to automake
+AM_CONDITIONAL([LINUX], [test "$build_linux" = "yes"])
+AM_CONDITIONAL([WINDOWS], [test "$build_windows" = "yes"])
+AM_CONDITIONAL([OSX], [test "$build_mac" = "yes"])
+
 # Install directories
 #AC_PREFIX_DEFAULT([/usr])
 #AC_SUBST([sbindir], [/sbin])
index ec69f25..9f0993e 100644 (file)
@@ -360,8 +360,14 @@ static void dump_xattr(struct f2fs_sb_info *sbi, struct f2fs_node *node_blk)
                }
 
                DBG(1, "fd %d xattr_name %s\n", c.dump_fd, xattr_name);
+#if defined(__linux__)
                ret = fsetxattr(c.dump_fd, xattr_name, value,
                                le16_to_cpu(ent->e_value_size), 0);
+#elif defined(__APPLE__)
+               ret = fsetxattr(c.dump_fd, xattr_name, value,
+                               le16_to_cpu(ent->e_value_size), 0,
+                               XATTR_CREATE);
+#endif
                if (ret)
                        MSG(0, "XATTR index 0x%x set xattr failed error %d\n",
                            ent->e_name_index, errno);
index 542594e..34b2481 100644 (file)
@@ -11,6 +11,7 @@
 #ifndef _F2FS_H_
 #define _F2FS_H_
 
+#include <f2fs_fs.h>
 #include <stdlib.h>
 #include <unistd.h>
 #include <stdio.h>
 #include <fcntl.h>
 #include <string.h>
 #include <errno.h>
+#ifdef HAVE_MNTENT_H
 #include <mntent.h>
+#endif
 #include <sys/stat.h>
 #include <sys/ioctl.h>
 #include <sys/mount.h>
 #include <assert.h>
 
-#include <f2fs_fs.h>
-
 #define EXIT_ERR_CODE          (-1)
 #define ver_after(a, b) (typecheck(unsigned long long, a) &&            \
                typecheck(unsigned long long, b) &&                     \
index ef46e33..ec88712 100644 (file)
@@ -881,14 +881,14 @@ skip_blkcnt_fix:
        }
        if (ftype == F2FS_FT_SYMLINK && i_blocks && i_size == 0) {
                DBG(1, "ino: 0x%x i_blocks: %lu with zero i_size",
-                                                       nid, i_blocks);
+                                               nid, (unsigned long)i_blocks);
                if (c.fix_on) {
                        u64 i_size = i_blocks * F2FS_BLKSIZE;
 
                        node_blk->i.i_size = cpu_to_le64(i_size);
                        need_fix = 1;
                        FIX_MSG("Symlink: recover 0x%x with i_size=%lu",
-                                                       nid, i_size);
+                                               nid, (unsigned long)i_size);
                }
        }
 
index 826a2f9..653dcf3 100644 (file)
 #include <sys/acl.h>
 #endif
 
+#ifndef ACL_UNDEFINED_TAG
+#define ACL_UNDEFINED_TAG      (0x00)
+#define ACL_USER_OBJ           (0x01)
+#define ACL_USER               (0x02)
+#define ACL_GROUP_OBJ          (0x04)
+#define ACL_GROUP              (0x08)
+#define ACL_MASK               (0x10)
+#define ACL_OTHER              (0x20)
+#endif
+
 u32 get_free_segments(struct f2fs_sb_info *sbi)
 {
        u32 i, free_segs = 0;
index 4ca2d7f..aed93a8 100644 (file)
@@ -6,9 +6,13 @@
 #define _LINUX_QUOTA_TREE_H
 
 #include <inttypes.h>
+#ifdef HAVE_LINUX_TYPES_H
 #include <linux/types.h>
+#endif
 #include <sys/types.h>
 
+#include <f2fs_fs.h>
+
 typedef __u32 qid_t;        /* Type in which we store ids in memory */
 
 #define QT_TREEOFF     1       /* Offset of tree in file in blocks */
index 4584d6f..6c3eeab 100644 (file)
@@ -36,7 +36,7 @@ static int get_new_sb(struct f2fs_super_block *sb)
                                zone_align_start_offset) / segment_size_bytes /
                                c.segs_per_sec * c.segs_per_sec);
 
-       blocks_for_sit = ALIGN(get_sb(segment_count), SIT_ENTRY_PER_BLOCK);
+       blocks_for_sit = SIZE_ALIGN(get_sb(segment_count), SIT_ENTRY_PER_BLOCK);
        sit_segments = SEG_ALIGN(blocks_for_sit);
        set_sb(segment_count_sit, sit_segments * 2);
        set_sb(nat_blkaddr, get_sb(sit_blkaddr) +
@@ -45,7 +45,8 @@ static int get_new_sb(struct f2fs_super_block *sb)
        total_valid_blks_available = (get_sb(segment_count) -
                        (get_sb(segment_count_ckpt) +
                        get_sb(segment_count_sit))) * blks_per_seg;
-       blocks_for_nat = ALIGN(total_valid_blks_available, NAT_ENTRY_PER_BLOCK);
+       blocks_for_nat = SIZE_ALIGN(total_valid_blks_available,
+                                       NAT_ENTRY_PER_BLOCK);
        set_sb(segment_count_nat, SEG_ALIGN(blocks_for_nat));
 
        sit_bitmap_size = ((get_sb(segment_count_sit) / 2) <<
index 68799c1..bfc79f2 100644 (file)
@@ -15,7 +15,9 @@
 #include "fsck.h"
 #include <libgen.h>
 #include <dirent.h>
+#ifdef HAVE_MNTENT_H
 #include <mntent.h>
+#endif
 
 #ifdef HAVE_LIBSELINUX
 #include <selinux/selinux.h>
index 1d0f7d3..f2576cd 100644 (file)
@@ -17,9 +17,6 @@
 #include "node.h"
 #include "xattr.h"
 
-#define XATTR_CREATE 0x1
-#define XATTR_REPLACE 0x2
-
 void *read_all_xattrs(struct f2fs_sb_info *sbi, struct f2fs_node *inode)
 {
        struct f2fs_xattr_header *header;
index beed3bb..e4a98e2 100644 (file)
@@ -17,6 +17,9 @@
 #define _XATTR_H_
 
 #include "f2fs.h"
+#ifdef HAVE_SYS_XATTR_H
+#include <sys/xattr.h>
+#endif
 
 struct f2fs_xattr_header {
        __le32 h_magic;         /* magic number for identification */
@@ -76,6 +79,23 @@ static inline int f2fs_acl_count(int size)
        }
 }
 
+#ifndef XATTR_USER_PREFIX
+#define XATTR_USER_PREFIX      "user."
+#endif
+#ifndef XATTR_SECURITY_PREFIX
+#define XATTR_SECURITY_PREFIX  "security."
+#endif
+#ifndef XATTR_TRUSTED_PREFIX
+#define XATTR_TRUSTED_PREFIX   "trusted."
+#endif
+
+#ifndef XATTR_CREATE
+#define XATTR_CREATE 0x1
+#endif
+#ifndef XATTR_REPLACE
+#define XATTR_REPLACE 0x2
+#endif
+
 #define XATTR_ROUND    (3)
 
 #define XATTR_SELINUX_SUFFIX "selinux"
diff --git a/include/android_config.h b/include/android_config.h
new file mode 100644 (file)
index 0000000..bfc4105
--- /dev/null
@@ -0,0 +1,54 @@
+#if defined(__linux__)
+#define HAVE_BYTESWAP_H 1
+#define HAVE_FCNTL_H 1
+#define HAVE_FALLOC_H 1
+#define HAVE_LINUX_HDREG_H 1
+#define HAVE_LINUX_LIMITS_H 1
+#define HAVE_POSIX_ACL_H 1
+#define HAVE_LINUX_TYPES_H 1
+#define HAVE_LINUX_XATTR_H 1
+#define HAVE_MNTENT_H 1
+#define HAVE_STDLIB_H 1
+#define HAVE_STRING_H 1
+#define HAVE_SYS_IOCTL_H 1
+#define HAVE_SYS_SYSCALL_H 1
+#define HAVE_SYS_MOUNT_H 1
+#define HAVE_SYS_SYSMACROS_H 1
+#define HAVE_SYS_XATTR_H 1
+#define HAVE_UNISTD_H 1
+
+#define HAVE_ADD_KEY 1
+#define HAVE_FALLOCATE 1
+#define HAVE_FSETXATTR 1
+#define HAVE_FSTAT 1
+#define HAVE_FSTAT64 1
+#define HAVE_GETMNTENT 1
+#define HAVE_KEYCTL 1
+#define HAVE_LLSEEK 1
+#define HAVE_LSEEK64 1
+#define HAVE_MEMSET 1
+#define HAVE_SETMNTENT 1
+#endif
+
+#if defined(__APPLE__)
+#define HAVE_FCNTL_H 1
+#define HAVE_FALLOC_H 1
+#define HAVE_POSIX_ACL_H 1
+#define HAVE_STDLIB_H 1
+#define HAVE_STRING_H 1
+#define HAVE_SYS_IOCTL_H 1
+#define HAVE_SYS_SYSCALL_H 1
+#define HAVE_SYS_MOUNT_H 1
+#define HAVE_SYS_XATTR_H 1
+#define HAVE_UNISTD_H 1
+
+#define HAVE_ADD_KEY 1
+#define HAVE_FALLOCATE 1
+#define HAVE_FSETXATTR 1
+#define HAVE_FSTAT 1
+#define HAVE_FSTAT64 1
+#define HAVE_GETMNTENT 1
+#define HAVE_KEYCTL 1
+#define HAVE_LLSEEK 1
+#define HAVE_MEMSET 1
+#endif
index 8d67a76..05b893a 100644 (file)
 #ifndef __F2FS_FS_H__
 #define __F2FS_FS_H__
 
-#include <inttypes.h>
-#include <linux/types.h>
-#include <sys/types.h>
-
 #ifdef HAVE_CONFIG_H
 #include <config.h>
 #endif
 
+#ifdef WITH_ANDROID
+#include <android_config.h>
+#endif
+
+#include <inttypes.h>
+#ifdef HAVE_LINUX_TYPES_H
+#include <linux/types.h>
+#endif
+#include <sys/types.h>
+
 #ifdef HAVE_LINUX_BLKZONED_H
 #include <linux/blkzoned.h>
 #endif
@@ -39,10 +45,25 @@ typedef u_int16_t   u16;
 typedef u_int8_t       u8;
 typedef u32            block_t;
 typedef u32            nid_t;
+#ifndef bool
 typedef u8             bool;
+#endif
 typedef unsigned long  pgoff_t;
 typedef unsigned short umode_t;
 
+#ifndef HAVE_LINUX_TYPES_H
+typedef u8     __u8;
+typedef u16    __u16;
+typedef u32    __u32;
+typedef u64    __u64;
+typedef u16    __le16;
+typedef u32    __le32;
+typedef u64    __le64;
+typedef u16    __be16;
+typedef u32    __be32;
+typedef u64    __be64;
+#endif
+
 #if HAVE_BYTESWAP_H
 #include <byteswap.h>
 #else
@@ -226,7 +247,9 @@ static inline uint64_t bswap_64(uint64_t val)
                snprintf(buf, len, #member)
 
 /* these are defined in kernel */
+#ifndef PAGE_SIZE
 #define PAGE_SIZE              4096
+#endif
 #define PAGE_CACHE_SIZE                4096
 #define BITS_PER_BYTE          8
 #define F2FS_SUPER_MAGIC       0xF2F52010      /* F2FS Magic Number */
@@ -784,7 +807,7 @@ struct f2fs_nat_block {
  * disk is 16 TB and it equals to 16 * 1024 * 1024 / 2 segments.
  */
 #define F2FS_MAX_SEGMENT       ((16 * 1024 * 1024) / 2)
-#define MAX_SIT_BITMAP_SIZE    (SEG_ALIGN(ALIGN(F2FS_MAX_SEGMENT, \
+#define MAX_SIT_BITMAP_SIZE    (SEG_ALIGN(SIZE_ALIGN(F2FS_MAX_SEGMENT, \
                                                SIT_ENTRY_PER_BLOCK)) * \
                                                c.blks_per_seg / 8)
 
@@ -1146,9 +1169,9 @@ extern int f2fs_reset_zones(int);
 
 extern struct f2fs_configuration c;
 
-#define ALIGN(val, size)       ((val) + (size) - 1) / (size)
-#define SEG_ALIGN(blks)                ALIGN(blks, c.blks_per_seg)
-#define ZONE_ALIGN(blks)       ALIGN(blks, c.blks_per_seg * \
+#define SIZE_ALIGN(val, size)  ((val) + (size) - 1) / (size)
+#define SEG_ALIGN(blks)                SIZE_ALIGN(blks, c.blks_per_seg)
+#define ZONE_ALIGN(blks)       SIZE_ALIGN(blks, c.blks_per_seg * \
                                        c.segs_per_zone)
 
 static inline double get_best_overprovision(struct f2fs_super_block *sb)
index 0f1fead..1e63843 100644 (file)
@@ -8,25 +8,34 @@
  */
 #define _LARGEFILE64_SOURCE
 
+#include <f2fs_fs.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <errno.h>
 #include <unistd.h>
 #include <fcntl.h>
+#ifdef HAVE_MNTENT_H
 #include <mntent.h>
+#endif
 #include <time.h>
 #include <sys/stat.h>
 #include <sys/mount.h>
 #include <sys/ioctl.h>
+#ifdef HAVE_SYS_SYSMACROS_H
 #include <sys/sysmacros.h>
+#endif
 #ifndef WITH_ANDROID
+#ifdef HAVE_SCSI_SG_H
 #include <scsi/sg.h>
 #endif
+#endif
+#ifdef HAVE_LINUX_HDREG_H
 #include <linux/hdreg.h>
+#endif
+#ifdef HAVE_LINUX_LIMITS_H
 #include <linux/limits.h>
-
-#include <f2fs_fs.h>
+#endif
 
 #ifndef WITH_ANDROID
 /* SCSI command for standard inquiry*/
@@ -607,6 +616,7 @@ void f2fs_init_configuration(void)
        c.dry_run = 0;
 }
 
+#ifdef HAVE_SETMNTENT
 static int is_mounted(const char *mpt, const char *device)
 {
        FILE *file = NULL;
@@ -628,6 +638,7 @@ static int is_mounted(const char *mpt, const char *device)
        endmntent(file);
        return mnt ? 1 : 0;
 }
+#endif
 
 int f2fs_dev_is_umounted(char *path)
 {
@@ -642,29 +653,36 @@ int f2fs_dev_is_umounted(char *path)
         * try with /proc/mounts fist to detect RDONLY.
         * f2fs_stop_checkpoint makes RO in /proc/mounts while RW in /etc/mtab.
         */
+#ifdef __linux__
        ret = is_mounted("/proc/mounts", path);
        if (ret) {
                MSG(0, "Info: Mounted device!\n");
                return -1;
        }
-
+#endif
+#if defined(MOUNTED) || defined(_PATH_MOUNTED)
+#ifndef MOUNTED
+#define MOUNTED _PATH_MOUNTED
+#endif
        ret = is_mounted(MOUNTED, path);
        if (ret) {
                MSG(0, "Info: Mounted device!\n");
                return -1;
        }
-
+#endif
        /*
         * If we are supposed to operate on the root device, then
         * also check the mounts for '/dev/root', which sometimes
         * functions as an alias for the root device.
         */
        if (is_rootdev) {
+#ifdef __linux__
                ret = is_mounted("/proc/mounts", "/dev/root");
                if (ret) {
                        MSG(0, "Info: Mounted device!\n");
                        return -1;
                }
+#endif
        }
 
        /*
@@ -681,7 +699,7 @@ int f2fs_dev_is_umounted(char *path)
                        return -1;
                }
        }
-       return 0;
+       return ret;
 }
 
 int f2fs_devs_are_umounted(void)
@@ -704,6 +722,25 @@ void get_kernel_version(__u8 *version)
        memset(version + i, 0, VERSION_LEN + 1 - i);
 }
 
+
+#if defined(__linux__) && defined(_IO) && !defined(BLKGETSIZE)
+#define BLKGETSIZE     _IO(0x12,96)
+#endif
+
+#if defined(__linux__) && defined(_IOR) && !defined(BLKGETSIZE64)
+#define BLKGETSIZE64   _IOR(0x12,114, size_t)
+#endif
+
+#if defined(__linux__) && defined(_IO) && !defined(BLKSSZGET)
+#define BLKSSZGET      _IO(0x12,104)
+#endif
+
+#if defined(__APPLE__)
+#include <sys/disk.h>
+#define BLKGETSIZE     DKIOCGETBLOCKCOUNT
+#define BLKSSZGET      DKIOCGETBLOCKCOUNT
+#endif /* APPLE_DARWIN */
+
 int get_device_info(int i)
 {
        int32_t fd = 0;
@@ -712,8 +749,10 @@ int get_device_info(int i)
        uint32_t total_sectors;
 #endif
        struct stat stat_buf;
+#ifdef HDIO_GETGIO
        struct hd_geometry geom;
-#ifndef WITH_ANDROID
+#endif
+#if !defined(WITH_ANDROID) && defined(__linux__)
        sg_io_hdr_t io_hdr;
        unsigned char reply_buffer[96] = {0};
        unsigned char model_inq[6] = {MODELINQUIRY};
@@ -750,10 +789,12 @@ int get_device_info(int i)
        } else if (S_ISREG(stat_buf.st_mode)) {
                dev->total_sectors = stat_buf.st_size / dev->sector_size;
        } else if (S_ISBLK(stat_buf.st_mode)) {
+#ifdef BLKSSZGET
                if (ioctl(fd, BLKSSZGET, &sector_size) < 0)
                        MSG(0, "\tError: Using the default sector size\n");
                else if (dev->sector_size < sector_size)
                        dev->sector_size = sector_size;
+#endif
 #ifdef BLKGETSIZE64
                if (ioctl(fd, BLKGETSIZE64, &dev->total_sectors) < 0) {
                        MSG(0, "\tError: Cannot get the device size\n");
@@ -769,13 +810,17 @@ int get_device_info(int i)
                dev->total_sectors /= dev->sector_size;
 
                if (i == 0) {
+#ifdef HDIO_GETGIO
                        if (ioctl(fd, HDIO_GETGEO, &geom) < 0)
                                c.start_sector = 0;
                        else
                                c.start_sector = geom.start;
+#else
+                       c.start_sector = 0;
+#endif
                }
 
-#ifndef WITH_ANDROID
+#if !defined(WITH_ANDROID) && defined(__linux__)
                /* Send INQUIRY command */
                memset(&io_hdr, 0, sizeof(sg_io_hdr_t));
                io_hdr.interface_id = 'S';
@@ -809,7 +854,7 @@ int get_device_info(int i)
                return -1;
        }
 
-#ifndef WITH_ANDROID
+#if !defined(WITH_ANDROID) && defined(__linux__)
        if (S_ISBLK(stat_buf.st_mode))
                f2fs_get_zoned_model(i);
 
index 8a79672..268dcfa 100644 (file)
 #include <errno.h>
 #include <unistd.h>
 #include <fcntl.h>
+#ifdef HAVE_MNTENT_H
 #include <mntent.h>
+#endif
 #include <time.h>
 #include <sys/stat.h>
 #include <sys/mount.h>
 #include <sys/ioctl.h>
+#ifdef HAVE_LINUX_HDREG_H
 #include <linux/hdreg.h>
+#endif
 
 #include <f2fs_fs.h>
 
@@ -54,6 +58,15 @@ static int __get_device_fd(__u64 *offset)
        return -1;
 }
 
+#ifndef HAVE_LSEEK64
+typedef off_t  off64_t;
+
+static inline off64_t lseek64(int fd, __u64 offset, int set)
+{
+       return lseek(fd, offset, set);
+}
+#endif
+
 /*
  * IO interfaces
  */
@@ -86,7 +99,11 @@ int dev_read(void *buf, __u64 offset, size_t len)
        return 0;
 }
 
+#ifdef POSIX_FADV_WILLNEED
 int dev_readahead(__u64 offset, size_t len)
+#else
+int dev_readahead(__u64 offset, size_t UNUSED(len))
+#endif
 {
        int fd = __get_device_fd(&offset);
 
index 2ba8dd3..d5f39ca 100644 (file)
@@ -254,7 +254,7 @@ static int f2fs_prepare_super_block(void)
        set_sb(sit_blkaddr, get_sb(segment0_blkaddr) +
                        get_sb(segment_count_ckpt) * c.blks_per_seg);
 
-       blocks_for_sit = ALIGN(get_sb(segment_count), SIT_ENTRY_PER_BLOCK);
+       blocks_for_sit = SIZE_ALIGN(get_sb(segment_count), SIT_ENTRY_PER_BLOCK);
 
        sit_segments = SEG_ALIGN(blocks_for_sit);
 
@@ -267,7 +267,7 @@ static int f2fs_prepare_super_block(void)
                        (get_sb(segment_count_ckpt) +
                        get_sb(segment_count_sit))) * c.blks_per_seg;
 
-       blocks_for_nat = ALIGN(total_valid_blks_available,
+       blocks_for_nat = SIZE_ALIGN(total_valid_blks_available,
                        NAT_ENTRY_PER_BLOCK);
 
        set_sb(segment_count_nat, SEG_ALIGN(blocks_for_nat));
index 558684d..a474764 100644 (file)
@@ -6,20 +6,24 @@
  *
  * Dual licensed under the GPL or LGPL version 2 licenses.
  */
+#ifndef _LARGEFILE_SOURCE
 #define _LARGEFILE_SOURCE
+#endif
+#ifndef _LARGEFILE64_SOURCE
 #define _LARGEFILE64_SOURCE
+#endif
 #ifndef _GNU_SOURCE
 #define _GNU_SOURCE
 #endif
 
+#include <f2fs_fs.h>
+
 #include <stdio.h>
 #include <unistd.h>
 #include <sys/ioctl.h>
 #include <sys/stat.h>
 #include <fcntl.h>
 
-#include "f2fs_fs.h"
-
 #ifdef HAVE_LINUX_FS_H
 #include <linux/fs.h>
 #endif
@@ -68,7 +72,7 @@ static int trim_device(int i)
                        MSG(0, "Info: This device doesn't support BLKSECDISCARD\n");
                } else {
                        MSG(0, "Info: Secure Discarded %lu MB\n",
-                                               stat_buf.st_size >> 20);
+                                       (unsigned long)stat_buf.st_size >> 20);
                        return 0;
                }
 #endif
index 5a9303f..81cf89b 100644 (file)
@@ -2,10 +2,14 @@
 
 AM_CPPFLAGS = ${libuuid_CFLAGS} -I$(top_srcdir)/include
 AM_CFLAGS = -Wall
-sbin_PROGRAMS = f2fstat fibmap.f2fs parse.f2fs f2fscrypt
+sbin_PROGRAMS = f2fstat fibmap.f2fs parse.f2fs
 f2fstat_SOURCES = f2fstat.c
 fibmap_f2fs_SOURCES = fibmap.c
 parse_f2fs_SOURCES = f2fs_io_parse.c
+
+if LINUX
+sbin_PROGRAMS += f2fscrypt
 f2fscrypt_SOURCES = f2fscrypt.c sha512.c
 f2fscrypt_LDFLAGS = -luuid
 dist_man_MANS = f2fscrypt.8
+endif
index 48ea5f6..81ef830 100644 (file)
@@ -30,7 +30,9 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#ifdef HAVE_MNTENT_H
 #include <mntent.h>
+#endif
 #include <sys/ioctl.h>
 #include <sys/stat.h>
 #include <sys/types.h>
@@ -38,7 +40,9 @@
 #include <termios.h>
 #include <unistd.h>
 #include <signal.h>
+#ifdef __KERNEL__
 #include <linux/fs.h>
+#endif
 #include <uuid/uuid.h>
 
 #if !defined(HAVE_ADD_KEY) || !defined(HAVE_KEYCTL)
@@ -47,6 +51,7 @@
 #ifdef HAVE_SYS_KEY_H
 #include <sys/key.h>
 #endif
+#include <f2fs_fs.h>
 
 #define F2FS_MAX_KEY_SIZE              64
 #define F2FS_MAX_PASSPHRASE_SIZE       1024
@@ -121,7 +126,7 @@ int options;
 extern void f2fs_sha512(const unsigned char *in, unsigned long in_size,
                                                unsigned char *out);
 
-#ifndef HAVE_KEYCTL
+#if !defined(HAVE_KEYCTL)
 static long keyctl(int cmd, ...)
 {
        va_list va;
@@ -137,7 +142,7 @@ static long keyctl(int cmd, ...)
 }
 #endif
 
-#ifndef HAVE_ADD_KEY
+#if !defined(HAVE_ADD_KEY)
 static key_serial_t add_key(const char *type, const char *description,
                            const void *payload, size_t plen,
                            key_serial_t keyring)
index 6b092f5..d17144a 100644 (file)
@@ -1,4 +1,20 @@
+#if !defined(__FreeBSD__) && !defined(__NetBSD__) && !defined(__OpenBSD__)
+#define _XOPEN_SOURCE 600
+#define _DARWIN_C_SOURCE
+#define _FILE_OFFSET_BITS 64
+#ifndef _LARGEFILE_SOURCE
+#define _LARGEFILE_SOURCE
+#endif
+#ifndef _LARGEFILE64_SOURCE
 #define _LARGEFILE64_SOURCE
+#endif
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
+#endif
+#endif
+#ifndef O_LARGEFILE
+#define O_LARGEFILE 0
+#endif
 #include <unistd.h>
 #include <string.h>
 #include <stdlib.h>
 #include <sys/types.h>
 #include <sys/ioctl.h>
 #include <sys/stat.h>
+#ifdef HAVE_SYS_SYSMACROS_H
 #include <sys/sysmacros.h>
+#endif
 #include <libgen.h>
+#ifdef HAVE_LINUX_HDREG_H
 #include <linux/hdreg.h>
+#endif
+#ifdef HAVE_LINUX_TYPES_H
 #include <linux/types.h>
+#endif
+#ifdef __KERNEL__
 #include <linux/fs.h>
+#endif
 #include <inttypes.h>
+#include <f2fs_fs.h>
+
+#ifndef FIBMAP
+#define FIBMAP          _IO(0x00, 1)    /* bmap access */
+#endif
 
 struct file_ext {
        __u32 f_pos;
@@ -31,28 +60,42 @@ void print_ext(struct file_ext *ext)
                                        ext->end_blk, ext->blk_count);
 }
 
+#if defined(HAVE_FSTAT64) && !defined(__OSX_AVAILABLE_BUT_DEPRECATED)
 void print_stat(struct stat64 *st)
+#else
+void print_stat(struct stat *st)
+#endif
 {
        printf("--------------------------------------------\n");
        printf("dev       [%d:%d]\n", major(st->st_dev), minor(st->st_dev));
        printf("ino       [0x%8"PRIx64" : %"PRIu64"]\n",
                                                st->st_ino, st->st_ino);
        printf("mode      [0x%8x : %d]\n", st->st_mode, st->st_mode);
-       printf("nlink     [0x%8lx : %ld]\n", st->st_nlink, st->st_nlink);
+       printf("nlink     [0x%8lx : %ld]\n",
+                                       (unsigned long)st->st_nlink,
+                                       (long)st->st_nlink);
        printf("uid       [0x%8x : %d]\n", st->st_uid, st->st_uid);
        printf("gid       [0x%8x : %d]\n", st->st_gid, st->st_gid);
        printf("size      [0x%8"PRIx64" : %"PRIu64"]\n",
-                                               st->st_size, st->st_size);
-       printf("blksize   [0x%8lx : %ld]\n", st->st_blksize, st->st_blksize);
+                                       (u64)st->st_size, (u64)st->st_size);
+       printf("blksize   [0x%8lx : %ld]\n",
+                                       (unsigned long)st->st_blksize,
+                                       (long)st->st_blksize);
        printf("blocks    [0x%8"PRIx64" : %"PRIu64"]\n",
-                                       st->st_blocks, st->st_blocks);
+                                       (u64)st->st_blocks, (u64)st->st_blocks);
        printf("--------------------------------------------\n\n");
 }
 
-void stat_bdev(struct stat64 *st, unsigned int *start_lba)
+#if defined(HAVE_FSTAT64) && !defined(__OSX_AVAILABLE_BUT_DEPRECATED)
+static void stat_bdev(struct stat64 *st, unsigned int *start_lba)
+#else
+static void stat_bdev(struct stat *st, unsigned int *start_lba)
+#endif
 {
        struct stat bdev_stat;
+#ifdef HDIO_GETGIO
        struct hd_geometry geom;
+#endif
        char devname[32] = { 0, };
        char linkname[32] = { 0, };
        int fd;
@@ -67,10 +110,14 @@ void stat_bdev(struct stat64 *st, unsigned int *start_lba)
                goto out;
 
        if (S_ISBLK(bdev_stat.st_mode)) {
+#ifdef HDIO_GETGIO
                if (ioctl(fd, HDIO_GETGEO, &geom) < 0)
                        *start_lba = 0;
                else
                        *start_lba = geom.start;
+#else
+               *start_lba = 0;
+#endif
        }
 
        if (readlink(devname, linkname, sizeof(linkname)) < 0)
@@ -90,7 +137,11 @@ int main(int argc, char *argv[])
        int fd;
        int ret = 0;
        char *filename;
+#if defined(HAVE_FSTAT64) && !defined(__OSX_AVAILABLE_BUT_DEPRECATED)
        struct stat64 st;
+#else
+       struct stat st;
+#endif
        int total_blks;
        unsigned int i;
        struct file_ext ext;
@@ -112,7 +163,11 @@ int main(int argc, char *argv[])
 
        fsync(fd);
 
+#if defined(HAVE_FSTAT64) && !defined(__OSX_AVAILABLE_BUT_DEPRECATED)
        if (fstat64(fd, &st) < 0) {
+#else
+       if (fstat(fd, &st) < 0) {
+#endif
                ret = errno;
                perror(filename);
                goto out;