libbreplace: compatibility fix for AIX
authorGuillaume Xavier Taillon <gtaillon@ca.ibm.com>
Mon, 22 Feb 2016 19:46:24 +0000 (14:46 -0500)
committerBjoern Jacke <bj@sernet.de>
Tue, 13 Jun 2017 07:11:56 +0000 (09:11 +0200)
Adds macros for preprocessor compares and replaces an incomptatible
  compare with one of the new macros.
This fixes a comptability bug on AIX.

BUG: https://bugzilla.samba.org/show_bug.cgi?id=11621
Signed-off-by: Guillaume Xavier Taillon <gtaillon@ca.ibm.com>
Reviewed-by: Björn Jacke <bjacke@samba.org>
Reviewed-by: Stefan Metzmacher <metze@samba.org>
Autobuild-User(master): Björn Jacke <bj@sernet.de>
Autobuild-Date(master): Tue Jun 13 09:11:56 CEST 2017 on sn-devel-144

lib/replace/system/time.h
lib/util/time.c

index b6d260928907644fe19f279873fa2a168dc4f1b2..00f0d7f99e65c14299680b6db771cd967aa5d3fb 100644 (file)
@@ -79,13 +79,21 @@ int rep_utimes(const char *filename, const struct timeval tv[2]);
 typedef int clockid_t;
 int rep_clock_gettime(clockid_t clk_id, struct timespec *tp);
 #endif
-/* make sure we have a best effort CUSTOM_CLOCK_MONOTONIC we can rely on */
+/* make sure we have a best effort CUSTOM_CLOCK_MONOTONIC we can rely on.
+ *
+ * on AIX the values of CLOCK_* are cast expressions, not integer constants,
+ * this prevents them from being compared against in a preprocessor directive.
+ * The following ...IS_* macros can be used to check which clock is in use.
+ */
 #if defined(CLOCK_MONOTONIC)
 #define CUSTOM_CLOCK_MONOTONIC CLOCK_MONOTONIC
+#define CUSTOM_CLOCK_MONOTONIC_IS_MONOTONIC
 #elif defined(CLOCK_HIGHRES)
 #define CUSTOM_CLOCK_MONOTONIC CLOCK_HIGHRES
+#define CUSTOM_CLOCK_MONOTONIC_IS_HIGHRES
 #else
 #define CUSTOM_CLOCK_MONOTONIC CLOCK_REALTIME
+#define CUSTOM_CLOCK_MONOTONIC_IS_REALTIME
 #endif
 
 #endif
index 8c01627e2a19ebede23bad8bf0dbdcf6500ddc40..8a4d93d4ac130134d3a0096459137c5c4ac02539 100644 (file)
@@ -60,7 +60,7 @@ _PUBLIC_ void clock_gettime_mono(struct timespec *tp)
        }
 #endif
 /* then try the  monotonic clock: */
-#if CUSTOM_CLOCK_MONOTONIC != CLOCK_REALTIME
+#ifndef CUSTOM_CLOCK_MONOTONIC_IS_REALTIME
        if (clock_gettime(CUSTOM_CLOCK_MONOTONIC,tp) == 0) {
                return;
        }