when we fail to preserve the temporary file for mime download preparation print out...
[citadel.git] / citadel / msgbase.c
index c583263eb4ebc19220aa72a3660637dcff0ca1b6..824b51bd337974b232da9bd2644ccaed22db1085 100644 (file)
@@ -1084,26 +1084,37 @@ void mime_download(char *name, char *filename, char *partnum, char *disp,
                   char *encoding, char *cbid, void *cbuserdata)
 {
        int rv = 0;
+       CitContext *CCC = MyContext();
 
        /* Silently go away if there's already a download open. */
-       if (CC->download_fp != NULL)
+       if (CCC->download_fp != NULL)
                return;
 
        if (
-               (!IsEmptyStr(partnum) && (!strcasecmp(CC->download_desired_section, partnum)))
-       ||      (!IsEmptyStr(cbid) && (!strcasecmp(CC->download_desired_section, cbid)))
+               (!IsEmptyStr(partnum) && (!strcasecmp(CCC->download_desired_section, partnum)))
+       ||      (!IsEmptyStr(cbid) && (!strcasecmp(CCC->download_desired_section, cbid)))
        ) {
-               CC->download_fp = tmpfile();
-               if (CC->download_fp == NULL)
+               CCC->download_fp = tmpfile();
+               if (CCC->download_fp == NULL) {
+                       syslog(LOG_EMERG, "mime_download(): Couldn't write: %s\n",
+                              strerror(errno));
+                       cprintf("%d cannot open temporary file: %s\n",
+                               ERROR + INTERNAL_ERROR, strerror(errno));
                        return;
+               }
        
                rv = fwrite(content, length, 1, CC->download_fp);
-               if (rv == -1) {
+               if (rv <= 0) {
                        syslog(LOG_EMERG, "mime_download(): Couldn't write: %s\n",
                               strerror(errno));
+                       cprintf("%d unable to write tempfile.\n",
+                               ERROR + TOO_BIG);
+                       fclose(CCC->download_fp);
+                       CCC->download_fp = NULL;
+                       return;
                }
-               fflush(CC->download_fp);
-               rewind(CC->download_fp);
+               fflush(CCC->download_fp);
+               rewind(CCC->download_fp);
        
                OpenCmdResult(filename, cbtype);
        }
@@ -1239,26 +1250,28 @@ int is_valid_message(struct CtdlMessage *msg) {
        return 1;
 }
 
+void CtdlFreeMessageContents(struct CtdlMessage *msg)
+{
+       int i;
 
+       for (i = 0; i < 256; ++i)
+               if (msg->cm_fields[i] != NULL) {
+                       free(msg->cm_fields[i]);
+               }
+
+       msg->cm_magic = 0;      /* just in case */
+}
 /*
  * 'Destructor' for struct CtdlMessage
  */
 void CtdlFreeMessage(struct CtdlMessage *msg)
 {
-       int i;
-
        if (is_valid_message(msg) == 0) 
        {
                if (msg != NULL) free (msg);
                return;
        }
-
-       for (i = 0; i < 256; ++i)
-               if (msg->cm_fields[i] != NULL) {
-                       free(msg->cm_fields[i]);
-               }
-
-       msg->cm_magic = 0;      /* just in case */
+       CtdlFreeMessageContents(msg);
        free(msg);
 }