X-Git-Url: https://code.citadel.org/?p=citadel.git;a=blobdiff_plain;f=citadel%2Fmsgbase.c;fp=citadel%2Fmsgbase.c;h=d1270f4d1e75b18b0fa9e744eed4e821d56663e9;hp=23ca1a3c0f0fbdf895eee8ab22a08398c086abad;hb=55013f95f08eafe1b375df4241e8defe387c6cdc;hpb=2b80e75820618944e1c75b9c01aeeefc8b6b0c81 diff --git a/citadel/msgbase.c b/citadel/msgbase.c index 23ca1a3c0..d1270f4d1 100644 --- a/citadel/msgbase.c +++ b/citadel/msgbase.c @@ -1592,13 +1592,13 @@ int CtdlOutputMsg(long msg_num, /* message number (local) to fetch */ if ((Author != NULL) && (*Author == NULL)) { - *Author = TheMessage->cm_fields[eAuthor]; - TheMessage->cm_fields[eAuthor] = NULL; + long len; + CM_GetAsField(TheMessage, eAuthor, Author, &len); } if ((Address != NULL) && (*Address == NULL)) { - *Address = TheMessage->cm_fields[erFc822Addr]; - TheMessage->cm_fields[erFc822Addr] = NULL; + long len; + CM_GetAsField(TheMessage, erFc822Addr, Address, &len); } CM_Free(TheMessage); TheMessage = NULL; @@ -1631,13 +1631,13 @@ int CtdlOutputMsg(long msg_num, /* message number (local) to fetch */ retcode = CtdlOutputPreLoadedMsg(TheMessage, mode, headers_only, do_proto, crlf, flags); if ((Author != NULL) && (*Author == NULL)) { - *Author = TheMessage->cm_fields[eAuthor]; - TheMessage->cm_fields[eAuthor] = NULL; + long len; + CM_GetAsField(TheMessage, eAuthor, Author, &len); } if ((Address != NULL) && (*Address == NULL)) { - *Address = TheMessage->cm_fields[erFc822Addr]; - TheMessage->cm_fields[erFc822Addr] = NULL; + long len; + CM_GetAsField(TheMessage, erFc822Addr, Address, &len); } CM_Free(TheMessage); @@ -2036,7 +2036,7 @@ int CtdlOutputPreLoadedMsg( * Pad it with spaces in order to avoid changing the RFC822 length of the message. */ if ( (flags & SUPPRESS_ENV_TO) && (!CM_IsEmpty(TheMessage, eenVelopeTo)) ) { - memset(TheMessage->cm_fields[eenVelopeTo], ' ', strlen(TheMessage->cm_fields[eenVelopeTo])); + memset(TheMessage->cm_fields[eenVelopeTo], ' ', TheMessage->cm_lengths[eenVelopeTo]); } /* Are we downloading a MIME component? */ @@ -2456,7 +2456,7 @@ long send_message(struct CtdlMessage *msg) { struct ser_ret smr; int is_bigmsg = 0; char *holdM = NULL; - long oldMLen = 0; + long holdMLen = 0; /* Get a new message number */ newmsgid = get_new_message_number(); @@ -2477,7 +2477,7 @@ long send_message(struct CtdlMessage *msg) { is_bigmsg = 1; holdM = msg->cm_fields[eMesageText]; msg->cm_fields[eMesageText] = NULL; - oldMLen = msg->cm_lengths[eMesageText]; + holdMLen = msg->cm_lengths[eMesageText]; msg->cm_lengths[eMesageText] = 0; } } @@ -2487,6 +2487,7 @@ long send_message(struct CtdlMessage *msg) { if (is_bigmsg) { msg->cm_fields[eMesageText] = holdM; + msg->cm_lengths[eMesageText] = holdMLen; } if (smr.len == 0) { @@ -2506,7 +2507,7 @@ long send_message(struct CtdlMessage *msg) { &newmsgid, (int)sizeof(long), holdM, - (oldMLen + 1) + (holdMLen + 1) ); } retval = newmsgid; @@ -2965,29 +2966,31 @@ void quickie_message(const char *from, msg->cm_format_type = format_type; if (from != NULL) { - msg->cm_fields[eAuthor] = strdup(from); + CM_SetField(msg, eAuthor, from, strlen(from)); } else if (fromaddr != NULL) { - msg->cm_fields[eAuthor] = strdup(fromaddr); - if (strchr(msg->cm_fields[eAuthor], '@')) { - *strchr(msg->cm_fields[eAuthor], '@') = 0; + char *pAt; + CM_SetField(msg, eAuthor, fromaddr, strlen(fromaddr)); + pAt = strchr(msg->cm_fields[eAuthor], '@'); + if (pAt != NULL) { + CM_CutFieldAt(msg, eAuthor, pAt - msg->cm_fields[eAuthor]); } } else { msg->cm_fields[eAuthor] = strdup("Citadel"); } - if (fromaddr != NULL) msg->cm_fields[erFc822Addr] = strdup(fromaddr); - if (room != NULL) msg->cm_fields[eOriginalRoom] = strdup(room); - msg->cm_fields[eNodeName] = strdup(NODENAME); + if (fromaddr != NULL) CM_SetField(msg, erFc822Addr, fromaddr, strlen(fromaddr)); + if (room != NULL) CM_SetField(msg, eOriginalRoom, room, strlen(room)); + CM_SetField(msg, eNodeName, NODENAME, strlen(NODENAME)); if (to != NULL) { - msg->cm_fields[eRecipient] = strdup(to); + CM_SetField(msg, eRecipient, to, strlen(to)); recp = validate_recipients(to, NULL, 0); } if (subject != NULL) { - msg->cm_fields[eMsgSubject] = strdup(subject); + CM_SetField(msg, eMsgSubject, subject, strlen(subject)); } - msg->cm_fields[eMesageText] = strdup(text); + CM_SetField(msg, eMesageText, text, strlen(text)); CtdlSubmitMsg(msg, recp, room, 0); CM_Free(msg);