summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Changes2
-rw-r--r--eio.c13
-rw-r--r--libeio.m414
3 files changed, 25 insertions, 4 deletions
diff --git a/Changes b/Changes
index bec431b..b85c71a 100644
--- a/Changes
+++ b/Changes
@@ -28,4 +28,6 @@ TODO: openbsd requites stdint.h for intptr_t - why posix?
- no longer set errno to 0 before making syscalls, this only lures
people into the trap of believing errno shows success or failure.
- "fix" demo.c so that it works as non-root.
+ - suppoert utimes seperately from futimes, as some systems have
+ utimes but not futimes.
diff --git a/eio.c b/eio.c
index f810de2..4963fc1 100644
--- a/eio.c
+++ b/eio.c
@@ -818,12 +818,10 @@ eio__pwrite (int fd, void *buf, size_t count, off_t offset)
}
#endif
-#ifndef HAVE_FUTIMES
+#ifndef HAVE_UTIMES
# undef utimes
-# undef futimes
-# define utimes(path,times) eio__utimes (path, times)
-# define futimes(fd,times) eio__futimes (fd, times)
+# define utimes(path,times) eio__utimes (path, times)
static int
eio__utimes (const char *filename, const struct timeval times[2])
@@ -841,6 +839,13 @@ eio__utimes (const char *filename, const struct timeval times[2])
return utime (filename, 0);
}
+#endif
+
+#ifndef HAVE_FUTIMES
+
+# undef futimes
+# define futimes(fd,times) eio__futimes (fd, times)
+
static int eio__futimes (int fd, const struct timeval tv[2])
{
errno = ENOSYS;
diff --git a/libeio.m4 b/libeio.m4
index fdd936b..13f9dfc 100644
--- a/libeio.m4
+++ b/libeio.m4
@@ -5,6 +5,20 @@ AC_SEARCH_LIBS(
[AC_MSG_ERROR(pthread functions not found)]
)
+AC_CACHE_CHECK(for utimes, ac_cv_utimes, [AC_LINK_IFELSE([[
+#include <sys/types.h>
+#include <sys/time.h>
+#include <utime.h>
+struct timeval tv[2];
+int res;
+int main (void)
+{
+ res = utimes ("/", tv);
+ return 0;
+}
+]],ac_cv_utimes=yes,ac_cv_utimes=no)])
+test $ac_cv_utimes = yes && AC_DEFINE(HAVE_UTIMES, 1, utimes(2) is available)
+
AC_CACHE_CHECK(for futimes, ac_cv_futimes, [AC_LINK_IFELSE([[
#include <sys/types.h>
#include <sys/time.h>