summaryrefslogtreecommitdiff
path: root/_obnammodule.c
diff options
context:
space:
mode:
authorJimmy Tang <jcftang@gmail.com>2014-08-27 17:37:17 +0100
committerLars Wirzenius <liw@liw.fi>2014-10-02 18:14:51 +0100
commitff39fed4602daaaf87680b8b45a0d6967a3d6e33 (patch)
tree151edeb3e937162a0fd98972c374bad59c1df59f /_obnammodule.c
parent7c30ab88801b0abb4d4955f2d838270ef3121bc0 (diff)
downloadobnam-ff39fed4602daaaf87680b8b45a0d6967a3d6e33.tar.gz
Initial attempt at getting obnam to work on OSX
Diffstat (limited to '_obnammodule.c')
-rw-r--r--_obnammodule.c21
1 files changed, 18 insertions, 3 deletions
diff --git a/_obnammodule.c b/_obnammodule.c
index 3e8fb7ed..d7cfbe1e 100644
--- a/_obnammodule.c
+++ b/_obnammodule.c
@@ -48,9 +48,15 @@
#include <unistd.h>
#include <stdlib.h>
-#ifdef __FreeBSD__
+#if defined(__FreeBSD__)
#include <sys/extattr.h>
#define NO_NANOSECONDS 1
+#elif defined(__APPLE__)
+ #include <sys/xattr.h>
+ #define NO_NANOSECONDS 1
+ #define llistxattr(path, list, size) (listxattr(path, list, size, XATTR_NOFOLLOW))
+ #define lgetxattr(path, name, value, size) (getxattr(path, name, value, size, 0, XATTR_NOFOLLOW))
+ #define lsetxattr(path, name, value, size, flags) (setxattr(path, name, value, size, 0, flags | XATTR_NOFOLLOW))
#else
#include <sys/xattr.h>
#define NO_NANOSECONDS 0
@@ -159,12 +165,21 @@ lstat_wrapper(PyObject *self, PyObject *args)
(long long) st.st_size,
(long long) st.st_blksize,
(long long) st.st_blocks,
+#ifdef __APPLE__
+ (long long) st.st_atimespec.tv_sec,
+ remove_precision(st.st_atimespec.tv_nsec),
+ (long long) st.st_mtimespec.tv_sec,
+ remove_precision(st.st_mtimespec.tv_nsec),
+ (long long) st.st_ctimespec.tv_sec,
+ remove_precision(st.st_ctimespec.tv_nsec));
+#else
(long long) st.st_atim.tv_sec,
remove_precision(st.st_atim.tv_nsec),
(long long) st.st_mtim.tv_sec,
remove_precision(st.st_mtim.tv_nsec),
(long long) st.st_ctim.tv_sec,
remove_precision(st.st_ctim.tv_nsec));
+#endif
}
@@ -247,7 +262,7 @@ lgetxattr_wrapper(PyObject *self, PyObject *args)
return Py_None;
}
#ifdef __FreeBSD__
- int n = extattr_get_link(filename, EXTATTR_NAMESPACE_USER,
+ int n = extattr_get_link(filename, EXTATTR_NAMESPACE_USER,
attrname, buf, bufsize);
#else
ssize_t n = lgetxattr(filename, attrname, buf, bufsize);
@@ -276,7 +291,7 @@ lsetxattr_wrapper(PyObject *self, PyObject *args)
return NULL;
#ifdef __FreeBSD__
- ret = extattr_set_link(filename, EXTATTR_NAMESPACE_USER,
+ ret = extattr_set_link(filename, EXTATTR_NAMESPACE_USER,
name, value, size);
#else
ret = lsetxattr(filename, name, value, size, 0);