#include <string>
#include <string.h>
#include <time.h>
#include <sstream>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <curl/curl.h>

int main( int argc, char **argv)
{
  std::ostringstream
    length;
  CURL
    *curl;
  struct curl_slist
    *slist;
  int
    ival;
  FILE
    *fp;
  struct stat
    finfo;
  curl_off_t
    fsize;
  const char
    *filenam = "x.x";

  stat( filenam, &finfo);
  fsize      = (curl_off_t) finfo.st_size;
  fp         = fopen( filenam, "r");

  slist           = NULL;

  length << "Content-Length: " << fsize;
  slist           = curl_slist_append( slist, length.str().c_str());

  curl            = curl_easy_init();
  curl_easy_setopt( curl, CURLOPT_HTTPHEADER,     slist);
  curl_easy_setopt( curl, CURLOPT_URL,            "http://madeup.com");
  curl_easy_setopt( curl, CURLOPT_UPLOAD,         1L);
  curl_easy_setopt( curl, CURLOPT_PUT,            1L);
  curl_easy_setopt( curl, CURLOPT_INFILESIZE,     fsize);
  //curl_easy_setopt( curl, CURLOPT_INFILESIZE_LARGE, fsize);
  curl_easy_setopt( curl, CURLOPT_READDATA,       fp);
  curl_easy_setopt( curl, CURLOPT_VERBOSE,        1);
  ival            = curl_easy_perform( curl);

  curl_slist_free_all( slist);
  curl_easy_cleanup( curl);
  fclose( fp);

  return 0;
}
