]> code.citadel.org Git - citadel.git/blobdiff - citadel/msgbase.c
Memleak: CtdlMakeMessage(): don't forget about the original author.
[citadel.git] / citadel / msgbase.c
index af3b4c6f541e3d9ce04da8f969564133bc000bb4..f3b7f2dd8d94fa09c8908567bb650499ded2f2a7 100644 (file)
@@ -309,10 +309,10 @@ void headers_euid(long msgnum, void *userdata)
                return;
        }
 
-       cprintf("%ld|%s|%ld\n", 
+       cprintf("%ld|%s|%s\n", 
                msgnum, 
                (msg->cm_fields['E'] ? msg->cm_fields['E'] : ""),
-               msg->cm_fields['T']);
+               (msg->cm_fields['T'] ? msg->cm_fields['T'] : "0"));
        CtdlFreeMessage(msg);
 }
 
@@ -356,7 +356,7 @@ int CtdlMsgCmp(struct CtdlMessage *msg, struct CtdlMessage *template) {
  * Retrieve the "seen" message list for the current room.
  */
 void CtdlGetSeen(char *buf, int which_set) {
-       struct visit vbuf;
+       visit vbuf;
 
        /* Learn about the user and room in question */
        CtdlGetRelationship(&vbuf, &CC->user, &CC->room);
@@ -381,7 +381,7 @@ void CtdlSetSeen(long *target_msgnums, int num_target_msgnums,
        int was_seen = 0;
        long lo = (-1L);
        long hi = (-1L);
-       struct visit vbuf;
+       visit vbuf;
        long *msglist;
        int num_msgs = 0;
        StrBuf *vset;
@@ -607,7 +607,7 @@ int CtdlForEachMessage(int mode, long ref, char *search_string,
 {
 
        int a, i, j;
-       struct visit vbuf;
+       visit vbuf;
        struct cdbdata *cdbfr;
        long *msglist = NULL;
        int num_msgs = 0;
@@ -933,14 +933,14 @@ void memfmout(
        const char *nl          /* string to terminate lines with */
 ) {
        int column = 0;
-       char ch = 0;
+       unsigned char ch = 0;
        char outbuf[1024];
        int len = 0;
        int nllen = 0;
 
        if (!mptr) return;
        nllen = strlen(nl);
-       while (ch=*(mptr++), ch > 0) {
+       while (ch=*(mptr++), ch != 0) {
 
                if (ch == '\n') {
                        client_write(outbuf, len);
@@ -1891,6 +1891,9 @@ void OutputRFC822MsgHeaders(
                                        }
                                }
                        }
+                       else if (i == 'K') {
+                               cprintf("Reply-To: <%s>%s", mptr, nl);
+                       }
                        if (mptr != mpptr)
                                free (mptr);
                }
@@ -3433,6 +3436,8 @@ struct CtdlMessage *CtdlMakeMessage(
        char dest_node[256];
        char buf[1024];
        struct CtdlMessage *msg;
+       StrBuf *FakeAuthor;
+       StrBuf *FakeEncAuthor = NULL;
 
        msg = malloc(sizeof(struct CtdlMessage));
        memset(msg, 0, sizeof(struct CtdlMessage));
@@ -3462,11 +3467,14 @@ struct CtdlMessage *CtdlMakeMessage(
        msg->cm_fields['T'] = strdup(buf);
 
        if ((fake_name != NULL) && (fake_name[0])) {            /* author */
-               msg->cm_fields['A'] = strdup(fake_name);
+               FakeAuthor = NewStrBufPlain (fake_name, -1);
        }
        else {
-               msg->cm_fields['A'] = strdup(author->fullname);
+               FakeAuthor = NewStrBufPlain (author->fullname, -1);
        }
+       StrBufRFC2047encode(&FakeEncAuthor, FakeAuthor);
+       msg->cm_fields['A'] = SmashStrBuf(&FakeEncAuthor);
+       FreeStrBuf(&FakeAuthor);
 
        if (CC->room.QRflags & QR_MAILBOX) {            /* room */
                msg->cm_fields['O'] = strdup(&CC->room.QRname[11]);