Mesages: fix copying of fields; add flush function to cleanup a messages structs...
authorWilfried Goesgens <dothebart@citadel.org>
Sat, 14 Sep 2013 08:53:06 +0000 (10:53 +0200)
committerWilfried Goesgens <dothebart@citadel.org>
Sat, 14 Sep 2013 08:53:06 +0000 (10:53 +0200)
citadel/modules/rssclient/serv_rssclient.c
citadel/msgbase.c
citadel/msgbase.h

index 701f9717b80cdfc8c95258c8aba847f74bc10619..f774fa3f543b0ea6d6a3f8083135ac518bb01a37 100644 (file)
@@ -290,7 +290,7 @@ int rss_format_item(AsyncIO *IO, networker_save_message *SaveMsg)
                return 0;
        }
 
-       memset(&SaveMsg->Msg, 0, sizeof (struct CtdlMessage));
+       CM_Flush(&SaveMsg->Msg);
 
        if (SaveMsg->author_or_creator != NULL) {
 
index 03ef35df6158d99a1d5151cc17b305a61832018a..b09850a4dbbb84dd576c9b4eb488dcf03d03f1b7 100644 (file)
@@ -193,6 +193,18 @@ void CM_FlushField(struct CtdlMessage *Msg, eMsgField which)
                free (Msg->cm_fields[which]);
        Msg->cm_fields[which] = NULL;
 }
+void CM_Flush(struct CtdlMessage *Msg)
+{
+       int i;
+
+       if (CM_IsValidMsg(Msg) == 0) 
+               return;
+
+       for (i = 0; i < 256; ++i)
+       {
+               CM_FlushField(Msg, i);
+       }
+}
 
 void CM_CopyField(struct CtdlMessage *Msg, eMsgField WhichToPutTo, eMsgField WhichtToCopy)
 {
@@ -204,7 +216,7 @@ void CM_CopyField(struct CtdlMessage *Msg, eMsgField WhichToPutTo, eMsgField Whi
        {
                len = strlen(Msg->cm_fields[WhichtToCopy]);
                Msg->cm_fields[WhichToPutTo] = malloc(len + 1);
-               memcpy(Msg->cm_fields[WhichToPutTo], Msg->cm_fields[WhichToPutTo], len);
+               memcpy(Msg->cm_fields[WhichToPutTo], Msg->cm_fields[WhichtToCopy], len);
                Msg->cm_fields[WhichToPutTo][len] = '\0';
        }
        else
index 59ee421e01e2dec32c076f8b2e56838ce6647bde..7780d69fc54b3784e209d5d602c6ea31d618ebee 100644 (file)
@@ -135,6 +135,7 @@ void CM_SetFieldLONG   (struct CtdlMessage *Msg, eMsgField which, long lvalue);
 void CM_CopyField      (struct CtdlMessage *Msg, eMsgField WhichToPutTo, eMsgField WhichtToCopy);
 void CM_CutFieldAt     (struct CtdlMessage *Msg, eMsgField WhichToCut, long maxlen);
 void CM_FlushField     (struct CtdlMessage *Msg, eMsgField which);
+void CM_Flush          (struct CtdlMessage *Msg);
 void CM_SetAsField     (struct CtdlMessage *Msg, eMsgField which, char **buf, long length);
 void CM_SetAsFieldSB   (struct CtdlMessage *Msg, eMsgField which, StrBuf **buf);
 void CM_GetAsField     (struct CtdlMessage *Msg, eMsgField which, char **ret, long *retlen);