зеркало из https://github.com/mozilla/pjs.git
Added out argument for NS_MsgStripRE to avoid altering the const argument,
bug 131983, r=ducarroz, sr=bienvenu.
This commit is contained in:
Родитель
28fbb3122c
Коммит
eba02df28e
|
@ -345,7 +345,7 @@ nsresult NS_MsgCreatePathStringFromFolderURI(const char *folderURI, nsCString& p
|
|||
The string is not altered: the pointer to its head is merely advanced,
|
||||
and the length correspondingly decreased.
|
||||
*/
|
||||
PRBool NS_MsgStripRE(const char **stringP, PRUint32 *lengthP)
|
||||
PRBool NS_MsgStripRE(const char **stringP, PRUint32 *lengthP, char **modifiedSubject)
|
||||
{
|
||||
const char *s, *s_end;
|
||||
const char *last;
|
||||
|
@ -358,7 +358,8 @@ PRBool NS_MsgStripRE(const char **stringP, PRUint32 *lengthP)
|
|||
nsXPIDLCString decodedString;
|
||||
nsCOMPtr<nsIMimeConverter> mimeConverter;
|
||||
nsresult rv;
|
||||
if (strstr(*stringP, "=?"))
|
||||
// we cannot strip "Re:" for MIME encoded subject without modifying the original
|
||||
if (modifiedSubject && strstr(*stringP, "=?"))
|
||||
{
|
||||
mimeConverter = do_GetService(kCMimeConverterCID, &rv);
|
||||
if (NS_SUCCEEDED(rv))
|
||||
|
@ -423,15 +424,10 @@ PRBool NS_MsgStripRE(const char **stringP, PRUint32 *lengthP)
|
|||
char charset[kMAX_CSNAME] = "";
|
||||
if (kMAX_CSNAME >= (p2 - p1))
|
||||
strncpy(charset, p1, p2 - p1);
|
||||
nsXPIDLCString encodedString;
|
||||
rv = mimeConverter->EncodeMimePartIIStr_UTF8(s, PR_FALSE, charset, sizeof("Subject:"),
|
||||
kMIME_ENCODED_WORD_SIZE, getter_Copies(encodedString));
|
||||
kMIME_ENCODED_WORD_SIZE, modifiedSubject);
|
||||
if (NS_SUCCEEDED(rv))
|
||||
{
|
||||
strcpy((char *)*stringP, encodedString.get());
|
||||
*lengthP = encodedString.Length();
|
||||
return result;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -64,7 +64,7 @@ NS_MSG_BASE nsresult NS_MsgHashIfNecessary(nsCAutoString &name);
|
|||
|
||||
NS_MSG_BASE nsresult NS_MsgCreatePathStringFromFolderURI(const char *folderURI, nsCString& pathString);
|
||||
|
||||
NS_MSG_BASE PRBool NS_MsgStripRE(const char **stringP, PRUint32 *lengthP);
|
||||
NS_MSG_BASE PRBool NS_MsgStripRE(const char **stringP, PRUint32 *lengthP, char **modifiedSubject=nsnull);
|
||||
|
||||
NS_MSG_BASE char * NS_MsgSACopy(char **destination, const char *source);
|
||||
|
||||
|
|
|
@ -1058,7 +1058,8 @@ int nsParseMailMessageState::InternSubject (struct message_header *header)
|
|||
we just parsed the subject header anyway, we expect that parsing
|
||||
to be smartest. (After all, what if someone just went in and
|
||||
edited the subject line by hand?) */
|
||||
if (NS_MsgStripRE((const char **) &key, &L))
|
||||
nsXPIDLCString modifiedSubject;
|
||||
if (NS_MsgStripRE((const char **) &key, &L, getter_Copies(modifiedSubject)))
|
||||
flags |= MSG_FLAG_HAS_RE;
|
||||
else
|
||||
flags &= ~MSG_FLAG_HAS_RE;
|
||||
|
@ -1068,11 +1069,12 @@ int nsParseMailMessageState::InternSubject (struct message_header *header)
|
|||
|
||||
// Condense the subject text into as few MIME-2 encoded words as possible.
|
||||
#ifdef WE_CONDENSE_MIME_STRINGS
|
||||
char *condensedKey = msg_condense_mime2_string(key);
|
||||
char *condensedKey = msg_condense_mime2_string(modifiedSubject.IsEmpty() ? key : modifiedSubject.get());
|
||||
#else
|
||||
char *condensedKey = nsnull;
|
||||
#endif
|
||||
m_newMsgHdr->SetSubject(condensedKey ? condensedKey : key);
|
||||
m_newMsgHdr->SetSubject(condensedKey ? condensedKey :
|
||||
(modifiedSubject.IsEmpty() ? key : modifiedSubject.get()));
|
||||
PR_FREEIF(condensedKey);
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -512,7 +512,8 @@ nsNNTPNewsgroupList::ParseLine(char *line, PRUint32 * message_number)
|
|||
rv = newMsgHdr->GetFlags(&flags);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
/* strip "Re: " */
|
||||
if (NS_MsgStripRE(&subject, &subjectLen))
|
||||
nsXPIDLCString modifiedSubject;
|
||||
if (NS_MsgStripRE(&subject, &subjectLen, getter_Copies(modifiedSubject)))
|
||||
{
|
||||
// todo:
|
||||
// use OrFlags()?
|
||||
|
@ -525,9 +526,9 @@ nsNNTPNewsgroupList::ParseLine(char *line, PRUint32 * message_number)
|
|||
if (! (flags & MSG_FLAG_READ))
|
||||
rv = newMsgHdr->OrFlags(MSG_FLAG_NEW, &flags);
|
||||
#ifdef DEBUG_NEWS
|
||||
printf("subject = %s\n",subject);
|
||||
printf("subject = %s\n",modifiedSubject.IsEmpty() ? subject : modifiedSubject.get());
|
||||
#endif
|
||||
rv = newMsgHdr->SetSubject(subject);
|
||||
rv = newMsgHdr->SetSubject(modifiedSubject.IsEmpty() ? subject : modifiedSubject.get());
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче