                                  _   _ ____  _
                              ___| | | |  _ \| |
                             / __| | | | |_) | |
                            | (__| |_| |  _ <| |___
                             \___|\___/|_| \_\_____|

                     Source Code Functions Apps Might Use
                     ====================================

The libcurl source code offers a few functions by source only. They are not
part of the official libcurl API, but the source files might be useful for
others so apps can optionally compile/build with these sources to gain
additional functions.

We provide them through a single header file for easy access for apps:
"curlx.h"

 curlx_strtoofft()

   A macro that converts a string containing a number to a curl_off_t number.
   This might use the curlx_strtoll() function which is provided as source
   code in strtoofft.c. Note that the function is only provided if no
   strtoll() (or equivalent) function exist on your platform. If curl_off_t
   is only a 32 bit number on your platform, this macro uses strtol().

 curlx_tvnow()

   returns a struct timeval for the current time.

 curlx_tvdiff()

   returns the difference between two timeval structs, in number of
   milliseconds.

 curlx_tvdiff_secs()

   returns the same as curlx_tvdiff but with full usec resolution (as a
   double)

FUTURE
======

 Several functions will be removed from the public curl_ name space in a
 future libcurl release. They will then only become available as curlx_
 functions instead. To make the transition easier, we already today provide
 these functions with the curlx_ prefix to allow sources to get built properly
 with the new function names. The functions this concerns are:

      curlx_getenv
      curlx_strequal
      curlx_strnequal
      curlx_mvsnprintf
      curlx_msnprintf
      curlx_maprintf
      curlx_mvaprintf
      curlx_msprintf
      curlx_mprintf
      curlx_mfprintf
      curlx_mvsprintf
      curlx_mvprintf
      curlx_mvfprintf
