diff -ru curl-7.11.2-20040408/lib/progress.c curl-7.11.2-20040408.patched/lib/progress.c
--- curl-7.11.2-20040408/lib/progress.c	Fri Apr  2 09:32:03 2004
+++ curl-7.11.2-20040408.patched/lib/progress.c	Thu Apr  8 13:44:50 2004
@@ -148,26 +148,26 @@
 
   case TIMER_NAMELOOKUP:
     data->progress.t_nslookup =
-      (double)Curl_tvdiff(Curl_tvnow(), data->progress.t_startsingle)/1000.0;
+      Curl_tvdiff_secs(Curl_tvnow(), data->progress.t_startsingle);
     break;
   case TIMER_CONNECT:
     data->progress.t_connect =
-      (double)Curl_tvdiff(Curl_tvnow(), data->progress.t_startsingle)/1000.0;
+      Curl_tvdiff_secs(Curl_tvnow(), data->progress.t_startsingle);
     break;
   case TIMER_PRETRANSFER:
     data->progress.t_pretransfer =
-      (double)Curl_tvdiff(Curl_tvnow(), data->progress.t_startsingle)/1000.0;
+      Curl_tvdiff_secs(Curl_tvnow(), data->progress.t_startsingle);
     break;
   case TIMER_STARTTRANSFER:
     data->progress.t_starttransfer =
-      (double)Curl_tvdiff(Curl_tvnow(), data->progress.t_startsingle)/1000.0;
+      Curl_tvdiff_secs(Curl_tvnow(), data->progress.t_startsingle);
     break;
   case TIMER_POSTRANSFER:
     /* this is the normal end-of-transfer thing */
     break;
   case TIMER_REDIRECT:
     data->progress.t_redirect =
-      (double)Curl_tvdiff(Curl_tvnow(), data->progress.start)/1000.0;
+      Curl_tvdiff_secs(Curl_tvnow(), data->progress.start);
     break;
   }
 }
@@ -249,8 +249,8 @@
   now = Curl_tvnow(); /* what time is it */
 
   /* The time spent so far (from the start) */
-  data->progress.timespent = Curl_tvdiff(now, data->progress.start)/1000.0;
-  timespent = (long)data->progress.timespent;
+  data->progress.timespent = Curl_tvdiff_secs(now, data->progress.start);
+  timespent = (long)data->progress.timespent*1000.0;
 
   /* The average download speed this far */
   data->progress.dlspeed =
diff -ru curl-7.11.2-20040408/lib/timeval.c curl-7.11.2-20040408.patched/lib/timeval.c
--- curl-7.11.2-20040408/lib/timeval.c	Tue Apr  6 12:15:10 2004
+++ curl-7.11.2-20040408.patched/lib/timeval.c	Thu Apr  8 13:28:42 2004
@@ -98,6 +98,17 @@
     (newer.tv_usec-older.tv_usec)/1000;
 }
 
+/*
+ * Same as curlx_tvdiff but with full usec resolution.
+ *
+ * Returns: the time difference in seconds with subsecond resolution.
+ */
+double curlx_tvdiff_secs(struct timeval newer, struct timeval older)
+{
+  return (double)(newer.tv_sec-older.tv_sec)+
+    (double)(newer.tv_usec-older.tv_usec)/1000000.0;
+}
+
 /* return the number of seconds in the given input timeval struct */
 long Curl_tvlong(struct timeval t1)
 {
diff -ru curl-7.11.2-20040408/lib/timeval.h curl-7.11.2-20040408.patched/lib/timeval.h
--- curl-7.11.2-20040408/lib/timeval.h	Tue Apr  6 12:15:10 2004
+++ curl-7.11.2-20040408.patched/lib/timeval.h	Thu Apr  8 13:28:42 2004
@@ -54,11 +54,20 @@
  * Returns: the time difference in number of milliseconds.
  */
 long curlx_tvdiff(struct timeval t1, struct timeval t2);
+
+/*
+ * Same as curlx_tvdiff but with full usec resolution.
+ *
+ * Returns: the time difference in seconds with subsecond resolution.
+ */
+double curlx_tvdiff_secs(struct timeval t1, struct timeval t2);
+
 long Curl_tvlong(struct timeval t1);
 
 /* These two defines below exist to provide the older API for library
    internals only. */
 #define Curl_tvnow() curlx_tvnow()
 #define Curl_tvdiff(x,y) curlx_tvdiff(x,y)
+#define Curl_tvdiff_secs(x,y) curlx_tvdiff_secs(x,y)
 
 #endif

