div() has an aggregate return, which GCC doesn’t like, although this
seems like a pretty pointless warning because div_t is the same size as
a pointer on 64-bit platforms (probably) and hardly going to cause
performance problems by passing it by value.
Anyway, it seems easier to simplify the code by using explicit / and %
operators inline, than it does to add pragmas and shut the warning up.
{
const char *str = stun_strerror (code);
size_t len = strlen (str);
- div_t d = div (code, 100);
uint8_t *ptr = stun_message_append (msg, STUN_ATTRIBUTE_ERROR_CODE, 4 + len);
if (ptr == NULL)
return STUN_MESSAGE_RETURN_NOT_ENOUGH_SPACE;
memset (ptr, 0, 2);
- ptr[2] = d.quot;
- ptr[3] = d.rem;
+ ptr[2] = code / 100;
+ ptr[3] = code % 100;
memcpy (ptr + 4, str, len);
return STUN_MESSAGE_RETURN_SUCCESS;
}
static void add_delay (struct timeval *ts, unsigned delay)
{
- div_t d = div (delay, 1000);
- ts->tv_sec += d.quot;
- ts->tv_usec += d.rem * 1000;
+ /* Delay is in ms. */
+ ts->tv_sec += delay / 1000;
+ ts->tv_usec += (delay % 1000) * 1000;
while (ts->tv_usec > 1000000)
{