From 7190bb3d3ecf64115d3a17bee4e5885340606c53 Mon Sep 17 00:00:00 2001 From: Erik Boasson Date: Sun, 7 Jul 2019 11:33:11 +0200 Subject: [PATCH] Pacification of native compiler on OpenIndiana * constness in ternary expressions * removal of OS_MAX_INTEGER * inclusion of dds/ddsrt/attributes.h everywhere DDS_EXPORT inline occurs * _POSIX_PTHREAD_SEMANTICS in ddsperf Signed-off-by: Erik Boasson --- src/core/ddsi/include/dds/ddsi/q_rhc.h | 4 ++++ src/core/ddsi/src/q_ddsi_discovery.c | 5 ++++- src/ddsrt/include/dds/ddsrt/misc.h | 17 ----------------- .../sockets/include/dds/ddsrt/sockets_priv.h | 18 +++++++++--------- src/ddsrt/tests/select.c | 7 ++++++- src/ddsrt/tests/strtoll.c | 6 +++--- 6 files changed, 26 insertions(+), 31 deletions(-) diff --git a/src/core/ddsi/include/dds/ddsi/q_rhc.h b/src/core/ddsi/include/dds/ddsi/q_rhc.h index 7d33aea..5b9c5ce 100644 --- a/src/core/ddsi/include/dds/ddsi/q_rhc.h +++ b/src/core/ddsi/include/dds/ddsi/q_rhc.h @@ -17,6 +17,10 @@ #include #include "dds/export.h" + +/* DDS_EXPORT inline i.c.w. __attributes__((visibility...)) and some compilers: */ +#include "dds/ddsrt/attributes.h" + #include "dds/ddsi/q_rtps.h" #if defined (__cplusplus) diff --git a/src/core/ddsi/src/q_ddsi_discovery.c b/src/core/ddsi/src/q_ddsi_discovery.c index e6fc050..d68b7df 100644 --- a/src/core/ddsi/src/q_ddsi_discovery.c +++ b/src/core/ddsi/src/q_ddsi_discovery.c @@ -1714,7 +1714,10 @@ int builtins_dqueue_handler (const struct nn_rsample_info *sampleinfo, const str goto done_upd_deliv; } - timestamp = (sampleinfo->timestamp.v != NN_WCTIME_INVALID.v) ? sampleinfo->timestamp : now (); + if (sampleinfo->timestamp.v != NN_WCTIME_INVALID.v) + timestamp = sampleinfo->timestamp; + else + timestamp = now (); switch (srcguid.entityid.u) { case NN_ENTITYID_SPDP_BUILTIN_PARTICIPANT_WRITER: diff --git a/src/ddsrt/include/dds/ddsrt/misc.h b/src/ddsrt/include/dds/ddsrt/misc.h index 1d165b1..edfbb24 100644 --- a/src/ddsrt/include/dds/ddsrt/misc.h +++ b/src/ddsrt/include/dds/ddsrt/misc.h @@ -52,23 +52,6 @@ extern "C" { # define DDSRT_WARNING_MSVC_ON(x) #endif -/** - * @brief Calculate maximum value of an integer type - * - * A somewhat complex, but efficient way to calculate the maximum value of an - * integer type at compile time. - * - * For unsigned numerical types the first part up to XOR is enough. The second - * part is to make up for signed numerical types. - */ -#define DDSRT_MAX_INTEGER(T) \ - ((T)(((T)~0) ^ ((T)!((T)~0 > 0) << (CHAR_BIT * sizeof(T) - 1)))) -/** - * @brief Calculate minimum value of an integer type - */ -#define DDSRT_MIN_INTEGER(T) \ - ((-DDSRT_MAX_INTEGER(T)) - 1) - /** * @brief Macro to disable unused argument warnings */ diff --git a/src/ddsrt/src/sockets/include/dds/ddsrt/sockets_priv.h b/src/ddsrt/src/sockets/include/dds/ddsrt/sockets_priv.h index f76e150..d29f817 100644 --- a/src/ddsrt/src/sockets/include/dds/ddsrt/sockets_priv.h +++ b/src/ddsrt/src/sockets/include/dds/ddsrt/sockets_priv.h @@ -17,6 +17,7 @@ #include "dds/ddsrt/misc.h" #include "dds/ddsrt/sockets.h" #include "dds/ddsrt/time.h" +#include "dds/ddsrt/static_assert.h" #if defined(__cplusplus) extern "C" { @@ -29,9 +30,6 @@ typedef long ddsrt_tv_usec_t; typedef time_t ddsrt_tv_sec_t; #endif -#define DDSRT_TIME_T_MAX \ - (DDSRT_MAX_INTEGER(ddsrt_tv_sec_t)) - /** * @brief Convert a relative time to a timeval rounding up. * @@ -51,19 +49,21 @@ ddsrt_duration_to_timeval_ceil(dds_duration_t reltime, struct timeval *tv) return NULL; } else if (reltime > 0) { dds_duration_t max_nsecs; - if (DDSRT_TIME_T_MAX == INT32_MAX) { + DDSRT_STATIC_ASSERT (CHAR_BIT * sizeof (ddsrt_tv_sec_t) == 32 || CHAR_BIT * sizeof (ddsrt_tv_sec_t) == 64); + if (CHAR_BIT * sizeof (ddsrt_tv_sec_t) == 32) max_nsecs = INT32_MAX * DDS_NSECS_IN_SEC; - } else { - assert(DDSRT_TIME_T_MAX == INT64_MAX); - max_nsecs = DDSRT_TIME_T_MAX / DDS_NSECS_IN_SEC; - } + else + max_nsecs = INT64_MAX / DDS_NSECS_IN_SEC; if (reltime < (max_nsecs - DDS_NSECS_IN_USEC - 1)) { reltime += (DDS_NSECS_IN_USEC - 1); tv->tv_sec = (ddsrt_tv_sec_t)(reltime / DDS_NSECS_IN_SEC); tv->tv_usec = (int)((reltime % DDS_NSECS_IN_SEC) / DDS_NSECS_IN_USEC); } else { - tv->tv_sec = DDSRT_TIME_T_MAX; + if (CHAR_BIT * sizeof (ddsrt_tv_sec_t) == 32) + tv->tv_sec = (ddsrt_tv_sec_t) INT32_MAX; + else + tv->tv_sec = (ddsrt_tv_sec_t) INT64_MAX; tv->tv_usec = 999999; } } else { diff --git a/src/ddsrt/tests/select.c b/src/ddsrt/tests/select.c index 747565b..1012e82 100644 --- a/src/ddsrt/tests/select.c +++ b/src/ddsrt/tests/select.c @@ -36,8 +36,13 @@ CU_Test(ddsrt_select, duration_to_timeval) { struct timeval tv, *tvptr; dds_duration_t nsecs_max; - dds_duration_t secs_max = DDSRT_MAX_INTEGER(ddsrt_tv_sec_t); dds_duration_t usecs_max = 999999; + dds_duration_t secs_max; + DDSRT_STATIC_ASSERT (CHAR_BIT * sizeof (ddsrt_tv_sec_t) == 32 || CHAR_BIT * sizeof (ddsrt_tv_sec_t) == 64); + if (CHAR_BIT * sizeof (ddsrt_tv_sec_t) == 32) + secs_max = INT32_MAX; + else + secs_max = INT64_MAX; if (DDS_INFINITY > secs_max) { CU_ASSERT_EQUAL_FATAL(secs_max, INT32_MAX); diff --git a/src/ddsrt/tests/strtoll.c b/src/ddsrt/tests/strtoll.c index 525ddf1..9640693 100644 --- a/src/ddsrt/tests/strtoll.c +++ b/src/ddsrt/tests/strtoll.c @@ -27,9 +27,9 @@ char str_xllmin[99], str_xllmax[99]; /* Really test with the maximum values supported on a platform, not some made up number. */ -long long llmin = DDSRT_MIN_INTEGER(long long); -long long llmax = DDSRT_MAX_INTEGER(long long); -unsigned long long ullmax = DDSRT_MAX_INTEGER(unsigned long long); +long long llmin = INT64_MIN; +long long llmax = INT64_MAX; +unsigned long long ullmax = UINT64_MAX; CU_Init(ddsrt_strtoll) {