Hand-apply 2ee558ec90623b570360e8e55c918b5bb37f9aac from master; various snapping...
[dcpomatic.git] / src / lib / quickmail.cc
index 3de2d06eeb7f9164a0bd3e1f1896a7cf0c7177f4..8d62e02c9c074fb6cd41284ec7ed4b00634ec9b5 100644 (file)
@@ -248,12 +248,12 @@ void email_info_attachment_list_close_handles (struct email_info_attachment_list
 
 //dummy attachment functions
 
-void* email_info_attachment_open_dummy (void* filedata)
+void* email_info_attachment_open_dummy (void *)
 {
-  return &email_info_attachment_open_dummy;
+       return (void *) &email_info_attachment_open_dummy;
 }
 
-size_t email_info_attachment_read_dummy (void* handle, void* buf, size_t len)
+size_t email_info_attachment_read_dummy (void *, void *, size_t)
 {
   return 0;
 }
@@ -488,6 +488,7 @@ char* quickmail_get_body (quickmail mailobj)
     do {
       if ((p = (char*)realloc(result, resultlen + BODY_BUFFER_SIZE)) == NULL) {
         free(result);
+       result = NULL;
         DEBUG_ERROR(ERRMSG_MEMORY_ALLOCATION_ERROR)
         break;
       }
@@ -569,11 +570,10 @@ void quickmail_set_debug_log (quickmail mailobj, FILE* filehandle)
 
 void quickmail_fsave (quickmail mailobj, FILE* filehandle)
 {
-  int i;
   size_t n;
   char buf[80];
   while ((n = quickmail_get_data(buf, sizeof(buf), 1, mailobj)) > 0) {
-    for (i = 0; i < n; i++)
+    for (size_t i = 0; i < n; i++)
       fprintf(filehandle, "%c", buf[i]);
   }
 }
@@ -606,7 +606,7 @@ size_t quickmail_get_data (void* ptr, size_t size, size_t nmemb, void* userp)
       //generate header part
       char** p = &mailobj->buf;
       mailobj->buf = NULL;
-      str_append(p, "User-Agent: libquickmail v" LIBQUICKMAIL_VERSION NEWLINE);
+      str_append(p, "User-Agent: libquickmail\n");
       if (mailobj->timestamp != 0) {
         char timestamptext[32];
         if (strftime(timestamptext, sizeof(timestamptext), "%a, %d %b %Y %H:%M:%S %z", localtime(&mailobj->timestamp))) {\r
@@ -701,7 +701,7 @@ size_t quickmail_get_data (void* ptr, size_t size, size_t nmemb, void* userp)
         }
         if (mailobj->buflen == 0 && mailobj->current_attachment && mailobj->current_attachment->handle) {
           //read body data
-          if ((mailobj->buf = malloc(BODY_BUFFER_SIZE)) == NULL) {
+       if ((mailobj->buf = (char *) malloc(BODY_BUFFER_SIZE)) == NULL) {
             DEBUG_ERROR(ERRMSG_MEMORY_ALLOCATION_ERROR)
           }
           if (mailobj->buf == NULL || (mailobj->buflen = mailobj->current_attachment->email_info_attachment_read(mailobj->current_attachment->handle, mailobj->buf, BODY_BUFFER_SIZE)) <= 0) {
@@ -826,10 +826,10 @@ size_t quickmail_get_data (void* ptr, size_t size, size_t nmemb, void* userp)
 
   //flush pending data if any
   if (mailobj->buflen > 0) {
-    int len = (mailobj->buflen > size * nmemb ? size * nmemb : mailobj->buflen);
+         int len = ((size_t) mailobj->buflen > size * nmemb ? size * nmemb : mailobj->buflen);
     memcpy(ptr, mailobj->buf, len);
     if (len < mailobj->buflen) {
-      mailobj->buf = memmove(mailobj->buf, mailobj->buf + len, mailobj->buflen - len);
+      mailobj->buf = (char *) memmove(mailobj->buf, mailobj->buf + len, mailobj->buflen - len);
       mailobj->buflen -= len;
     } else {
       free(mailobj->buf);
@@ -930,6 +930,10 @@ const char* quickmail_send (quickmail mailobj, const char* smtpserver, unsigned
     //set callback function for getting message body
     curl_easy_setopt(curl, CURLOPT_READFUNCTION, quickmail_get_data);
     curl_easy_setopt(curl, CURLOPT_READDATA, mailobj);
+    /* Without this curl sends VRFY, which exim errors on
+       (at least on main.carlh.net)
+    */
+    curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L);
     //enable debugging if requested
     if (mailobj->debuglog) {
       curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);