From e082c74dc0fb0cdea0c54477c8a92afb9ee41ef8 Mon Sep 17 00:00:00 2001 From: "warren%netscape.com" Date: Tue, 9 Mar 1999 11:49:41 +0000 Subject: [PATCH] Backed out the nsService template stuff. git-svn-id: svn://10.0.0.236/trunk@23320 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/editor/base/nsEditor.cpp | 39 ++++++-- mozilla/editor/libeditor/base/nsEditor.cpp | 39 ++++++-- .../txmgr/src/nsTransactionManagerFactory.cpp | 31 +++++-- mozilla/intl/locale/src/mac/nsLocaleSHLIB.cpp | 42 ++++++--- mozilla/intl/locale/src/unix/nsLocaleSO.cpp | 1 + .../intl/locale/src/windows/nsLocaleDLL.cpp | 46 +++++++--- mozilla/intl/lwbrk/src/nsLWBrk.cpp | 30 +++++- mozilla/intl/strres/src/nsStringBundle.cpp | 30 ++++-- mozilla/intl/uconv/src/nsUConvDll.cpp | 36 ++++++-- mozilla/intl/uconv/ucvja/nsUCVJADll.cpp | 26 +++++- mozilla/intl/uconv/ucvja2/nsUCVJA2Dll.cpp | 22 ++++- mozilla/intl/uconv/ucvlatin/nsUCvLatinDll.cpp | 26 +++++- .../unicharutil/src/nsUnicharUtilFactory.cpp | 31 ++++++- mozilla/modules/libpref/src/nsPref.cpp | 31 ++++++- mozilla/rdf/build/nsRDFFactory.cpp | 92 +++++++++++-------- mozilla/silentdl/nsSilentDownload.cpp | 29 +++++- mozilla/xpcom/components/nsIServiceManager.h | 2 +- mozilla/xpcom/public/nsIServiceManager.h | 2 +- mozilla/xpcom/tests/dynamic/TestDynamic.cpp | 31 ++++++- 19 files changed, 448 insertions(+), 138 deletions(-) diff --git a/mozilla/editor/base/nsEditor.cpp b/mozilla/editor/base/nsEditor.cpp index da1cd460714..e5b0ce4e030 100644 --- a/mozilla/editor/base/nsEditor.cpp +++ b/mozilla/editor/base/nsEditor.cpp @@ -148,7 +148,7 @@ extern "C" NS_EXPORT nsresult NSGetFactory(nsISupports * aServMgr, *aFactory = nsnull; - nsresult rv = aServMgr->QueryInterface(nsIComponentManager::IID(), (void**)&gCompMgr); + nsresult rv = aServMgr->QueryInterface(nsIComponentManager::GetIID(), (void**)&gCompMgr); if (NS_FAILED(rv)) return rv; if (aClass.Equals(kEditorCID)) { @@ -177,31 +177,52 @@ extern "C" NS_EXPORT nsresult NSRegisterSelf(nsISupports* aServMgr, const char *path) { nsresult rv; - nsService compMgr(aServMgr, kComponentManagerCID, &rv); + nsCOMPtr servMgr(do_QueryInterface(aServMgr, &rv)); if (NS_FAILED(rv)) return rv; + + nsIComponentManager* compMgr; + rv = servMgr->GetService(kComponentManagerCID, + nsIComponentManager::GetIID(), + (nsISupports**)&compMgr); + if (NS_FAILED(rv)) return rv; + rv = compMgr->RegisterComponent(kEditorCID, NULL, NULL, path, PR_TRUE, PR_TRUE); - if (NS_FAILED(rv)) return rv; + if (NS_FAILED(rv)) goto done; rv = compMgr->RegisterComponent(kTextEditorCID, NULL, NULL, path, PR_TRUE, PR_TRUE); - if (NS_FAILED(rv)) return rv; + if (NS_FAILED(rv)) goto done; rv = compMgr->RegisterComponent(kHTMLEditorCID, NULL, NULL, path, PR_TRUE, PR_TRUE); - return result; + + done: + (void)servMgr->ReleaseService(kComponentManagerCID, compMgr); + return rv; } extern "C" NS_EXPORT nsresult NSUnregisterSelf(nsISupports* aServMgr, const char *path) { nsresult rv; - nsService compMgr(aServMgr, kComponentManagerCID, &rv); + + nsCOMPtr servMgr(do_QueryInterface(aServMgr, &rv)); if (NS_FAILED(rv)) return rv; + + nsIComponentManager* compMgr; + rv = servMgr->GetService(kComponentManagerCID, + nsIComponentManager::GetIID(), + (nsISupports**)&compMgr); + if (NS_FAILED(rv)) return rv; + rv = compMgr->UnregisterFactory(kIEditFactoryIID, path); - if (NS_FAILED(rv)) return rv; + if (NS_FAILED(rv)) goto done; rv = compMgr->UnregisterFactory(kITextEditFactoryIID, path); - if (NS_FAILED(rv)) return rv; + if (NS_FAILED(rv)) goto done; rv = compMgr->UnregisterFactory(kIHTMLEditFactoryIID, path); - return result; + + done: + (void)servMgr->ReleaseService(kComponentManagerCID, compMgr); + return rv; } //END EXPORTS diff --git a/mozilla/editor/libeditor/base/nsEditor.cpp b/mozilla/editor/libeditor/base/nsEditor.cpp index da1cd460714..e5b0ce4e030 100644 --- a/mozilla/editor/libeditor/base/nsEditor.cpp +++ b/mozilla/editor/libeditor/base/nsEditor.cpp @@ -148,7 +148,7 @@ extern "C" NS_EXPORT nsresult NSGetFactory(nsISupports * aServMgr, *aFactory = nsnull; - nsresult rv = aServMgr->QueryInterface(nsIComponentManager::IID(), (void**)&gCompMgr); + nsresult rv = aServMgr->QueryInterface(nsIComponentManager::GetIID(), (void**)&gCompMgr); if (NS_FAILED(rv)) return rv; if (aClass.Equals(kEditorCID)) { @@ -177,31 +177,52 @@ extern "C" NS_EXPORT nsresult NSRegisterSelf(nsISupports* aServMgr, const char *path) { nsresult rv; - nsService compMgr(aServMgr, kComponentManagerCID, &rv); + nsCOMPtr servMgr(do_QueryInterface(aServMgr, &rv)); if (NS_FAILED(rv)) return rv; + + nsIComponentManager* compMgr; + rv = servMgr->GetService(kComponentManagerCID, + nsIComponentManager::GetIID(), + (nsISupports**)&compMgr); + if (NS_FAILED(rv)) return rv; + rv = compMgr->RegisterComponent(kEditorCID, NULL, NULL, path, PR_TRUE, PR_TRUE); - if (NS_FAILED(rv)) return rv; + if (NS_FAILED(rv)) goto done; rv = compMgr->RegisterComponent(kTextEditorCID, NULL, NULL, path, PR_TRUE, PR_TRUE); - if (NS_FAILED(rv)) return rv; + if (NS_FAILED(rv)) goto done; rv = compMgr->RegisterComponent(kHTMLEditorCID, NULL, NULL, path, PR_TRUE, PR_TRUE); - return result; + + done: + (void)servMgr->ReleaseService(kComponentManagerCID, compMgr); + return rv; } extern "C" NS_EXPORT nsresult NSUnregisterSelf(nsISupports* aServMgr, const char *path) { nsresult rv; - nsService compMgr(aServMgr, kComponentManagerCID, &rv); + + nsCOMPtr servMgr(do_QueryInterface(aServMgr, &rv)); if (NS_FAILED(rv)) return rv; + + nsIComponentManager* compMgr; + rv = servMgr->GetService(kComponentManagerCID, + nsIComponentManager::GetIID(), + (nsISupports**)&compMgr); + if (NS_FAILED(rv)) return rv; + rv = compMgr->UnregisterFactory(kIEditFactoryIID, path); - if (NS_FAILED(rv)) return rv; + if (NS_FAILED(rv)) goto done; rv = compMgr->UnregisterFactory(kITextEditFactoryIID, path); - if (NS_FAILED(rv)) return rv; + if (NS_FAILED(rv)) goto done; rv = compMgr->UnregisterFactory(kIHTMLEditFactoryIID, path); - return result; + + done: + (void)servMgr->ReleaseService(kComponentManagerCID, compMgr); + return rv; } //END EXPORTS diff --git a/mozilla/editor/txmgr/src/nsTransactionManagerFactory.cpp b/mozilla/editor/txmgr/src/nsTransactionManagerFactory.cpp index 2f1e292c4cd..c3ec6fdc943 100644 --- a/mozilla/editor/txmgr/src/nsTransactionManagerFactory.cpp +++ b/mozilla/editor/txmgr/src/nsTransactionManagerFactory.cpp @@ -24,6 +24,7 @@ #include "nsTransactionManagerCID.h" #include "nsTransactionManager.h" +#include "nsCOMPtr.h" static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID); static NS_DEFINE_IID(kIFactoryIID, NS_IFACTORY_IID); @@ -138,21 +139,39 @@ extern "C" NS_EXPORT nsresult NSRegisterSelf(nsISupports* aServMgr, const char * { nsresult rv; - nsService compMgr(aServMgr, kComponentManagerCID, &rv); + nsCOMPtr servMgr(do_QueryInterface(aServMgr, &rv)); if (NS_FAILED(rv)) return rv; - return compMgr->RegisterComponent(kCTransactionManagerFactoryCID, - NULL, NULL, path, - PR_TRUE, PR_TRUE); + nsIComponentManager* compMgr; + rv = servMgr->GetService(kComponentManagerCID, + nsIComponentManager::GetIID(), + (nsISupports**)&compMgr); + if (NS_FAILED(rv)) return rv; + + rv = compMgr->RegisterComponent(kCTransactionManagerFactoryCID, + NULL, NULL, path, + PR_TRUE, PR_TRUE); + + (void)servMgr->ReleaseService(kComponentManagerCID, compMgr); + return rv; } extern "C" NS_EXPORT nsresult NSUnregisterSelf(nsISupports* aServMgr, const char *path) { nsresult rv; - nsService compMgr(aServMgr, kComponentManagerCID, &rv); + nsCOMPtr servMgr(do_QueryInterface(aServMgr, &rv)); if (NS_FAILED(rv)) return rv; - return compMgr->UnregisterFactory(kCTransactionManagerFactoryCID, path); + nsIComponentManager* compMgr; + rv = servMgr->GetService(kComponentManagerCID, + nsIComponentManager::GetIID(), + (nsISupports**)&compMgr); + if (NS_FAILED(rv)) return rv; + + rv = compMgr->UnregisterFactory(kCTransactionManagerFactoryCID, path); + + (void)servMgr->ReleaseService(kComponentManagerCID, compMgr); + return rv; } diff --git a/mozilla/intl/locale/src/mac/nsLocaleSHLIB.cpp b/mozilla/intl/locale/src/mac/nsLocaleSHLIB.cpp index 0971b84350d..8f5209c2abd 100644 --- a/mozilla/intl/locale/src/mac/nsLocaleSHLIB.cpp +++ b/mozilla/intl/locale/src/mac/nsLocaleSHLIB.cpp @@ -107,7 +107,14 @@ extern "C" NS_EXPORT nsresult NSGetFactory(nsISupports* serviceMgr, extern "C" NS_EXPORT nsresult NSRegisterSelf(nsISupports* aServMgr, const char * path) { nsresult rv; - nsService compMgr(aServMgr, kComponentManagerCID, &rv); + + nsCOMPtr servMgr(do_QueryInterface(aServMgr, &rv)); + if (NS_FAILED(rv)) return rv; + + nsIComponentManager* compMgr; + rv = servMgr->GetService(kComponentManagerCID, + nsIComponentManager::GetIID(), + (nsISupports**)&compMgr); if (NS_FAILED(rv)) return rv; // @@ -115,50 +122,61 @@ extern "C" NS_EXPORT nsresult NSRegisterSelf(nsISupports* aServMgr, const char * // rv = compMgr->RegisterComponent(kLocaleFactoryCID,NULL,NULL,path,PR_TRUE,PR_TRUE); NS_ASSERTION(rv==NS_OK,"nsLocaleTest: RegisterFactory failed."); - if (rv!=NS_OK) return rv; + if (rv!=NS_OK) goto done; // // register the collation factory // rv = compMgr->RegisterComponent(kCollationFactoryCID, NULL, NULL, path, PR_TRUE, PR_TRUE); NS_ASSERTION(rv==NS_OK,"nsLocaleTest: Register CollationFactory failed."); - if (NS_FAILED(rv)) return rv; + if (NS_FAILED(rv)) goto done; // // register the collation interface // rv = compMgr->RegisterComponent(kCollationCID, NULL, NULL, path, PR_TRUE, PR_TRUE); NS_ASSERTION(rv==NS_OK,"nsLocaleTest: Register Collation failed."); - if (NS_FAILED(rv)) return rv; + if (NS_FAILED(rv)) goto done; // // register the date time formatter // rv = compMgr->RegisterComponent(kDateTimeFormatCID, NULL, NULL, path, PR_TRUE, PR_TRUE); NS_ASSERTION(rv==NS_OK,"nsLocaleTest: Register DateTimeFormat failed."); - if (NS_FAILED(rv)) return rv; + if (NS_FAILED(rv)) goto done; - return NS_OK; + done: + (void)servMgr->ReleaseService(kComponentManagerCID, compMgr); + return rv; } extern "C" NS_EXPORT nsresult NSUnregisterSelf(nsISupports* aServMgr, const char * path) { nsresult rv; - nsService compMgr(aServMgr, kComponentManagerCID, &rv); + + nsCOMPtr servMgr(do_QueryInterface(aServMgr, &rv)); + if (NS_FAILED(rv)) return rv; + + nsIComponentManager* compMgr; + rv = servMgr->GetService(kComponentManagerCID, + nsIComponentManager::GetIID(), + (nsISupports**)&compMgr); if (NS_FAILED(rv)) return rv; rv = compMgr->UnregisterFactory(kLocaleFactoryCID, path); - if (rv!=NS_OK) return rv; + if (rv!=NS_OK) goto done; rv = compMgr->UnregisterFactory(kCollationFactoryCID, path); - if (rv!=NS_OK) return rv; + if (rv!=NS_OK) goto done; rv = compMgr->UnregisterFactory(kCollationCID, path); - if (rv!=NS_OK) return rv; + if (rv!=NS_OK) goto done; rv = compMgr->UnregisterFactory(kDateTimeFormatCID, path); - if (rv!=NS_OK) return rv; + if (rv!=NS_OK) goto done; - return NS_OK; + done: + (void)servMgr->ReleaseService(kComponentManagerCID, compMgr); + return rv; } diff --git a/mozilla/intl/locale/src/unix/nsLocaleSO.cpp b/mozilla/intl/locale/src/unix/nsLocaleSO.cpp index 750fcb7a2a9..df8664835b3 100644 --- a/mozilla/intl/locale/src/unix/nsLocaleSO.cpp +++ b/mozilla/intl/locale/src/unix/nsLocaleSO.cpp @@ -31,6 +31,7 @@ #include "nsCollationCID.h" #include "nsLocaleSO.h" #include "nsIServiceManager.h" +#include "nsCOMPtr.h" static NS_DEFINE_CID(kComponentManagerCID, NS_COMPONENTMANAGER_CID); diff --git a/mozilla/intl/locale/src/windows/nsLocaleDLL.cpp b/mozilla/intl/locale/src/windows/nsLocaleDLL.cpp index db59986bc36..deb14e5d642 100644 --- a/mozilla/intl/locale/src/windows/nsLocaleDLL.cpp +++ b/mozilla/intl/locale/src/windows/nsLocaleDLL.cpp @@ -121,7 +121,14 @@ extern "C" NS_EXPORT nsresult NSGetFactory(nsISupports* serviceMgr, extern "C" NS_EXPORT nsresult NSRegisterSelf(nsISupports* aServMgr, const char * path) { nsresult rv; - nsService compMgr(aServMgr, kComponentManagerCID, &rv); + + nsCOMPtr servMgr(do_QueryInterface(aServMgr, &rv)); + if (NS_FAILED(rv)) return rv; + + nsIComponentManager* compMgr; + rv = servMgr->GetService(kComponentManagerCID, + nsIComponentManager::GetIID(), + (nsISupports**)&compMgr); if (NS_FAILED(rv)) return rv; // @@ -129,59 +136,70 @@ extern "C" NS_EXPORT nsresult NSRegisterSelf(nsISupports* aServMgr, const char * // rv = compMgr->RegisterComponent(kLocaleFactoryCID,NULL,NULL,path,PR_TRUE,PR_TRUE); NS_ASSERTION(rv==NS_OK,"nsLocaleTest: RegisterFactory failed."); - if (rv!=NS_OK) return rv; + if (rv!=NS_OK) goto done; // // register the windows specific factory // rv = compMgr->RegisterComponent(kWin32LocaleFactoryCID,NULL,NULL,path,PR_TRUE,PR_TRUE); NS_ASSERTION(rv==NS_OK,"nsLocaleTest: Register nsIWin32LocaleFactory failed."); - if (rv!=NS_OK) return rv; + if (rv!=NS_OK) goto done; // // register the collation factory // rv = compMgr->RegisterComponent(kCollationFactoryCID, NULL, NULL, path, PR_TRUE, PR_TRUE); NS_ASSERTION(rv==NS_OK,"nsLocaleTest: Register CollationFactory failed."); - if (NS_FAILED(rv)) return rv; + if (NS_FAILED(rv)) goto done; // // register the collation interface // rv = compMgr->RegisterComponent(kCollationCID, NULL, NULL, path, PR_TRUE, PR_TRUE); NS_ASSERTION(rv==NS_OK,"nsLocaleTest: Register Collation failed."); - if (NS_FAILED(rv)) return rv; + if (NS_FAILED(rv)) goto done; // // register the date time formatter // rv = compMgr->RegisterComponent(kDateTimeFormatCID, NULL, NULL, path, PR_TRUE, PR_TRUE); NS_ASSERTION(rv==NS_OK,"nsLocaleTest: Register DateTimeFormat failed."); - if (NS_FAILED(rv)) return rv; + if (NS_FAILED(rv)) goto done; - return NS_OK; + done: + (void)servMgr->ReleaseService(kComponentManagerCID, compMgr); + return rv; } extern "C" NS_EXPORT nsresult NSUnregisterSelf(nsISupports* aServMgr, const char * path) { nsresult rv; - nsService compMgr(aServMgr, kComponentManagerCID, &rv); + + nsCOMPtr servMgr(do_QueryInterface(aServMgr, &rv)); + if (NS_FAILED(rv)) return rv; + + nsIComponentManager* compMgr; + rv = servMgr->GetService(kComponentManagerCID, + nsIComponentManager::GetIID(), + (nsISupports**)&compMgr); if (NS_FAILED(rv)) return rv; rv = compMgr->UnregisterFactory(kLocaleFactoryCID, path); - if (rv!=NS_OK) return rv; + if (rv!=NS_OK) goto done; rv = compMgr->UnregisterFactory(kWin32LocaleFactoryCID, path); - if (rv!=NS_OK) return rv; + if (rv!=NS_OK) goto done; rv = compMgr->UnregisterFactory(kCollationFactoryCID, path); - if (rv!=NS_OK) return rv; + if (rv!=NS_OK) goto done; rv = compMgr->UnregisterFactory(kCollationCID, path); - if (rv!=NS_OK) return rv; + if (rv!=NS_OK) goto done; rv = compMgr->UnregisterFactory(kDateTimeFormatCID, path); - if (rv!=NS_OK) return rv; + if (rv!=NS_OK) goto done; - return NS_OK; + done: + (void)servMgr->ReleaseService(kComponentManagerCID, compMgr); + return rv; } diff --git a/mozilla/intl/lwbrk/src/nsLWBrk.cpp b/mozilla/intl/lwbrk/src/nsLWBrk.cpp index b0c742e2f6d..4045cd39a90 100644 --- a/mozilla/intl/lwbrk/src/nsLWBrk.cpp +++ b/mozilla/intl/lwbrk/src/nsLWBrk.cpp @@ -110,18 +110,38 @@ extern "C" NS_EXPORT PRBool NSCanUnload(nsISupports* aServMgr) { extern "C" NS_EXPORT nsresult NSRegisterSelf(nsISupports* aServMgr, const char *path) { nsresult rv; - nsService compMgr(aServMgr, kComponentManagerCID, &rv); + + nsCOMPtr servMgr(do_QueryInterface(aServMgr, &rv)); if (NS_FAILED(rv)) return rv; - return compMgr->RegisterComponent(kLWBrkCID, NULL, NULL, path, - PR_TRUE, PR_TRUE); + nsIComponentManager* compMgr; + rv = servMgr->GetService(kComponentManagerCID, + nsIComponentManager::GetIID(), + (nsISupports**)&compMgr); + if (NS_FAILED(rv)) return rv; + + rv = compMgr->RegisterComponent(kLWBrkCID, NULL, NULL, path, + PR_TRUE, PR_TRUE); + + (void)servMgr->ReleaseService(kComponentManagerCID, compMgr); + return rv; } extern "C" NS_EXPORT nsresult NSUnregisterSelf(nsISupports* aServMgr, const char *path) { nsresult rv; - nsService compMgr(aServMgr, kComponentManagerCID, &rv); + + nsCOMPtr servMgr(do_QueryInterface(aServMgr, &rv)); if (NS_FAILED(rv)) return rv; - return compMgr->UnregisterFactory(kLWBrkCID, path); + nsIComponentManager* compMgr; + rv = servMgr->GetService(kComponentManagerCID, + nsIComponentManager::GetIID(), + (nsISupports**)&compMgr); + if (NS_FAILED(rv)) return rv; + + rv = compMgr->UnregisterFactory(kLWBrkCID, path); + + (void)servMgr->ReleaseService(kComponentManagerCID, compMgr); + return rv; } diff --git a/mozilla/intl/strres/src/nsStringBundle.cpp b/mozilla/intl/strres/src/nsStringBundle.cpp index 2bd036fce1c..3fb30b62a42 100644 --- a/mozilla/intl/strres/src/nsStringBundle.cpp +++ b/mozilla/intl/strres/src/nsStringBundle.cpp @@ -221,15 +221,22 @@ extern "C" NS_EXPORT nsresult NSRegisterSelf(nsISupports* aServMgr, const char* path) { nsresult rv; - nsService compMgr(aServMgr, kComponentManagerCID, &rv); + + nsCOMPtr servMgr(do_QueryInterface(aServMgr, &rv)); + if (NS_FAILED(rv)) return rv; + + nsIComponentManager* compMgr; + rv = servMgr->GetService(kComponentManagerCID, + nsIComponentManager::GetIID(), + (nsISupports**)&compMgr); if (NS_FAILED(rv)) return rv; rv = compMgr->RegisterComponent(kStringBundleServiceCID, NULL, NULL, path, PR_TRUE, PR_TRUE); - if (NS_FAILED(rv)) { - return rv; - } + if (NS_FAILED(rv)) goto done; + done: + (void)servMgr->ReleaseService(kComponentManagerCID, compMgr); return rv; } @@ -237,14 +244,21 @@ extern "C" NS_EXPORT nsresult NSUnregisterSelf(nsISupports* aServMgr, const char* path) { nsresult rv; - nsService compMgr(aServMgr, kComponentManagerCID, &rv); + + nsCOMPtr servMgr(do_QueryInterface(aServMgr, &rv)); + if (NS_FAILED(rv)) return rv; + + nsIComponentManager* compMgr; + rv = servMgr->GetService(kComponentManagerCID, + nsIComponentManager::GetIID(), + (nsISupports**)&compMgr); if (NS_FAILED(rv)) return rv; rv = compMgr->UnregisterFactory(kStringBundleServiceCID, path); - if (NS_FAILED(rv)) { - return rv; - } + if (NS_FAILED(rv)) goto done; + done: + (void)servMgr->ReleaseService(kComponentManagerCID, compMgr); return rv; } diff --git a/mozilla/intl/uconv/src/nsUConvDll.cpp b/mozilla/intl/uconv/src/nsUConvDll.cpp index b90e1b3524e..6991c37d46b 100644 --- a/mozilla/intl/uconv/src/nsUConvDll.cpp +++ b/mozilla/intl/uconv/src/nsUConvDll.cpp @@ -109,41 +109,61 @@ extern "C" NS_EXPORT nsresult NSGetFactory(nsISupports* aServMgr, extern "C" NS_EXPORT nsresult NSRegisterSelf(nsISupports* aServMgr, const char * path) { nsresult rv; - nsService compMgr(aServMgr, kComponentManagerCID, &rv); + + nsCOMPtr servMgr(do_QueryInterface(aServMgr, &rv)); + if (NS_FAILED(rv)) return rv; + + nsIComponentManager* compMgr; + rv = servMgr->GetService(kComponentManagerCID, + nsIComponentManager::GetIID(), + (nsISupports**)&compMgr); if (NS_FAILED(rv)) return rv; rv = compMgr->RegisterComponent(kUnicodeEncodeHelperCID, NULL, NULL, path, PR_TRUE, PR_TRUE); - if(NS_FAILED(rv) && (NS_ERROR_FACTORY_EXISTS != rv)) return rv; + if(NS_FAILED(rv) && (NS_ERROR_FACTORY_EXISTS != rv)) goto done; rv = compMgr->RegisterComponent(kCharsetAliasCID, NULL, NULL, path, PR_TRUE, PR_TRUE); - if(NS_FAILED(rv) && (NS_ERROR_FACTORY_EXISTS != rv)) return rv; + if(NS_FAILED(rv) && (NS_ERROR_FACTORY_EXISTS != rv)) goto done; rv = compMgr->RegisterComponent(kCharsetConverterManagerCID, NULL, NULL, path, PR_TRUE, PR_TRUE); - if(NS_FAILED(rv) && (NS_ERROR_FACTORY_EXISTS != rv)) return rv; + if(NS_FAILED(rv) && (NS_ERROR_FACTORY_EXISTS != rv)) goto done; rv = compMgr->RegisterComponent(kPlatformCharsetCID, NULL, NULL, path, PR_TRUE, PR_TRUE); + + done: + (void)servMgr->ReleaseService(kComponentManagerCID, compMgr); return rv; } extern "C" NS_EXPORT nsresult NSUnregisterSelf(nsISupports* aServMgr, const char * path) { nsresult rv; - nsService compMgr(aServMgr, kComponentManagerCID, &rv); + + nsCOMPtr servMgr(do_QueryInterface(aServMgr, &rv)); + if (NS_FAILED(rv)) return rv; + + nsIComponentManager* compMgr; + rv = servMgr->GetService(kComponentManagerCID, + nsIComponentManager::GetIID(), + (nsISupports**)&compMgr); if (NS_FAILED(rv)) return rv; rv = compMgr->UnregisterFactory(kUnicodeEncodeHelperCID, path); - if(NS_FAILED(rv)) return rv; + if(NS_FAILED(rv)) goto done; rv = compMgr->UnregisterFactory(kCharsetAliasCID, path); - if(NS_FAILED(rv)) return rv; + if(NS_FAILED(rv)) goto done; rv = compMgr->UnregisterFactory(kCharsetConverterManagerCID, path); - if(NS_FAILED(rv)) return rv; + if(NS_FAILED(rv)) goto done; rv = compMgr->UnregisterFactory(kPlatformCharsetCID, path); + + done: + (void)servMgr->ReleaseService(kComponentManagerCID, compMgr); return rv; } diff --git a/mozilla/intl/uconv/ucvja/nsUCVJADll.cpp b/mozilla/intl/uconv/ucvja/nsUCVJADll.cpp index 401297edd7a..6e4b94fdbcd 100644 --- a/mozilla/intl/uconv/ucvja/nsUCVJADll.cpp +++ b/mozilla/intl/uconv/ucvja/nsUCVJADll.cpp @@ -150,29 +150,47 @@ extern "C" NS_EXPORT nsresult NSGetFactory(nsISupports* aServMgr, extern "C" NS_EXPORT nsresult NSRegisterSelf(nsISupports* aServMgr, const char * path) { nsresult rv; - nsService compMgr(aServMgr, kComponentManagerCID, &rv); + + nsCOMPtr servMgr(do_QueryInterface(aServMgr, &rv)); + if (NS_FAILED(rv)) return rv; + + nsIComponentManager* compMgr; + rv = servMgr->GetService(kComponentManagerCID, + nsIComponentManager::GetIID(), + (nsISupports**)&compMgr); if (NS_FAILED(rv)) return rv; for (PRUint32 i=0; iRegisterComponent(*(g_FactoryData[i].mCID), NULL, NULL, path, PR_TRUE, PR_TRUE); - if(NS_FAILED(rv) && (NS_ERROR_FACTORY_EXISTS != rv)) return rv; + if(NS_FAILED(rv) && (NS_ERROR_FACTORY_EXISTS != rv)) goto done; } + done: + (void)servMgr->ReleaseService(kComponentManagerCID, compMgr); return rv; } extern "C" NS_EXPORT nsresult NSUnregisterSelf(nsISupports* aServMgr, const char * path) { nsresult rv; - nsService compMgr(aServMgr, kComponentManagerCID, &rv); + + nsCOMPtr servMgr(do_QueryInterface(aServMgr, &rv)); + if (NS_FAILED(rv)) return rv; + + nsIComponentManager* compMgr; + rv = servMgr->GetService(kComponentManagerCID, + nsIComponentManager::GetIID(), + (nsISupports**)&compMgr); if (NS_FAILED(rv)) return rv; for (PRUint32 i=0; iUnregisterFactory(*(g_FactoryData[i].mCID), path); - if(NS_FAILED(rv)) return rv; + if(NS_FAILED(rv)) goto done; } + done: + (void)servMgr->ReleaseService(kComponentManagerCID, compMgr); return rv; } diff --git a/mozilla/intl/uconv/ucvja2/nsUCVJA2Dll.cpp b/mozilla/intl/uconv/ucvja2/nsUCVJA2Dll.cpp index 987b22b5eb6..82f7e5339cc 100644 --- a/mozilla/intl/uconv/ucvja2/nsUCVJA2Dll.cpp +++ b/mozilla/intl/uconv/ucvja2/nsUCVJA2Dll.cpp @@ -169,7 +169,14 @@ extern "C" NS_EXPORT nsresult NSGetFactory(nsISupports* aServMgr, extern "C" NS_EXPORT nsresult NSRegisterSelf(nsISupports* aServMgr, const char * path) { nsresult rv; - nsService compMgr(aServMgr, kComponentManagerCID, &rv); + + nsCOMPtr servMgr(do_QueryInterface(aServMgr, &rv)); + if (NS_FAILED(rv)) return rv; + + nsIComponentManager* compMgr; + rv = servMgr->GetService(kComponentManagerCID, + nsIComponentManager::GetIID(), + (nsISupports**)&compMgr); if (NS_FAILED(rv)) return rv; for (PRUint32 i=0; iReleaseService(kComponentManagerCID, compMgr); return rv; } extern "C" NS_EXPORT nsresult NSUnregisterSelf(nsISupports* aServMgr, const char * path) { nsresult rv; - nsService compMgr(aServMgr, kComponentManagerCID, &rv); + + nsCOMPtr servMgr(do_QueryInterface(aServMgr, &rv)); + if (NS_FAILED(rv)) return rv; + + nsIComponentManager* compMgr; + rv = servMgr->GetService(kComponentManagerCID, + nsIComponentManager::GetIID(), + (nsISupports**)&compMgr); if (NS_FAILED(rv)) return rv; for (PRUint32 i=0; iReleaseService(kComponentManagerCID, compMgr); return rv; } diff --git a/mozilla/intl/uconv/ucvlatin/nsUCvLatinDll.cpp b/mozilla/intl/uconv/ucvlatin/nsUCvLatinDll.cpp index 89844d6dae3..10cd04d651a 100644 --- a/mozilla/intl/uconv/ucvlatin/nsUCvLatinDll.cpp +++ b/mozilla/intl/uconv/ucvlatin/nsUCvLatinDll.cpp @@ -173,29 +173,47 @@ extern "C" NS_EXPORT nsresult NSGetFactory(nsISupports* aServMgr, extern "C" NS_EXPORT nsresult NSRegisterSelf(nsISupports* aServMgr, const char * path) { nsresult rv; - nsService compMgr(aServMgr, kComponentManagerCID, &rv); + + nsCOMPtr servMgr(do_QueryInterface(aServMgr, &rv)); + if (NS_FAILED(rv)) return rv; + + nsIComponentManager* compMgr; + rv = servMgr->GetService(kComponentManagerCID, + nsIComponentManager::GetIID(), + (nsISupports**)&compMgr); if (NS_FAILED(rv)) return rv; for (PRUint32 i=0; iRegisterComponent(*(g_FactoryData[i].mCID), NULL, NULL, path, PR_TRUE, PR_TRUE); - if(NS_FAILED(rv) && (NS_ERROR_FACTORY_EXISTS != rv)) return rv; + if(NS_FAILED(rv) && (NS_ERROR_FACTORY_EXISTS != rv)) goto done; } + done: + (void)servMgr->ReleaseService(kComponentManagerCID, compMgr); return rv; } extern "C" NS_EXPORT nsresult NSUnregisterSelf(nsISupports* aServMgr, const char * path) { nsresult rv; - nsService compMgr(aServMgr, kComponentManagerCID, &rv); + + nsCOMPtr servMgr(do_QueryInterface(aServMgr, &rv)); + if (NS_FAILED(rv)) return rv; + + nsIComponentManager* compMgr; + rv = servMgr->GetService(kComponentManagerCID, + nsIComponentManager::GetIID(), + (nsISupports**)&compMgr); if (NS_FAILED(rv)) return rv; for (PRUint32 i=0; iUnregisterFactory(*(g_FactoryData[i].mCID), path); - if(NS_FAILED(rv)) return rv; + if(NS_FAILED(rv)) goto done; } + done: + (void)servMgr->ReleaseService(kComponentManagerCID, compMgr); return rv; } diff --git a/mozilla/intl/unicharutil/src/nsUnicharUtilFactory.cpp b/mozilla/intl/unicharutil/src/nsUnicharUtilFactory.cpp index 90476492033..575be7bf4b7 100644 --- a/mozilla/intl/unicharutil/src/nsUnicharUtilFactory.cpp +++ b/mozilla/intl/unicharutil/src/nsUnicharUtilFactory.cpp @@ -25,6 +25,7 @@ #include "nsICaseConversion.h" #include "nsCaseConversionImp2.h" #include "nsIServiceManager.h" +#include "nsCOMPtr.h" static NS_DEFINE_CID(kComponentManagerCID, NS_COMPONENTMANAGER_CID); @@ -111,18 +112,38 @@ extern "C" NS_EXPORT PRBool NSCanUnload(nsISupports* aServMgr) { extern "C" NS_EXPORT nsresult NSRegisterSelf(nsISupports* aServMgr, const char *path) { nsresult rv; - nsService compMgr(aServMgr, kComponentManagerCID, &rv); + + nsCOMPtr servMgr(do_QueryInterface(aServMgr, &rv)); if (NS_FAILED(rv)) return rv; - return compMgr->RegisterComponent(kUnicharUtilCID, NULL, NULL, path, - PR_TRUE, PR_TRUE); + nsIComponentManager* compMgr; + rv = servMgr->GetService(kComponentManagerCID, + nsIComponentManager::GetIID(), + (nsISupports**)&compMgr); + if (NS_FAILED(rv)) return rv; + + rv = compMgr->RegisterComponent(kUnicharUtilCID, NULL, NULL, path, + PR_TRUE, PR_TRUE); + + (void)servMgr->ReleaseService(kComponentManagerCID, compMgr); + return rv; } extern "C" NS_EXPORT nsresult NSUnregisterSelf(nsISupports* aServMgr, const char *path) { nsresult rv; - nsService compMgr(aServMgr, kComponentManagerCID, &rv); + + nsCOMPtr servMgr(do_QueryInterface(aServMgr, &rv)); if (NS_FAILED(rv)) return rv; - return compMgr->UnregisterFactory(kUnicharUtilCID, path); + nsIComponentManager* compMgr; + rv = servMgr->GetService(kComponentManagerCID, + nsIComponentManager::GetIID(), + (nsISupports**)&compMgr); + if (NS_FAILED(rv)) return rv; + + rv = compMgr->UnregisterFactory(kUnicharUtilCID, path); + + (void)servMgr->ReleaseService(kComponentManagerCID, compMgr); + return rv; } diff --git a/mozilla/modules/libpref/src/nsPref.cpp b/mozilla/modules/libpref/src/nsPref.cpp index daa3b63c648..f286aca50b3 100644 --- a/mozilla/modules/libpref/src/nsPref.cpp +++ b/mozilla/modules/libpref/src/nsPref.cpp @@ -27,6 +27,7 @@ #include "nsIStreamListener.h" #endif #include "nsIServiceManager.h" +#include "nsCOMPtr.h" static NS_DEFINE_CID(kComponentManagerCID, NS_COMPONENTMANAGER_CID); @@ -616,19 +617,39 @@ extern "C" NS_EXPORT PRBool NSCanUnload(nsISupports* serviceMgr) extern "C" NS_EXPORT nsresult NSRegisterSelf(nsISupports* aServMgr, const char *path) { nsresult rv; - nsService compMgr(aServMgr, kComponentManagerCID, &rv); + + nsCOMPtr servMgr(do_QueryInterface(aServMgr, &rv)); if (NS_FAILED(rv)) return rv; - return compMgr->RegisterComponent(kPrefCID, NULL, NULL, path, - PR_TRUE, PR_TRUE); + nsIComponentManager* compMgr; + rv = servMgr->GetService(kComponentManagerCID, + nsIComponentManager::GetIID(), + (nsISupports**)&compMgr); + if (NS_FAILED(rv)) return rv; + + rv = compMgr->RegisterComponent(kPrefCID, NULL, NULL, path, + PR_TRUE, PR_TRUE); + + (void)servMgr->ReleaseService(kComponentManagerCID, compMgr); + return rv; } extern "C" NS_EXPORT nsresult NSUnregisterSelf(nsISupports* aServMgr, const char *path) { nsresult rv; - nsService compMgr(aServMgr, kComponentManagerCID, &rv); + + nsCOMPtr servMgr(do_QueryInterface(aServMgr, &rv)); if (NS_FAILED(rv)) return rv; - return compMgr->UnregisterFactory(kPrefCID, path); + nsIComponentManager* compMgr; + rv = servMgr->GetService(kComponentManagerCID, + nsIComponentManager::GetIID(), + (nsISupports**)&compMgr); + if (NS_FAILED(rv)) return rv; + + rv = compMgr->UnregisterFactory(kPrefCID, path); + + (void)servMgr->ReleaseService(kComponentManagerCID, compMgr); + return rv; } diff --git a/mozilla/rdf/build/nsRDFFactory.cpp b/mozilla/rdf/build/nsRDFFactory.cpp index 6f1c51a7807..a9a5623370d 100644 --- a/mozilla/rdf/build/nsRDFFactory.cpp +++ b/mozilla/rdf/build/nsRDFFactory.cpp @@ -39,6 +39,7 @@ #include "rdf.h" #include "nsIXULSortService.h" #include "nsIServiceManager.h" +#include "nsCOMPtr.h" static NS_DEFINE_CID(kComponentManagerCID, NS_COMPONENTMANAGER_CID); static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID); @@ -271,7 +272,14 @@ extern "C" PR_IMPLEMENT(nsresult) NSRegisterSelf(nsISupports* aServMgr , const char* aPath) { nsresult rv; - nsService compMgr(aServMgr, kComponentManagerCID, &rv); + + nsCOMPtr servMgr(do_QueryInterface(aServMgr, &rv)); + if (NS_FAILED(rv)) return rv; + + nsIComponentManager* compMgr; + rv = servMgr->GetService(kComponentManagerCID, + nsIComponentManager::GetIID(), + (nsISupports**)&compMgr); if (NS_FAILED(rv)) return rv; // register our build-in datasources: @@ -279,95 +287,97 @@ NSRegisterSelf(nsISupports* aServMgr , const char* aPath) "Bookmarks", NS_RDF_DATASOURCE_PROGID_PREFIX "bookmarks", aPath, PR_TRUE, PR_TRUE); - if (NS_FAILED(rv)) return rv; + if (NS_FAILED(rv)) goto done; rv = compMgr->RegisterComponent(kRDFCompositeDataSourceCID, "RDF Composite Data Source", NS_RDF_DATASOURCE_PROGID_PREFIX "composite-datasource", aPath, PR_TRUE, PR_TRUE); - if (NS_FAILED(rv)) return rv; + if (NS_FAILED(rv)) goto done; rv = compMgr->RegisterComponent(kRDFFileSystemDataSourceCID, "RDF File System Data Source", NS_RDF_DATASOURCE_PROGID_PREFIX "files", aPath, PR_TRUE, PR_TRUE); - if (NS_FAILED(rv)) return rv; + if (NS_FAILED(rv)) goto done; rv = compMgr->RegisterComponent(kRDFHistoryDataSourceCID, "RDF History Data Source", NS_RDF_DATASOURCE_PROGID_PREFIX "history", aPath, PR_TRUE, PR_TRUE); - if (NS_FAILED(rv)) return rv; + if (NS_FAILED(rv)) goto done; rv = compMgr->RegisterComponent(kRDFInMemoryDataSourceCID, "RDF In-Memory Data Source", NS_RDF_DATASOURCE_PROGID_PREFIX "in-memory-datasource", aPath, PR_TRUE, PR_TRUE); - if (NS_FAILED(rv)) return rv; + if (NS_FAILED(rv)) goto done; rv = compMgr->RegisterComponent(kRDFXMLDataSourceCID, "RDF XML Data Source", NS_RDF_DATASOURCE_PROGID_PREFIX "xml-datasource", aPath, PR_TRUE, PR_TRUE); - if (NS_FAILED(rv)) return rv; + if (NS_FAILED(rv)) goto done; rv = compMgr->RegisterComponent(kXULDataSourceCID, "XUL Data Source", NS_RDF_DATASOURCE_PROGID_PREFIX "xul-datasource", aPath, PR_TRUE, PR_TRUE); - if (NS_FAILED(rv)) return rv; + if (NS_FAILED(rv)) goto done; // register our built-in resource factories: rv = compMgr->RegisterComponent(kRDFDefaultResourceCID, "RDF Default Resource Factory", NS_RDF_RESOURCE_FACTORY_PROGID, // default resource factory has no name= part aPath, PR_TRUE, PR_TRUE); - if (NS_FAILED(rv)) return rv; + if (NS_FAILED(rv)) goto done; // register all the other rdf components: rv = compMgr->RegisterComponent(kRDFContentSinkCID, "RDF Content Sink", NS_RDF_PROGID "|content-sink", aPath, PR_TRUE, PR_TRUE); - if (NS_FAILED(rv)) return rv; + if (NS_FAILED(rv)) goto done; rv = compMgr->RegisterComponent(kRDFHTMLBuilderCID, "RDF HTML Builder", NS_RDF_PROGID "|html-builder", aPath, PR_TRUE, PR_TRUE); - if (NS_FAILED(rv)) return rv; + if (NS_FAILED(rv)) goto done; rv = compMgr->RegisterComponent(kRDFServiceCID, "RDF Service", NS_RDF_PROGID "|rdf-service", aPath, PR_TRUE, PR_TRUE); - if (NS_FAILED(rv)) return rv; + if (NS_FAILED(rv)) goto done; rv = compMgr->RegisterComponent(kXULSortServiceCID, "XUL Sort Service", NS_RDF_PROGID "|xul-sort-service", aPath, PR_TRUE, PR_TRUE); - if (NS_FAILED(rv)) return rv; + if (NS_FAILED(rv)) goto done; rv = compMgr->RegisterComponent(kRDFTreeBuilderCID, "RDF Tree Builder", NS_RDF_PROGID "|tree-builder", aPath, PR_TRUE, PR_TRUE); - if (NS_FAILED(rv)) return rv; + if (NS_FAILED(rv)) goto done; rv = compMgr->RegisterComponent(kRDFMenuBuilderCID, "RDF Menu Builder", NS_RDF_PROGID "|menu-builder", aPath, PR_TRUE, PR_TRUE); - if (NS_FAILED(rv)) return rv; + if (NS_FAILED(rv)) goto done; rv = compMgr->RegisterComponent(kRDFToolbarBuilderCID, "RDF Toolbar Builder", NS_RDF_PROGID "|toolbar-builder", aPath, PR_TRUE, PR_TRUE); - if (NS_FAILED(rv)) return rv; + if (NS_FAILED(rv)) goto done; rv = compMgr->RegisterComponent(kRDFXULBuilderCID, "RDF XUL Builder", NS_RDF_PROGID "|xul-builder", aPath, PR_TRUE, PR_TRUE); - if (NS_FAILED(rv)) return rv; + if (NS_FAILED(rv)) goto done; rv = compMgr->RegisterComponent(kXULContentSinkCID, "XUL Content Sink", NS_RDF_PROGID "|xul-content-sink", aPath, PR_TRUE, PR_TRUE); - if (NS_FAILED(rv)) return rv; + if (NS_FAILED(rv)) goto done; rv = compMgr->RegisterComponent(kXULDocumentCID, "XUL Document", NS_RDF_PROGID "|xul-document", aPath, PR_TRUE, PR_TRUE); + done: + (void)servMgr->ReleaseService(kComponentManagerCID, compMgr); return rv; } @@ -376,46 +386,56 @@ extern "C" PR_IMPLEMENT(nsresult) NSUnregisterSelf(nsISupports* aServMgr, const char* aPath) { nsresult rv; - nsService compMgr(aServMgr, kComponentManagerCID, &rv); + + nsCOMPtr servMgr(do_QueryInterface(aServMgr, &rv)); + if (NS_FAILED(rv)) return rv; + + nsIComponentManager* compMgr; + rv = servMgr->GetService(kComponentManagerCID, + nsIComponentManager::GetIID(), + (nsISupports**)&compMgr); if (NS_FAILED(rv)) return rv; rv = compMgr->UnregisterComponent(kRDFBookmarkDataSourceCID, aPath); - if (NS_FAILED(rv)) return rv; + if (NS_FAILED(rv)) goto done; rv = compMgr->UnregisterComponent(kRDFFileSystemDataSourceCID,aPath); - if (NS_FAILED(rv)) return rv; + if (NS_FAILED(rv)) goto done; rv = compMgr->UnregisterComponent(kRDFHistoryDataSourceCID, aPath); - if (NS_FAILED(rv)) return rv; + if (NS_FAILED(rv)) goto done; rv = compMgr->UnregisterComponent(kRDFCompositeDataSourceCID, aPath); - if (NS_FAILED(rv)) return rv; + if (NS_FAILED(rv)) goto done; rv = compMgr->UnregisterComponent(kRDFInMemoryDataSourceCID, aPath); - if (NS_FAILED(rv)) return rv; + if (NS_FAILED(rv)) goto done; rv = compMgr->UnregisterComponent(kRDFXMLDataSourceCID, aPath); - if (NS_FAILED(rv)) return rv; + if (NS_FAILED(rv)) goto done; rv = compMgr->UnregisterComponent(kXULDataSourceCID, aPath); - if (NS_FAILED(rv)) return rv; + if (NS_FAILED(rv)) goto done; rv = compMgr->UnregisterComponent(kRDFDefaultResourceCID, aPath); - if (NS_FAILED(rv)) return rv; + if (NS_FAILED(rv)) goto done; rv = compMgr->UnregisterComponent(kRDFContentSinkCID, aPath); - if (NS_FAILED(rv)) return rv; + if (NS_FAILED(rv)) goto done; rv = compMgr->UnregisterComponent(kRDFHTMLBuilderCID, aPath); - if (NS_FAILED(rv)) return rv; + if (NS_FAILED(rv)) goto done; rv = compMgr->UnregisterComponent(kRDFServiceCID, aPath); - if (NS_FAILED(rv)) return rv; + if (NS_FAILED(rv)) goto done; rv = compMgr->UnregisterComponent(kXULSortServiceCID, aPath); - if (NS_FAILED(rv)) return rv; + if (NS_FAILED(rv)) goto done; rv = compMgr->UnregisterComponent(kRDFTreeBuilderCID, aPath); - if (NS_FAILED(rv)) return rv; + if (NS_FAILED(rv)) goto done; rv = compMgr->UnregisterComponent(kRDFMenuBuilderCID, aPath); - if (NS_FAILED(rv)) return rv; + if (NS_FAILED(rv)) goto done; rv = compMgr->UnregisterComponent(kRDFToolbarBuilderCID, aPath); - if (NS_FAILED(rv)) return rv; + if (NS_FAILED(rv)) goto done; rv = compMgr->UnregisterComponent(kRDFXULBuilderCID, aPath); - if (NS_FAILED(rv)) return rv; + if (NS_FAILED(rv)) goto done; rv = compMgr->UnregisterComponent(kXULContentSinkCID, aPath); - if (NS_FAILED(rv)) return rv; + if (NS_FAILED(rv)) goto done; rv = compMgr->UnregisterComponent(kXULDocumentCID, aPath); + + done: + (void)servMgr->ReleaseService(kComponentManagerCID, compMgr); return rv; } diff --git a/mozilla/silentdl/nsSilentDownload.cpp b/mozilla/silentdl/nsSilentDownload.cpp index c7da8109bd6..84619b3d78d 100644 --- a/mozilla/silentdl/nsSilentDownload.cpp +++ b/mozilla/silentdl/nsSilentDownload.cpp @@ -59,6 +59,7 @@ #include "nsIBrowserWindow.h" #include "nsIWebShell.h" #include "nsIServiceManager.h" +#include "nsCOMPtr.h" static NS_DEFINE_CID(kComponentManagerCID, NS_COMPONENTMANAGER_CID); @@ -1436,7 +1437,14 @@ extern "C" NS_EXPORT nsresult NSRegisterSelf(nsISupports* aServMgr, const char *path) { nsresult rv; - nsService compMgr(aServMgr, kComponentManagerCID, &rv); + + nsCOMPtr servMgr(do_QueryInterface(aServMgr, &rv)); + if (NS_FAILED(rv)) return rv; + + nsIComponentManager* compMgr; + rv = servMgr->GetService(kComponentManagerCID, + nsIComponentManager::GetIID(), + (nsISupports**)&compMgr); if (NS_FAILED(rv)) return rv; #ifdef NS_DEBUG @@ -1444,8 +1452,11 @@ NSRegisterSelf(nsISupports* aServMgr, const char *path) #endif rv = compMgr->RegisterComponent(kSilentDownloadCID, NULL, NULL, path, PR_TRUE, PR_TRUE); - if (NS_FAILED(rv)) return rv; + if (NS_FAILED(rv)) goto done; rv = compMgr->RegisterComponent(kSilentDownloadTaskCID, NULL, NULL, path, PR_TRUE, PR_TRUE); + + done: + (void)servMgr->ReleaseService(kComponentManagerCID, compMgr); return rv; } @@ -1453,7 +1464,14 @@ extern "C" NS_EXPORT nsresult NSUnregisterSelf(nsISupports* aServMgr, const char *path) { nsresult rv; - nsService compMgr(aServMgr, kComponentManagerCID, &rv); + + nsCOMPtr servMgr(do_QueryInterface(aServMgr, &rv)); + if (NS_FAILED(rv)) return rv; + + nsIComponentManager* compMgr; + rv = servMgr->GetService(kComponentManagerCID, + nsIComponentManager::GetIID(), + (nsISupports**)&compMgr); if (NS_FAILED(rv)) return rv; #ifdef NS_DEBUG @@ -1461,8 +1479,11 @@ NSUnregisterSelf(nsISupports* aServMgr, const char *path) #endif rv = compMgr->UnregisterFactory(kSilentDownloadCID, path); - if (NS_FAILED(rv)) return rv; + if (NS_FAILED(rv)) goto done; rv = compMgr->UnregisterFactory(kSilentDownloadTaskCID, path); + + done: + (void)servMgr->ReleaseService(kComponentManagerCID, compMgr); return rv; } diff --git a/mozilla/xpcom/components/nsIServiceManager.h b/mozilla/xpcom/components/nsIServiceManager.h index ee1d03ec2c5..24ee5dce8df 100644 --- a/mozilla/xpcom/components/nsIServiceManager.h +++ b/mozilla/xpcom/components/nsIServiceManager.h @@ -133,7 +133,7 @@ public: // // and the automatic destructor will take care of releasing the service. -#if 0 +#ifdef XP_WIN template class nsService { protected: diff --git a/mozilla/xpcom/public/nsIServiceManager.h b/mozilla/xpcom/public/nsIServiceManager.h index ee1d03ec2c5..24ee5dce8df 100644 --- a/mozilla/xpcom/public/nsIServiceManager.h +++ b/mozilla/xpcom/public/nsIServiceManager.h @@ -133,7 +133,7 @@ public: // // and the automatic destructor will take care of releasing the service. -#if 0 +#ifdef XP_WIN template class nsService { protected: diff --git a/mozilla/xpcom/tests/dynamic/TestDynamic.cpp b/mozilla/xpcom/tests/dynamic/TestDynamic.cpp index a6e7e5849f2..da4f77811ca 100644 --- a/mozilla/xpcom/tests/dynamic/TestDynamic.cpp +++ b/mozilla/xpcom/tests/dynamic/TestDynamic.cpp @@ -23,6 +23,7 @@ #include "nsISupports.h" #include "nsIComponentManager.h" #include "nsIServiceManager.h" +#include "nsCOMPtr.h" static NS_DEFINE_CID(kComponentManagerCID, NS_COMPONENTMANAGER_CID); @@ -136,18 +137,38 @@ extern "C" NS_EXPORT PRBool NSCanUnload(nsISupports* aServMgr) { extern "C" NS_EXPORT nsresult NSRegisterSelf(nsISupports* aServMgr , const char *path) { nsresult rv; - nsService compMgr(aServMgr, kComponentManagerCID, &rv); + + nsCOMPtr servMgr(do_QueryInterface(aServMgr, &rv)); if (NS_FAILED(rv)) return rv; - return compMgr->RegisterComponent(kTestLoadedFactoryCID, NULL, NULL, path, - PR_TRUE, PR_TRUE); + nsIComponentManager* compMgr; + rv = servMgr->GetService(kComponentManagerCID, + nsIComponentManager::GetIID(), + (nsISupports**)&compMgr); + if (NS_FAILED(rv)) return rv; + + rv = compMgr->RegisterComponent(kTestLoadedFactoryCID, NULL, NULL, path, + PR_TRUE, PR_TRUE); + + (void)servMgr->ReleaseService(kComponentManagerCID, compMgr); + return rv; } extern "C" NS_EXPORT nsresult NSUnregisterSelf(nsISupports* aServMgr, const char *path) { nsresult rv; - nsService compMgr(aServMgr, kComponentManagerCID, &rv); + + nsCOMPtr servMgr(do_QueryInterface(aServMgr, &rv)); if (NS_FAILED(rv)) return rv; - return compMgr->UnregisterFactory(kTestLoadedFactoryCID, path); + nsIComponentManager* compMgr; + rv = servMgr->GetService(kComponentManagerCID, + nsIComponentManager::GetIID(), + (nsISupports**)&compMgr); + if (NS_FAILED(rv)) return rv; + + rv = compMgr->UnregisterFactory(kTestLoadedFactoryCID, path); + + (void)servMgr->ReleaseService(kComponentManagerCID, compMgr); + return rv; }