From 2fc150a6c8246fbd8bbd25cd066b3ab752ae065e Mon Sep 17 00:00:00 2001 From: "mscott%netscape.com" Date: Tue, 19 Oct 1999 21:06:42 +0000 Subject: [PATCH] no bug number. I found that we were making an extra copy of the message body before writing it to the stream. I was able to fix this by using a nsCString instead of an nsString for the message body. Also, audited the file to use nsCAutoString instead of nsString to save some extra copying. Used NS_WITH_SERVICE macros for componenet mananager and register service. Added some com ptr useage too. r=rhp git-svn-id: svn://10.0.0.236/trunk@51175 18797224-902f-48f8-a5cc-f745e15eee43 --- .../mime/emitters/src/nsMimeXULEmitter.cpp | 140 ++++++------------ .../mime/emitters/src/nsMimeXULEmitter.h | 2 +- 2 files changed, 44 insertions(+), 98 deletions(-) diff --git a/mozilla/mailnews/mime/emitters/src/nsMimeXULEmitter.cpp b/mozilla/mailnews/mime/emitters/src/nsMimeXULEmitter.cpp index dcf6f804ba8..41114d637c3 100644 --- a/mozilla/mailnews/mime/emitters/src/nsMimeXULEmitter.cpp +++ b/mozilla/mailnews/mime/emitters/src/nsMimeXULEmitter.cpp @@ -37,10 +37,11 @@ #include "nsAbBaseCID.h" #include "nsCOMPtr.h" #include "nsIMsgMailNewsUrl.h" +#include "nsXPIDLString.h" static NS_DEFINE_CID(kMsgHeaderParserCID, NS_MSGHEADERPARSER_CID); static NS_DEFINE_CID(kCAddressCollecter, NS_ABADDRESSCOLLECTER_CID); - +static NS_DEFINE_CID(kComponentManagerCID, NS_COMPONENTMANAGER_CID); nsresult NS_NewMimeXULEmitter(const nsIID& iid, void **result) { @@ -246,21 +247,12 @@ nsMimeXULEmitter::EndBody() nsOutputFileStream tempOutfile(*mBodyFileSpec); if (! tempOutfile.is_open()) return NS_ERROR_UNEXPECTED; - - char *tmpBody = mBody.ToNewCString(); - if (tmpBody) - tempOutfile.write(tmpBody, mBody.Length()); + + tempOutfile.write((const char *) mBody, mBody.Length()); tempOutfile.close(); - - nsAllocator::Free(tmpBody); return NS_OK; } - - - - - nsresult nsMimeXULEmitter::AddHeaderFieldHTML(const char *field, const char *value) { @@ -288,12 +280,11 @@ nsMimeXULEmitter::AddHeaderFieldHTML(const char *field, const char *value) // get a field name next to an emitted header value. Note: Default will always // be the name of the header itself. // - nsString newTagName(field); + nsCAutoString newTagName(field); newTagName.CompressWhitespace(PR_TRUE, PR_TRUE); newTagName.ToUpperCase(); - char *upCaseField = newTagName.ToNewCString(); - char *l10nTagName = LocalizeHeaderName(upCaseField, field); + char *l10nTagName = LocalizeHeaderName((const char *) newTagName, field); if ( (!l10nTagName) || (!*l10nTagName) ) UtilityWrite(field); else @@ -316,7 +307,6 @@ nsMimeXULEmitter::AddHeaderFieldHTML(const char *field, const char *value) UtilityWrite(""); nsCRT::free(newValue); - nsCRT::free(upCaseField); return NS_OK; } @@ -608,7 +598,6 @@ nsMimeXULEmitter::DumpAddBookIcon(char *fromLine) char *names; char *addresses; nsresult rv; - char *newName; if (!fromLine) return NS_OK; @@ -630,20 +619,18 @@ nsMimeXULEmitter::DumpAddBookIcon(char *fromLine) } // Strip off extra quotes... - nsString workString(name); - workString.Trim("\""); - newName = workString.ToNewCString(); + nsCAutoString newName(name); + newName.Trim("\""); UtilityWrite(""); UtilityWriteCRLF(""); - PR_FREEIF(newName); PR_FREEIF(names); PR_FREEIF(addresses); return NS_OK; @@ -823,16 +810,13 @@ nsMimeXULEmitter::WriteXULTag(const char *tagName, const char *value) nsresult nsMimeXULEmitter::WriteXULTagPrefix(const char *tagName, const char *value) { - char *upCaseTag = NULL; - - nsString newTagName(tagName); + nsCAutoString newTagName(tagName); newTagName.CompressWhitespace(PR_TRUE, PR_TRUE); newTagName.ToUpperCase(); - upCaseTag = newTagName.ToNewCString(); UtilityWrite("
"); // Here is where we are going to try to L10N the tagName so we will always @@ -844,7 +828,7 @@ nsMimeXULEmitter::WriteXULTagPrefix(const char *tagName, const char *value) UtilityWriteCRLF(""); UtilityWrite(""); - char *l10nTagName = LocalizeHeaderName(upCaseTag, tagName); + char *l10nTagName = LocalizeHeaderName((const char *) newTagName, tagName); if ( (!l10nTagName) || (!*l10nTagName) ) UtilityWrite(tagName); else @@ -857,8 +841,6 @@ nsMimeXULEmitter::WriteXULTagPrefix(const char *tagName, const char *value) UtilityWriteCRLF(""); UtilityWriteCRLF(""); - - nsAllocator::Free(upCaseTag); return NS_OK; } @@ -881,15 +863,12 @@ nsMimeXULEmitter::WriteXULTagPostfix(const char *tagName, const char *value) nsresult nsMimeXULEmitter::WriteEmailAddrXULTag(const char *tagName, const char *value) { -char *upCaseTag = NULL; - if ( (!value) || (!*value) ) return NS_OK; - nsString newTagName(tagName); + nsCAutoString newTagName(tagName); newTagName.CompressWhitespace(PR_TRUE, PR_TRUE); newTagName.ToUpperCase(); - upCaseTag = newTagName.ToNewCString(); WriteXULTagPrefix(tagName, value); @@ -897,10 +876,9 @@ char *upCaseTag = NULL; // do interesting things with the contents. // UtilityWriteCRLF(""); - OutputEmailAddresses(upCaseTag, value); + OutputEmailAddresses((const char *) newTagName, value); UtilityWriteCRLF(""); - PR_FREEIF(upCaseTag); WriteXULTagPostfix(tagName, value); return NS_OK; } @@ -1087,40 +1065,25 @@ nsMimeXULEmitter::OutputEmailAddresses(const char *aHeader, const char *aEmailAd nsresult nsMimeXULEmitter::ProcessSingleEmailEntry(const char *curHeader, char *curName, char *curAddress) { -char *link = nsnull; -char *tLink = nsnull; -char *workName = nsnull; -char *workAddr = nsnull; + char *link = nsnull; + char *tLink = nsnull; + nsCAutoString workName (curName); + nsCAutoString workAddr(curAddress); + nsCAutoString workString(curName); - if ( (curName) && (*curName) ) + workName.Trim("\""); + char * htmlString = nsEscapeHTML(workName); + if (htmlString) { - nsString workString(curName); - char *tName; - - workString.Trim("\""); - tName = workString.ToNewCString(); - workName = nsEscapeHTML(tName); - if (workName) - { - PR_FREEIF(tName); - } - else - { - workName = tName; - } + workName = htmlString; + nsCRT::free(htmlString); } - if ( (curAddress) && (*curAddress) ) - { - nsString workString2(curAddress); - - workString2.Trim("\""); - workAddr = workString2.ToNewCString(); - } + workAddr.Trim("\""); // tLink = PR_smprintf("addbook:add?vcard=begin%%3Avcard%%0Afn%%3A%s%%0Aemail%%3Binternet%%3A%s%%0Aend%%3Avcard%%0A", // (workName ? workName : workAddr), workAddr); - tLink = PR_smprintf("mailto:%s", workAddr); + tLink = PR_smprintf("mailto:%s", (const char *) workAddr); if (tLink) link = nsEscapeHTML(tLink); if (link) @@ -1130,8 +1093,8 @@ char *workAddr = nsnull; UtilityWrite("\">"); } - if (workName) - UtilityWrite(workName); + if (!workName.IsEmpty()) + UtilityWrite((const char *) workName); else UtilityWrite(curName); @@ -1167,8 +1130,6 @@ char *workAddr = nsnull; } } - PR_FREEIF(workName); - PR_FREEIF(workAddr); return NS_OK; } @@ -1178,14 +1139,11 @@ nsMimeXULEmitter::BuildListOfStatusProviders() nsresult rv; // enumerate the registry subkeys - nsIRegistry *registry = nsnull; nsRegistryKey key; - nsIEnumerator *components = nsnull; + nsCOMPtr components; miscStatusType *newInfo = nsnull; - rv = nsServiceManager::GetService(NS_REGISTRY_PROGID, - nsCOMTypeInfo::GetIID(), - (nsISupports**)®istry); + NS_WITH_SERVICE(nsIRegistry, registry, NS_REGISTRY_PROGID, &rv); if (NS_FAILED(rv)) return rv; @@ -1197,7 +1155,7 @@ nsMimeXULEmitter::BuildListOfStatusProviders() if (NS_FAILED(rv)) return rv; - rv = registry->EnumerateSubtrees(key, &components); + rv = registry->EnumerateSubtrees(key, getter_AddRefs(components)); if (NS_FAILED(rv)) return rv; @@ -1206,20 +1164,20 @@ nsMimeXULEmitter::BuildListOfStatusProviders() rv = components->First(); while (NS_SUCCEEDED(rv) && (NS_OK != components->IsDone())) { - nsISupports *base = nsnull; + nsCOMPtr base; - rv = components->CurrentItem(&base); + rv = components->CurrentItem(getter_AddRefs(base)); if (NS_FAILED(rv)) return rv; - nsIRegistryNode *node = nsnull; + nsCOMPtr node; nsIID nodeIID = NS_IREGISTRYNODE_IID; - rv = base->QueryInterface(nodeIID, (void**)&node); + node = do_QueryInterface(base, &rv); if (NS_FAILED(rv)) return rv; - char *name = nsnull; - rv = node->GetName(&name); + nsXPIDLCString name; + rv = node->GetName(getter_Copies(name)); if (NS_FAILED(rv)) return rv; @@ -1237,30 +1195,23 @@ nsMimeXULEmitter::BuildListOfStatusProviders() mMiscStatusArray->AppendElement(newInfo); } } - - // cleanup - nsCRT::free(name); - NS_RELEASE(node); - NS_RELEASE(base); + rv = components->Next(); } registry->Close(); - NS_IF_RELEASE( components ); - nsServiceManager::ReleaseService( NS_REGISTRY_PROGID, registry ); - + return NS_OK; } nsIMimeMiscStatus * nsMimeXULEmitter::GetStatusObjForProgID(nsCString aProgID) { - nsresult rv; - nsIComponentManager *comMgr; + nsresult rv = NS_OK; nsIMimeMiscStatus *returnObj = nsnull; nsISupports *obj = nsnull; - rv = NS_GetGlobalComponentManager(&comMgr); + NS_WITH_SERVICE(nsIComponentManager, comMgr, kComponentManagerCID, &rv); if (NS_FAILED(rv)) return nsnull; @@ -1269,14 +1220,9 @@ nsMimeXULEmitter::GetStatusObjForProgID(nsCString aProgID) if (NS_FAILED(rv)) return nsnull; - rv = comMgr->CreateInstance(cid, nsnull, nsCOMTypeInfo::GetIID(), (void**)&obj); + rv = comMgr->CreateInstance(cid, nsnull, NS_GET_IID(nsIMimeMiscStatus), (void**)&obj); if (NS_FAILED(rv)) return nsnull; - - rv = obj->QueryInterface(nsCOMTypeInfo::GetIID(), (void**)&returnObj); - NS_RELEASE(obj); - if (NS_FAILED(rv)) - return nsnull; else return returnObj; } @@ -1301,7 +1247,7 @@ nsMimeXULEmitter::Write(const char *buf, PRUint32 size, PRUint32 *amountWritten) if (needToWrite > 0) { rc += mOutStream->Write(mBufferMgr->GetBuffer(), - mBufferMgr->GetSize(), &written); + needToWrite, &written); mTotalWritten += written; mBufferMgr->ReduceBuffer(written); // mOutListener->OnDataAvailable(mChannel, mURL, mInputStream, 0, written); diff --git a/mozilla/mailnews/mime/emitters/src/nsMimeXULEmitter.h b/mozilla/mailnews/mime/emitters/src/nsMimeXULEmitter.h index 0ec231b4205..31617808c71 100644 --- a/mozilla/mailnews/mime/emitters/src/nsMimeXULEmitter.h +++ b/mozilla/mailnews/mime/emitters/src/nsMimeXULEmitter.h @@ -118,7 +118,7 @@ protected: // For body caching... PRBool mBodyStarted; - nsString mBody; + nsCString mBody; nsFileSpec *mBodyFileSpec; // For header caching...