From 1c92b7642bdcdd5e6b3fb19e38f05ebb1c5f3f17 Mon Sep 17 00:00:00 2001 From: "ftang%netscape.com" Date: Wed, 14 Jul 1999 18:46:44 +0000 Subject: [PATCH] fix bug 9841 --- intl/locale/src/unix/nsLocaleSO.cpp | 12 +- intl/lwbrk/src/nsLWBrk.cpp | 151 ------------------ intl/uconv/src/nsUConvDll.cpp | 12 +- intl/unicharutil/src/nsUnicharUtilFactory.cpp | 5 + 4 files changed, 27 insertions(+), 153 deletions(-) diff --git a/intl/locale/src/unix/nsLocaleSO.cpp b/intl/locale/src/unix/nsLocaleSO.cpp index 44646ba1779..bb11784be3b 100644 --- a/intl/locale/src/unix/nsLocaleSO.cpp +++ b/intl/locale/src/unix/nsLocaleSO.cpp @@ -67,7 +67,10 @@ extern "C" NS_EXPORT nsresult NSGetFactory(nsISupports* serviceMgr, nsIFactory* factoryInstance; nsresult res; - if (aFactory == NULL) return NS_ERROR_NULL_POINTER; + if (aFactory == NULL) + return NS_ERROR_NULL_POINTER; + + *aFactory = NULL; // // first check for the nsILocaleFactory interfaces @@ -75,6 +78,9 @@ extern "C" NS_EXPORT nsresult NSGetFactory(nsISupports* serviceMgr, if (aClass.Equals(kLocaleFactoryCID)) { nsLocaleFactory *factory = new nsLocaleFactory(); + if(nsnull == factory) + return NS_ERROR_OUT_OF_MEMORY; + res = factory->QueryInterface(kILocaleFactoryIID, (void **) aFactory); if (NS_FAILED(res)) @@ -88,6 +94,10 @@ extern "C" NS_EXPORT nsresult NSGetFactory(nsISupports* serviceMgr, if (aClass.Equals(kPosixLocaleFactoryCID)) { nsPosixLocaleFactory *posix_factory = new nsPosixLocaleFactory(); + + if(nsnull == posix_factory) + return NS_ERROR_OUT_OF_MEMORY; + res = posix_factory->QueryInterface(kIFactoryIID,(void**)aFactory); if (NS_FAILED(res)) { diff --git a/intl/lwbrk/src/nsLWBrk.cpp b/intl/lwbrk/src/nsLWBrk.cpp index a8f209c43db..e69de29bb2d 100644 --- a/intl/lwbrk/src/nsLWBrk.cpp +++ b/intl/lwbrk/src/nsLWBrk.cpp @@ -1,151 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- - * - * The contents of this file are subject to the Netscape Public License - * Version 1.0 (the "NPL"); you may not use this file except in - * compliance with the NPL. You may obtain a copy of the NPL at - * http://www.mozilla.org/NPL/ - * - * Software distributed under the NPL is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL - * for the specific language governing rights and limitations under the - * NPL. - * - * The Initial Developer of this code under the NPL is Netscape - * Communications Corporation. Portions created by Netscape are - * Copyright (C) 1998 Netscape Communications Corporation. All Rights - * Reserved. - */ - -#include "pratom.h" -#include "nsISupports.h" -#include "nsIComponentManager.h" -#include "nsCOMPtr.h" -#include "nsIFactory.h" -#include "nsLWBrkCIID.h" -#include "nsILineBreakerFactory.h" -#include "nsIWordBreakerFactory.h" -#include "nsLWBreakerFImp.h" -#include "nsLWBRKDll.h" -#include "nsIServiceManager.h" - -static NS_DEFINE_CID(kComponentManagerCID, NS_COMPONENTMANAGER_CID); - -NS_DEFINE_CID(kLWBrkCID, NS_LWBRK_CID); - -NS_DEFINE_IID(kFactoryIID, NS_IFACTORY_IID); - -PRInt32 g_InstanceCount = 0; -PRInt32 g_LockCount = 0; - -class nsLWBrkFactory : public nsIFactory { - NS_DECL_ISUPPORTS - nsLWBrkFactory() { - NS_INIT_REFCNT(); - PR_AtomicIncrement(&g_InstanceCount); - }; - virtual ~nsLWBrkFactory() { - PR_AtomicDecrement(&g_InstanceCount); - }; - - NS_IMETHOD CreateInstance(nsISupports *aDelegate, - const nsIID &aIID, - void **aResult); - - NS_IMETHOD LockFactory(PRBool aLock) { - if (aLock) { - PR_AtomicIncrement(&g_LockCount); - } else { - PR_AtomicDecrement(&g_LockCount); - } - return NS_OK; - }; -}; - -NS_IMPL_ISUPPORTS(nsLWBrkFactory, kFactoryIID); - -nsresult nsLWBrkFactory::CreateInstance(nsISupports *aDelegate, - const nsIID &aIID, - void **aResult) -{ - if(NULL == aResult ) { - return NS_ERROR_NULL_POINTER; - } - - *aResult = NULL; - - nsLWBreakerFImp *imp = new nsLWBreakerFImp() ; - - nsresult res = imp->QueryInterface(aIID, aResult); - - if(NS_FAILED(res)) { - delete imp; - } - return res; -} - -extern "C" NS_EXPORT nsresult NSGetFactory(nsISupports* aServMgr, - const nsCID &aClass, - const char *aClassName, - const char *aProgID, - nsIFactory **aFactory) -{ - if (aFactory == NULL) { - return NS_ERROR_NULL_POINTER; - } - if (aClass.Equals(kLWBrkCID)) { - nsLWBrkFactory *factory = new nsLWBrkFactory(); - nsresult res = factory->QueryInterface(kFactoryIID, (void **) aFactory); - if (NS_FAILED(res)) { - *aFactory = NULL; - delete factory; - } - return res; - } - return NS_NOINTERFACE; -} - -extern "C" NS_EXPORT PRBool NSCanUnload(nsISupports* aServMgr) { - return PRBool(g_InstanceCount == 0 && g_LockCount == 0); -} - -extern "C" NS_EXPORT nsresult NSRegisterSelf(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); - if (NS_FAILED(rv)) return rv; - - rv = compMgr->RegisterComponent(kLWBrkCID, - "Line and Word Breaker", - NS_LWBRK_PROGID, - 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; - - 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(kLWBrkCID, path); - - (void)servMgr->ReleaseService(kComponentManagerCID, compMgr); - return rv; -} diff --git a/intl/uconv/src/nsUConvDll.cpp b/intl/uconv/src/nsUConvDll.cpp index f2b19b968ea..bd4bfa08a52 100644 --- a/intl/uconv/src/nsUConvDll.cpp +++ b/intl/uconv/src/nsUConvDll.cpp @@ -56,11 +56,17 @@ extern "C" NS_EXPORT nsresult NSGetFactory(nsISupports* aServMgr, const char *aProgID, nsIFactory **aFactory) { - if (aFactory == NULL) return NS_ERROR_NULL_POINTER; + if (aFactory == NULL) + return NS_ERROR_NULL_POINTER; + *aFactory = NULL; // the converter manager if (aClass.Equals(kCharsetConverterManagerCID)) { nsManagerFactory *factory = new nsManagerFactory(); + + if(nsnull == factory) + return NS_ERROR_OUT_OF_MEMORY; + nsresult res = factory->QueryInterface(kIFactoryIID, (void **) aFactory); if (NS_FAILED(res)) { @@ -74,6 +80,8 @@ extern "C" NS_EXPORT nsresult NSGetFactory(nsISupports* aServMgr, // the Unicode Decode helper if (aClass.Equals(kUnicodeDecodeHelperCID)) { nsDecodeHelperFactory *factory = new nsDecodeHelperFactory(); + if(nsnull == factory) + return NS_ERROR_OUT_OF_MEMORY; nsresult res = factory->QueryInterface(kIFactoryIID, (void **) aFactory); if (NS_FAILED(res)) { @@ -87,6 +95,8 @@ extern "C" NS_EXPORT nsresult NSGetFactory(nsISupports* aServMgr, // the Unicode Encode helper if (aClass.Equals(kUnicodeEncodeHelperCID)) { nsEncodeHelperFactory *factory = new nsEncodeHelperFactory(); + if(nsnull == factory) + return NS_ERROR_OUT_OF_MEMORY; nsresult res = factory->QueryInterface(kIFactoryIID, (void **) aFactory); if (NS_FAILED(res)) { diff --git a/intl/unicharutil/src/nsUnicharUtilFactory.cpp b/intl/unicharutil/src/nsUnicharUtilFactory.cpp index 47e84994e3a..6936b8f0c6e 100644 --- a/intl/unicharutil/src/nsUnicharUtilFactory.cpp +++ b/intl/unicharutil/src/nsUnicharUtilFactory.cpp @@ -97,8 +97,11 @@ extern "C" NS_EXPORT nsresult NSGetFactory(nsISupports* aServMgr, if (aFactory == NULL) { return NS_ERROR_NULL_POINTER; } + *aFactory = NULL; if (aClass.Equals(kUnicharUtilCID)) { nsUnicharUtilFactory *factory = new nsUnicharUtilFactory(); + if(nsnull == factory) + return NS_ERROR_OUT_OF_MEMORY; nsresult res = factory->QueryInterface(kFactoryIID, (void **) aFactory); if (NS_FAILED(res)) { *aFactory = NULL; @@ -108,6 +111,8 @@ extern "C" NS_EXPORT nsresult NSGetFactory(nsISupports* aServMgr, } if (aClass.Equals(kHankakuToZenkakuCID)) { nsIFactory *factory = NEW_HANKAKU_TO_ZENKAKU_FACTORY(); + if(nsnull == factory) + return NS_ERROR_OUT_OF_MEMORY; nsresult res = factory->QueryInterface(kFactoryIID, (void **) aFactory); if (NS_FAILED(res)) { *aFactory = NULL;