stun: Fix a use of a function with an aggregate return value
authorPhilip Withnall <philip.withnall@collabora.co.uk>
Tue, 17 Dec 2013 10:06:10 +0000 (10:06 +0000)
committerOlivier Crête <olivier.crete@collabora.com>
Wed, 18 Dec 2013 22:50:58 +0000 (17:50 -0500)
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.

stun/stunmessage.c
stun/usages/timer.c

index 874d3f1..b9c54e3 100644 (file)
@@ -524,15 +524,14 @@ stun_message_append_error (StunMessage *msg, StunError code)
 {
   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;
 }
index ce711c2..82f3ea2 100644 (file)
@@ -88,9 +88,9 @@ static void stun_gettime (struct timeval *now)
 
 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)
   {