2007-09-02 Zoltan Varga <vargaz@gmail.com>
[mono.git] / mono / io-layer / misc.c
index 67ffbeed501bd517bb1981edd4cead369218c49f..82835cc52b937ac0598b8bdb4c66fed8d2bd9e9a 100644 (file)
 #include <glib.h>
 #include <sys/time.h>
 #include <stdlib.h>
+#include <string.h>
 
 #include "misc-private.h"
 
 void _wapi_calc_timeout(struct timespec *timeout, guint32 ms)
 {
        struct timeval now;
-       div_t divvy;
-               
-       divvy=div((int)ms, 1000);
-       gettimeofday(&now, NULL);
+       div_t ms_divvy, overflow_divvy;
+       
+       gettimeofday (&now, NULL);
+
+       ms_divvy = div (ms, 1000);
+       overflow_divvy = div ((now.tv_usec / 1000) + ms_divvy.rem, 1000);
                
-       timeout->tv_sec=now.tv_sec+divvy.quot;
-       timeout->tv_nsec=(now.tv_usec+divvy.rem)*1000;
+       timeout->tv_sec = now.tv_sec + ms_divvy.quot + overflow_divvy.quot;
+       timeout->tv_nsec = overflow_divvy.rem * 1000000;
 }