diff --git a/daemon/network.c b/daemon/network.c index ee2bb1bfc8b35fc799f9b59879b4131ad548d3cf..10a8d6ad0412b4c9e22b5c0e6fe899dc9709f232 100644 --- a/daemon/network.c +++ b/daemon/network.c @@ -86,7 +86,10 @@ static int insert_endpoint(struct network *net, const char *addr, struct endpoin array_init(*ep_array); } - return array_push(*ep_array, ep); + if (array_push(*ep_array, ep) < 0) { + return kr_error(ENOMEM); + } + return kr_ok(); } /** Open endpoint protocols. */ diff --git a/lib/generic/array.h b/lib/generic/array.h index 5655396f15a19110790b1e0ec6102acdd98790bd..a9316482b5d146c90f868e975f9017ec8995e1c2 100644 --- a/lib/generic/array.h +++ b/lib/generic/array.h @@ -127,9 +127,9 @@ static inline void array_std_free(void *baton, void *p) * @return element index on success, <0 on failure */ #define array_push(array, val) \ - (array).len < (array).cap ? ((array).at[(array).len] = val, (array).len++) \ + (int)((array).len < (array).cap ? ((array).at[(array).len] = val, (array).len++) \ : (array_reserve(array, ((array).cap + 1)) < 0 ? -1 \ - : ((array).at[(array).len] = val, (array).len++)) + : ((array).at[(array).len] = val, (array).len++))) /** * Pop value from the end of the array. @@ -143,7 +143,7 @@ static inline void array_std_free(void *baton, void *p) * @return 0 on success, <0 on failure */ #define array_del(array, i) \ - (i) < (array).len ? ((array).len -= 1,(array).at[i] = (array).at[(array).len], 0) : -1 + (int)((i) < (array).len ? ((array).len -= 1,(array).at[i] = (array).at[(array).len], 0) : -1) /** * Return last element of the array.