#include <string.h>
#include <unistd.h>
#include <sys/types.h>
-#include <uuid/uuid.h>
#if defined(__linux__)
+#include <uuid/uuid.h>
#include <sys/vfs.h>
#include <sys/ioctl.h>
#include <sys/param.h>
#elif defined(__FreeBSD__)
#include <sys/stat.h>
-#include <libgen.h>
-#include <machine/endian.h>
#include <sys/param.h>
-#include <paths.h>
+#include <sys/ioccom.h>
+#include <sys/mount.h>
#include <ctype.h>
+#include <libgen.h>
+#include <paths.h>
+#include <uuid.h>
+
+#include <machine/endian.h>
/* FreeBSD file API is 64-bit aware */
#define fstat64 fstat
#define stat64 stat
#define pwrite64 pwrite
#define pread64 pread
+#define fdatasync fsync
#define memalign(a,size) valloc(size)
typedef u_int8_t __u8;
#define EFSCORRUPTED 990 /* Filesystem is corrupted */
typedef off_t xfs_off_t;
+typedef off_t off64_t;
typedef __uint64_t xfs_ino_t;
typedef __uint32_t xfs_dev_t;
typedef __int64_t xfs_daddr_t;
typedef char* xfs_caddr_t;
+typedef off_t loff_t;
#ifndef _UCHAR_T_DEFINED
typedef unsigned char uchar_t;
#endif
typedef enum { B_FALSE,B_TRUE } boolean_t;
+#define O_LARGEFILE 0
+
#define HAVE_FID 1
#define HAVE_SWABMACROS 1
#define INT_SWAP16(type,var) ((typeof(type))(__bswap16((__u16)(var))))
#define INT_SWAP32(type,var) ((typeof(type))(__bswap32((__u32)(var))))
#define INT_SWAP64(type,var) ((typeof(type))(__bswap64((__u64)(var))))
+static __inline__ int xfsctl(const char *path, int fd, int cmd, void *p)
+{
+ return ioctl(fd, cmd, p);
+}
-#elif defined(__APPLE__) /* Darwin */
+static __inline__ int platform_test_xfs_fd(int fd)
+{
+ struct statfs buf;
+ if (fstatfs(fd, &buf) < 0)
+ return 0;
+ return strcpy(buf.f_fstypename, "xfs") == 0;
+}
+
+static __inline__ int platform_test_xfs_path(const char *path)
+{
+ struct statfs buf;
+ if (statfs(path, &buf) < 0)
+ return 0;
+ return strcpy(buf.f_fstypename, "xfs") == 0;
+}
+
+static __inline__ int platform_fstatfs(int fd, struct statfs *buf)
+{
+ return fstatfs(fd, buf);
+}
+/*
+ * Implement Linux libuuid functions in terms of DEC DCE's uuid
+ * functions from FreeBSD libc.
+ */
+
+static __inline__ int gnu_uuid_compare(uuid_t a, uuid_t b)
+{
+ return uuid_compare(&a, &b, NULL);
+}
+#define uuid_compare gnu_uuid_compare
+
+static __inline__ int uuid_is_null(uuid_t uid)
+{
+ return uuid_is_nil(&uid, NULL);
+}
+
+static __inline__ void uuid_unparse(uuid_t uid, char *buf)
+{
+ uint32_t status;
+ char *str;
+ uuid_to_string(&uid, &str, &status);
+ if (status == uuid_s_ok)
+ strcpy(buf, str);
+ else *buf = '\0';
+ free(str);
+}
+
+static __inline__ int gnu_uuid_parse(const char *buf, uuid_t *uid)
+{
+ uint32_t status;
+ uuid_from_string(buf, uid, &status);
+ return (status == uuid_s_ok);
+}
+#define uuid_parse(s,u) gnu_uuid_parse((s), &(u))
+
+#define uuid_generate(uid) uuid_create(&(uid), NULL)
+#define uuid_clear(uid) uuid_create_nil(&(uid), NULL)
+#define uuid_copy(dst, src) memcpy(&(dst), &(src), sizeof(uuid_t))
+
+#elif defined(__APPLE__) /* Darwin */
+#include <uuid/uuid.h>
#include <libgen.h>
#include <sys/vm.h>
#include <sys/stat.h>
#define HAVE_FID 1
-
#elif defined(__sgi__) /* SGI IRIX */
#include <libgen.h>
#include <sys/statfs.h>
#include <sys/statvfs.h>
#include <sys/sysmacros.h>
+#include <uuid/uuid.h>
#define __s8 char
#define __s16 short
AC_DEFUN([AC_PACKAGE_NEED_UUID_UUID_H],
- [ AC_CHECK_HEADERS([uuid/uuid.h])
- if test "$ac_cv_header_uuid_uuid_h" != yes; then
+ [ AC_CHECK_HEADERS(uuid/uuid.h,, [
+ AC_CHECK_HEADER(uuid.h,, [
echo
echo 'FATAL ERROR: could not find a valid UUID header.'
echo 'Install the Universally Unique Identifiers development package.'
- exit 1
+ exit 1])
fi
])
AC_DEFUN([AC_PACKAGE_NEED_UUIDPARSE_LIBUUID],
[ AC_CHECK_LIB(uuid, uuid_parse,, [
+ AC_CHECK_FUNCS(uuid_create,, [
echo
echo 'FATAL ERROR: could not find a valid UUID library.'
echo 'Install the Universally Unique Identifiers library package.'
- exit 1
+ exit 1])
])
libuuid="/usr/lib/libuuid.a"
AC_SUBST(libuuid)