diff -ur curl-7.19.6-20090624/docs/libcurl/curl_multi_fdset.3 curl-7.19.6-20090624.new/docs/libcurl/curl_multi_fdset.3
--- curl-7.19.6-20090624/docs/libcurl/curl_multi_fdset.3	2008-12-28 22:00:31.000000000 -0500
+++ curl-7.19.6-20090624.new/docs/libcurl/curl_multi_fdset.3	2009-06-24 00:19:13.977680967 -0400
@@ -25,6 +25,10 @@
 this function returns. Otherwise it will contain the higher descriptor number
 libcurl set.
 
+The \fIexc_fd_set\fP value may be NULL, while \fIread_fd_set\fP and
+\fIwrite_fd_set\fP must point to actual fd_sets. This is somewhat
+different from select(), which allows any of its fd_sets to be NULL.
+
 You should also be aware that when doing select(), you should consider using a
 rather small (single-digit number of seconds) timeout and call
 \fIcurl_multi_perform\fP regularly - even if no activity has been seen on the
diff -ur curl-7.19.6-20090624/docs/libcurl/curl_multi_info_read.3 curl-7.19.6-20090624.new/docs/libcurl/curl_multi_info_read.3
--- curl-7.19.6-20090624/docs/libcurl/curl_multi_info_read.3	2009-05-07 22:00:06.000000000 -0400
+++ curl-7.19.6-20090624.new/docs/libcurl/curl_multi_info_read.3	2009-06-23 23:59:20.567807175 -0400
@@ -16,9 +16,10 @@
 details on these should be written down as well.
 
 Repeated calls to this function will return a new struct each time, until a
-NULL is returned as a signal that there is no more to get at this point. The
-integer pointed to with \fImsgs_in_queue\fP will contain the number of
-remaining messages after this function was called.
+NULL is returned as a signal that there is no more to get at this point.
+If \fmsgs_in_queue\fP is non-NULL, the function will write into the integer
+to which it points the number of messages remaining after this function was
+called.
 
 When you fetch a message using this function, it is removed from the internal
 queue so calling this function again will not return the same message
diff -ur curl-7.19.6-20090624/docs/libcurl/curl_multi_perform.3 curl-7.19.6-20090624.new/docs/libcurl/curl_multi_perform.3
--- curl-7.19.6-20090624/docs/libcurl/curl_multi_perform.3	2008-12-28 22:00:49.000000000 -0500
+++ curl-7.19.6-20090624.new/docs/libcurl/curl_multi_perform.3	2009-06-24 00:21:55.551682426 -0400
@@ -17,7 +17,7 @@
 write the number of handles that still transfer data in the second argument's
 integer-pointer.
 
-When you call curl_multi_perform() and the amount of \fIrunning_handles\fP is
+When you call curl_multi_perform() and the number of \fIrunning_handles\fP is
 changed from the previous call (or is less than the amount of easy handles
 you've added to the multi handle), you know that there is one or more
 transfers less "running". You can then call \fIcurl_multi_info_read(3)\fP to
Only in curl-7.19.6-20090624.new/lib: .multi.c.swp
diff -ur curl-7.19.6-20090624/lib/multi.c curl-7.19.6-20090624.new/lib/multi.c
--- curl-7.19.6-20090624/lib/multi.c	2009-06-12 22:00:06.000000000 -0400
+++ curl-7.19.6-20090624.new/lib/multi.c	2009-06-24 00:12:18.799319247 -0400
@@ -1541,7 +1541,8 @@
 
   } while(t);
 
-  *running_handles = multi->num_alive;
+  if (running_handles)
+    *running_handles = multi->num_alive;
 
   if( CURLM_OK >= returncode )
     update_timer(multi);
@@ -1630,7 +1631,8 @@
 {
   struct Curl_multi *multi=(struct Curl_multi *)multi_handle;
 
-  *msgs_in_queue = 0; /* default to none */
+  if (msgs_in_queue)
+    *msgs_in_queue = 0; /* default to none */
 
   if(GOOD_MULTI_HANDLE(multi)) {
     struct Curl_one_easy *easy;
@@ -1650,7 +1652,8 @@
       return NULL; /* this means internal count confusion really */
 
     multi->num_msgs--;
-    *msgs_in_queue = multi->num_msgs;
+    if (msgs_in_queue)
+      *msgs_in_queue = multi->num_msgs;
 
     return &easy->msg->extmsg;
   }
@@ -1932,7 +1935,8 @@
 
   } while(t);
 
-  *running_handles = multi->num_alive;
+  if (running_handles)
+    *running_handles = multi->num_alive;
   return result;
 }
 
