diff --git a/src/core/ddsi/include/ddsi/ddsi_ipaddr.h b/src/core/ddsi/include/ddsi/ddsi_ipaddr.h index e0e575a..9a86d85 100644 --- a/src/core/ddsi/include/ddsi/ddsi_ipaddr.h +++ b/src/core/ddsi/include/ddsi/ddsi_ipaddr.h @@ -14,7 +14,7 @@ #include "ddsi/ddsi_tran.h" -enum ddsi_nearby_address_result ddsi_ipaddr_is_nearby_address (ddsi_tran_factory_t tran, const nn_locator_t *loc, const size_t ninterf, const struct nn_interface interf[]); +enum ddsi_nearby_address_result ddsi_ipaddr_is_nearby_address (ddsi_tran_factory_t tran, const nn_locator_t *loc, size_t ninterf, const struct nn_interface interf[]); enum ddsi_locator_from_string_result ddsi_ipaddr_from_string (ddsi_tran_factory_t tran, nn_locator_t *loc, const char *str, int32_t kind); char *ddsi_ipaddr_to_string (ddsi_tran_factory_t tran, char *dst, size_t sizeof_dst, const nn_locator_t *loc, int with_port); void ddsi_ipaddr_to_loc (nn_locator_t *dst, const os_sockaddr_storage *src, int32_t kind); diff --git a/src/core/ddsi/include/ddsi/ddsi_tran.h b/src/core/ddsi/include/ddsi/ddsi_tran.h index 178e271..27af518 100644 --- a/src/core/ddsi/include/ddsi/ddsi_tran.h +++ b/src/core/ddsi/include/ddsi/ddsi_tran.h @@ -220,7 +220,7 @@ int ddsi_conn_rejoin_transferred_mcgroups (ddsi_tran_conn_t conn); int ddsi_is_mcaddr (const nn_locator_t *loc); int ddsi_is_ssm_mcaddr (const nn_locator_t *loc); -enum ddsi_nearby_address_result ddsi_is_nearby_address (const nn_locator_t *loc, const size_t ninterf, const struct nn_interface interf[]); +enum ddsi_nearby_address_result ddsi_is_nearby_address (const nn_locator_t *loc, size_t ninterf, const struct nn_interface interf[]); enum ddsi_locator_from_string_result ddsi_locator_from_string (nn_locator_t *loc, const char *str); /* 8 for transport/ diff --git a/src/core/ddsi/include/ddsi/sysdeps.h b/src/core/ddsi/include/ddsi/sysdeps.h index f8a9c2b..3450322 100644 --- a/src/core/ddsi/include/ddsi/sysdeps.h +++ b/src/core/ddsi/include/ddsi/sysdeps.h @@ -134,9 +134,11 @@ extern "C" { #if SYSDEPS_HAVE_IOVEC typedef struct iovec ddsi_iovec_t; +typedef size_t ddsi_iov_len_t; #elif defined _WIN32 && !defined WINCE +typedef unsigned ddsi_iov_len_t; typedef struct ddsi_iovec { - unsigned iov_len; + ddsi_iov_len_t iov_len; void *iov_base; } ddsi_iovec_t; #define DDSI_IOVEC_MATCHES_WSABUF do { \ @@ -148,9 +150,10 @@ typedef struct ddsi_iovec { char len_size_matches[sizeof(((struct ddsi_iovec *)8)->iov_len) == sizeof(((WSABUF *)8)->len) ? 1 : -1]; \ }; } while (0) #else +typedef size_t ddsi_iov_len_t; typedef struct ddsi_iovec { void *iov_base; - size_t iov_len; + ddsi_iov_len_t iov_len; } ddsi_iovec_t; #endif diff --git a/src/core/ddsi/src/ddsi_udp.c b/src/core/ddsi/src/ddsi_udp.c index 586545d..da5c5e5 100644 --- a/src/core/ddsi/src/ddsi_udp.c +++ b/src/core/ddsi/src/ddsi_udp.c @@ -57,7 +57,7 @@ static ssize_t ddsi_udp_conn_read (ddsi_tran_conn_t conn, unsigned char * buf, s socklen_t srclen = (socklen_t) sizeof (src); msg_iov.iov_base = (void*) buf; - msg_iov.iov_len = len; + msg_iov.iov_len = (ddsi_iov_len_t)len; /* windows uses unsigned, POISX size_t */ memset (&msghdr, 0, sizeof (msghdr)); diff --git a/src/core/ddsi/src/q_gc.c b/src/core/ddsi/src/q_gc.c index 1e52830..3428b8c 100644 --- a/src/core/ddsi/src/q_gc.c +++ b/src/core/ddsi/src/q_gc.c @@ -98,14 +98,17 @@ static uint32_t gcreq_queue_thread (struct gcreq_queue *q) assert (trace_shortsleep); if (q->first == NULL) { - if (delay == T_NEVER) - os_condWait (&q->cond, &q->lock); - else - { - /* FIXME: fix os_time and use absolute timeouts */ - struct os_time to = { delay / T_SECOND, delay % T_SECOND }; - os_condTimedWait (&q->cond, &q->lock, &to); + /* FIXME: fix os_time and use absolute timeouts */ + struct os_time to; + if (delay >= 1000 * T_SECOND) { + /* avoid overflow */ + to.tv_sec = 1000; + to.tv_nsec = 0; + } else { + to.tv_sec = (os_timeSec)(delay / T_SECOND); + to.tv_nsec = (int32_t)(delay % T_SECOND); } + os_condTimedWait (&q->cond, &q->lock, &to); } if (q->first) { diff --git a/src/core/ddsi/src/q_xmsg.c b/src/core/ddsi/src/q_xmsg.c index 1643cb8..efdbc1a 100644 --- a/src/core/ddsi/src/q_xmsg.c +++ b/src/core/ddsi/src/q_xmsg.c @@ -1794,11 +1794,11 @@ int nn_xpack_addmsg (struct nn_xpack *xp, struct nn_xmsg *m, const uint32_t flag /* Append submessage; can possibly be merged with preceding iovec */ if ((char *) xp->iov[niov-1].iov_base + xp->iov[niov-1].iov_len == (char *) m->data->payload) - xp->iov[niov-1].iov_len += m->sz; + xp->iov[niov-1].iov_len += (ddsi_iov_len_t)m->sz; else { xp->iov[niov].iov_base = m->data->payload; - xp->iov[niov].iov_len = m->sz; + xp->iov[niov].iov_len = (ddsi_iov_len_t)m->sz; niov++; } sz += m->sz; diff --git a/src/core/ddsi/src/sysdeps.c b/src/core/ddsi/src/sysdeps.c index 75c9702..90fc404 100644 --- a/src/core/ddsi/src/sysdeps.c +++ b/src/core/ddsi/src/sysdeps.c @@ -159,7 +159,7 @@ ssize_t sendmsg (os_handle fd, const struct msghdr *message, int flags) assert (message->msg_controllen == 0); #endif - if (WSASendTo (fd, (WSABUF *) message->msg_iov, message->msg_iovlen, &sent, flags, (SOCKADDR *) message->msg_name, message->msg_namelen, NULL, NULL) == 0) + if (WSASendTo (fd, (WSABUF *) message->msg_iov, (DWORD)message->msg_iovlen, &sent, flags, (SOCKADDR *) message->msg_name, message->msg_namelen, NULL, NULL) == 0) ret = (ssize_t) sent; else ret = -1;