From 7ef713509b5969fab10b73a0453147ed8a94448d Mon Sep 17 00:00:00 2001 From: "mscott%netscape.com" Date: Sat, 5 Jun 1999 00:39:08 +0000 Subject: [PATCH] Bug #5633 -- use NS_WITH_SERVICE macro. Also cleaned up goto statements such that if we fail to register or unregister a component, we try to register/unregister the rest of the components before giving up. Rename factory from nsMsgFactory to something more appropriate --> nsXmlEmitterFactory. --- .../mime/emitters/xml/nsEmitterFactory.cpp | 56 +++++-------------- 1 file changed, 15 insertions(+), 41 deletions(-) diff --git a/mailnews/mime/emitters/xml/nsEmitterFactory.cpp b/mailnews/mime/emitters/xml/nsEmitterFactory.cpp index 29e7e95c06c2..49c27d529500 100644 --- a/mailnews/mime/emitters/xml/nsEmitterFactory.cpp +++ b/mailnews/mime/emitters/xml/nsEmitterFactory.cpp @@ -19,7 +19,6 @@ #include "nsIFactory.h" #include "nsISupports.h" #include "msgCore.h" -#include "nsCOMPtr.h" #include "pratom.h" /* Include all of the interfaces our factory can generate components for */ @@ -36,13 +35,13 @@ static NS_DEFINE_CID(kMimeEmitterCID, NS_XML_MIME_EMITTER_CID); static PRInt32 g_InstanceCount = 0; static PRInt32 g_LockCount = 0; -class nsMsgFactory : public nsIFactory +class nsXmlEmitterFactory : public nsIFactory { public: // nsISupports methods NS_DECL_ISUPPORTS - nsMsgFactory(const nsCID &aClass, + nsXmlEmitterFactory(const nsCID &aClass, const char* aClassName, const char* aProgID, nsISupports*); @@ -52,7 +51,7 @@ public: NS_IMETHOD LockFactory(PRBool aLock); protected: - virtual ~nsMsgFactory(); + virtual ~nsXmlEmitterFactory(); nsCID mClassID; char* mClassName; @@ -60,7 +59,7 @@ protected: nsIServiceManager* mServiceManager; }; -nsMsgFactory::nsMsgFactory(const nsCID &aClass, +nsXmlEmitterFactory::nsXmlEmitterFactory(const nsCID &aClass, const char* aClassName, const char* aProgID, nsISupports *compMgrSupports) @@ -75,7 +74,7 @@ nsMsgFactory::nsMsgFactory(const nsCID &aClass, (void **)&mServiceManager); } -nsMsgFactory::~nsMsgFactory() +nsXmlEmitterFactory::~nsXmlEmitterFactory() { NS_ASSERTION(mRefCnt == 0, "non-zero refcnt at destruction"); @@ -85,7 +84,7 @@ nsMsgFactory::~nsMsgFactory() } nsresult -nsMsgFactory::QueryInterface(const nsIID &aIID, void **aResult) +nsXmlEmitterFactory::QueryInterface(const nsIID &aIID, void **aResult) { if (aResult == NULL) return NS_ERROR_NULL_POINTER; @@ -106,11 +105,11 @@ nsMsgFactory::QueryInterface(const nsIID &aIID, void **aResult) return NS_OK; } -NS_IMPL_ADDREF(nsMsgFactory) -NS_IMPL_RELEASE(nsMsgFactory) +NS_IMPL_ADDREF(nsXmlEmitterFactory) +NS_IMPL_RELEASE(nsXmlEmitterFactory) nsresult -nsMsgFactory::CreateInstance(nsISupports *aOuter, +nsXmlEmitterFactory::CreateInstance(nsISupports *aOuter, const nsIID &aIID, void **aResult) { @@ -150,7 +149,7 @@ nsMsgFactory::CreateInstance(nsISupports *aOuter, } nsresult -nsMsgFactory::LockFactory(PRBool aLock) +nsXmlEmitterFactory::LockFactory(PRBool aLock) { if (aLock) PR_AtomicIncrement(&g_LockCount); @@ -172,7 +171,7 @@ extern "C" NS_EXPORT nsresult NSGetFactory(nsISupports* aServMgr, if (nsnull == aFactory) return NS_ERROR_NULL_POINTER; - *aFactory = new nsMsgFactory(aClass, aClassName, aProgID, aServMgr); + *aFactory = new nsXmlEmitterFactory(aClass, aClassName, aProgID, aServMgr); if (aFactory) return (*aFactory)->QueryInterface(nsIFactory::GetIID(), (void**)aFactory); @@ -190,51 +189,26 @@ extern "C" NS_EXPORT PRBool NSCanUnload(nsISupports* aServMgr) extern "C" NS_EXPORT nsresult NSRegisterSelf(nsISupports* aServMgr, const char* path) { - nsresult rv; + nsresult rv = NS_OK; - nsCOMPtr servMgr(do_QueryInterface(aServMgr, &rv)); - if (NS_FAILED(rv)) return rv; - - nsIComponentManager* compMgr; - rv = servMgr->GetService(kComponentManagerCID, - nsIComponentManager::GetIID(), - (nsISupports**)&compMgr); + NS_WITH_SERVICE(nsIComponentManager, compMgr, kComponentManagerCID, &rv); if (NS_FAILED(rv)) return rv; rv = compMgr->RegisterComponent(kMimeEmitterCID, "RFC822 Parser", nsnull, path, PR_TRUE, PR_TRUE); - if (NS_FAILED(rv)) goto done; - -#ifdef NS_DEBUG - printf("*** Register XML MIME Emitter...\n"); -#endif - - done: - (void)servMgr->ReleaseService(kComponentManagerCID, compMgr); return rv; } extern "C" NS_EXPORT nsresult NSUnregisterSelf(nsISupports* aServMgr, const char* path) { - nsresult rv; - - nsCOMPtr servMgr(do_QueryInterface(aServMgr, &rv)); - if (NS_FAILED(rv)) return rv; - - nsIComponentManager* compMgr; - rv = servMgr->GetService(kComponentManagerCID, - nsIComponentManager::GetIID(), - (nsISupports**)&compMgr); + nsresult rv = NS_OK; + NS_WITH_SERVICE(nsIComponentManager, compMgr, kComponentManagerCID, &rv); if (NS_FAILED(rv)) return rv; rv = compMgr->UnregisterComponent(kMimeEmitterCID, path); - if (NS_FAILED(rv)) goto done; - - done: - (void)servMgr->ReleaseService(kComponentManagerCID, compMgr); return rv; }