]> code.citadel.org Git - citadel.git/blobdiff - citadel/imap_misc.c
* Changed a bunch of localtime() calls to localtime_r(), for great justice.
[citadel.git] / citadel / imap_misc.c
index 882fbbdd6146e607dbf28dc4a227760b5ff2e752..b4299c583200b18f054f0fd9989964c1ad1ce1b5 100644 (file)
@@ -143,7 +143,7 @@ void imap_print_instant_messages(void) {
        char tmp[SIZ];
        int i;
        size_t size, size2;
-       struct tm *stamp;
+       struct tm stamp;
 
        if (CC->FirstExpressMessage == NULL) {
                return;
@@ -154,7 +154,7 @@ void imap_print_instant_messages(void) {
        end_critical_section(S_SESSION_TABLE);
 
        while (ptr != NULL) {
-               stamp = localtime(&(ptr->timestamp));
+               localtime_r(&(ptr->timestamp), &stamp);
                size = strlen(ptr->text) + SIZ;
                dumpomatic = malloc(size);
                strcpy(dumpomatic, "");
@@ -168,17 +168,17 @@ void imap_print_instant_messages(void) {
                        strcat(dumpomatic, "Message ");
 
                /* Timestamp.  Can this be improved? */
-               if (stamp->tm_hour == 0 || stamp->tm_hour == 12)
+               if (stamp.tm_hour == 0 || stamp.tm_hour == 12)
                        sprintf(tmp, "at 12:%02d%cm",
-                               stamp->tm_min, 
-                               stamp->tm_hour ? 'p' : 'a');
-               else if (stamp->tm_hour > 12)           /* pm */
+                               stamp.tm_min, 
+                               stamp.tm_hour ? 'p' : 'a');
+               else if (stamp.tm_hour > 12)            /* pm */
                        sprintf(tmp, "at %d:%02dpm",
-                               stamp->tm_hour - 12,
-                               stamp->tm_min);
+                               stamp.tm_hour - 12,
+                               stamp.tm_min);
                else                                    /* am */
                        sprintf(tmp, "at %d:%02dam",
-                               stamp->tm_hour, stamp->tm_min);
+                               stamp.tm_hour, stamp.tm_min);
                strcat(dumpomatic, tmp);
 
                size2 = strlen(dumpomatic);
@@ -259,6 +259,7 @@ void imap_append(int num_parms, char *parms[]) {
                blksize = literal_length - bytes_transferred;
                if (blksize > SIZ) blksize = SIZ;
 
+               flush_output();
                ret = client_read(&IMAP->transmitted_message[bytes_transferred], blksize);
                if (ret < 1) {
                        bytes_transferred = literal_length;     /* bail out */
@@ -284,6 +285,7 @@ void imap_append(int num_parms, char *parms[]) {
         * literal (the message text) is received.  This call to
         * client_gets() absorbs it.
         */
+       flush_output();
        client_gets(buf);
        lprintf(CTDL_DEBUG, "Trailing CRLF: %s\n", buf);
 
@@ -296,6 +298,7 @@ void imap_append(int num_parms, char *parms[]) {
                }
        }
        literal_length = stripped_length;
+       IMAP->transmitted_message[literal_length] = 0;  /* reterminate it */
 
        lprintf(CTDL_DEBUG, "Converting message format\n");
         msg = convert_internet_message(IMAP->transmitted_message);