rv = RegisterGenericFactory(compMgr, kMemoryCID, NS_MEMORY_CLASSNAME, NS_MEMORY_CONTRACTID, nsMemoryImpl::Create); if (NS_FAILED(rv)) return rv;  rv = RegisterGenericFactory(compMgr, kErrorServiceCID, NS_ERRORSERVICE_NAME, NS_ERRORSERVICE_CONTRACTID, nsErrorService::Create); if (NS_FAILED(rv)) return rv;  #ifdef NS_ENABLE_LOGGING rv = RegisterGenericFactory(compMgr, kLoggingServiceCID, NS_LOGGINGSERVICE_CLASSNAME, NS_LOGGINGSERVICE_CONTRACTID, nsLoggingService::Create); if (NS_FAILED(rv)) return rv; #endif  rv = RegisterGenericFactory(compMgr, kArenaCID, NS_ARENA_CLASSNAME, NS_ARENA_CONTRACTID, ArenaImpl::Create); if (NS_FAILED(rv)) return rv;  #if 0 rv = RegisterGenericFactory(compMgr, kBufferCID, NS_BUFFER_CLASSNAME, NS_BUFFER_CONTRACTID, nsBuffer::Create); if (NS_FAILED(rv)) return rv; #endif  rv = RegisterGenericFactory(compMgr, kByteBufferCID, NS_BYTEBUFFER_CLASSNAME, NS_BYTEBUFFER_CONTRACTID, ByteBufferImpl::Create); if (NS_FAILED(rv)) return rv;  rv = RegisterGenericFactory(compMgr, kScriptableInputStreamCID, NS_SCRIPTABLEINPUTSTREAM_CLASSNAME, NS_SCRIPTABLEINPUTSTREAM_CONTRACTID, nsScriptableInputStream::Create); if (NS_FAILED(rv)) return rv;  #ifdef PAGE_MANAGER rv = RegisterGenericFactory(compMgr, kPageManagerCID, NS_PAGEMANAGER_CLASSNAME, NS_PAGEMANAGER_CONTRACTID, nsPageMgr::Create); if (NS_FAILED(rv)) return rv; #endif  rv = RegisterGenericFactory(compMgr, kPropertiesCID, NS_PROPERTIES_CLASSNAME, NS_PROPERTIES_CONTRACTID, nsProperties::Create); if (NS_FAILED(rv)) return rv;  rv = RegisterGenericFactory(compMgr, kPersistentPropertiesCID, NS_PERSISTENTPROPERTIES_CLASSNAME, NS_PERSISTENTPROPERTIES_CONTRACTID, nsPersistentProperties::Create); if (NS_FAILED(rv)) return rv;  rv = RegisterGenericFactory(compMgr, kSupportsArrayCID, NS_SUPPORTSARRAY_CLASSNAME, NS_SUPPORTSARRAY_CONTRACTID, nsSupportsArray::Create); if (NS_FAILED(rv)) return rv;  rv = RegisterGenericFactory(compMgr, kConsoleServiceCID, NS_CONSOLESERVICE_CLASSNAME, NS_CONSOLESERVICE_CONTRACTID, nsConsoleServiceConstructor); if (NS_FAILED(rv)) return rv;  rv = RegisterGenericFactory(compMgr, kAtomServiceCID, NS_ATOMSERVICE_CLASSNAME, NS_ATOMSERVICE_CONTRACTID, nsAtomServiceConstructor); if (NS_FAILED(rv)) return rv;  rv = RegisterGenericFactory(compMgr, nsObserver::GetCID(), NS_OBSERVER_CLASSNAME, NS_OBSERVER_CONTRACTID, nsObserver::Create); if (NS_FAILED(rv)) return rv;  rv = RegisterGenericFactory(compMgr, nsObserverList::GetCID(), NS_OBSERVERLIST_CLASSNAME, NS_OBSERVERLIST_CONTRACTID, nsObserverList::Create); if (NS_FAILED(rv)) return rv;  rv = RegisterGenericFactory(compMgr, nsObserverService::GetCID(), NS_OBSERVERSERVICE_CLASSNAME, NS_OBSERVERSERVICE_CONTRACTID, nsObserverService::Create); if (NS_FAILED(rv)) return rv;  rv = RegisterGenericFactory(compMgr, kGenericFactoryCID, NS_GENERICFACTORY_CLASSNAME, NS_GENERICFACTORY_CONTRACTID, nsGenericFactory::Create); if (NS_FAILED(rv)) return rv;  rv = RegisterGenericFactory(compMgr, kEventQueueServiceCID, NS_EVENTQUEUESERVICE_CLASSNAME, NS_EVENTQUEUESERVICE_CONTRACTID, nsEventQueueServiceImpl::Create); if (NS_FAILED(rv)) return rv;  rv = RegisterGenericFactory(compMgr, kEventQueueCID, NS_EVENTQUEUE_CLASSNAME, NS_EVENTQUEUE_CONTRACTID, nsEventQueueImpl::Create); if (NS_FAILED(rv)) return rv;  rv = RegisterGenericFactory(compMgr, kThreadCID, NS_THREAD_CLASSNAME, NS_THREAD_CONTRACTID, nsThread::Create); if (NS_FAILED(rv)) return rv;  rv = RegisterGenericFactory(compMgr, kThreadPoolCID, NS_THREADPOOL_CLASSNAME, NS_THREADPOOL_CONTRACTID, nsThreadPool::Create); if (NS_FAILED(rv)) return rv;  rv = RegisterGenericFactory(compMgr, kProxyObjectManagerCID, NS_XPCOMPROXY_CLASSNAME, NS_XPCOMPROXY_CONTRACTID, nsProxyObjectManager::Create); if (NS_FAILED(rv)) return rv;   rv = RegisterGenericFactory(compMgr, kSupportsIDCID, NS_SUPPORTS_ID_CLASSNAME, NS_SUPPORTS_ID_CONTRACTID, nsSupportsIDImplConstructor); if (NS_FAILED(rv)) return rv;  rv = RegisterGenericFactory(compMgr, kSupportsStringCID, NS_SUPPORTS_STRING_CLASSNAME, NS_SUPPORTS_STRING_CONTRACTID, nsSupportsStringImplConstructor); if (NS_FAILED(rv)) return rv;  rv = RegisterGenericFactory(compMgr, kSupportsWStringCID, NS_SUPPORTS_WSTRING_CLASSNAME, NS_SUPPORTS_WSTRING_CONTRACTID, nsSupportsWStringImplConstructor); if (NS_FAILED(rv)) return rv;  rv = RegisterGenericFactory(compMgr, kSupportsPRBoolCID, NS_SUPPORTS_PRBOOL_CLASSNAME, NS_SUPPORTS_PRBOOL_CONTRACTID, nsSupportsPRBoolImplConstructor); if (NS_FAILED(rv)) return rv;  rv = RegisterGenericFactory(compMgr, kSupportsPRUint8CID, NS_SUPPORTS_PRUINT8_CLASSNAME, NS_SUPPORTS_PRUINT8_CONTRACTID, nsSupportsPRUint8ImplConstructor); if (NS_FAILED(rv)) return rv;  rv = RegisterGenericFactory(compMgr, kSupportsPRUint16CID, NS_SUPPORTS_PRUINT16_CLASSNAME, NS_SUPPORTS_PRUINT16_CONTRACTID, nsSupportsPRUint16ImplConstructor); if (NS_FAILED(rv)) return rv;  rv = RegisterGenericFactory(compMgr, kSupportsPRUint32CID, NS_SUPPORTS_PRUINT32_CLASSNAME, NS_SUPPORTS_PRUINT32_CONTRACTID, nsSupportsPRUint32ImplConstructor); if (NS_FAILED(rv)) return rv;  rv = RegisterGenericFactory(compMgr, kSupportsPRUint64CID, NS_SUPPORTS_PRUINT64_CLASSNAME, NS_SUPPORTS_PRUINT64_CONTRACTID, nsSupportsPRUint64ImplConstructor); if (NS_FAILED(rv)) return rv;  rv = RegisterGenericFactory(compMgr, kSupportsPRTimeCID, NS_SUPPORTS_PRTIME_CLASSNAME, NS_SUPPORTS_PRTIME_CONTRACTID, nsSupportsPRTimeImplConstructor); if (NS_FAILED(rv)) return rv;  rv = RegisterGenericFactory(compMgr, kSupportsCharCID, NS_SUPPORTS_CHAR_CLASSNAME, NS_SUPPORTS_CHAR_CONTRACTID, nsSupportsCharImplConstructor); if (NS_FAILED(rv)) return rv;  rv = RegisterGenericFactory(compMgr, kSupportsPRInt16CID, NS_SUPPORTS_PRINT16_CLASSNAME, NS_SUPPORTS_PRINT16_CONTRACTID, nsSupportsPRInt16ImplConstructor); if (NS_FAILED(rv)) return rv;  rv = RegisterGenericFactory(compMgr, kSupportsPRInt32CID, NS_SUPPORTS_PRINT32_CLASSNAME, NS_SUPPORTS_PRINT32_CONTRACTID, nsSupportsPRInt32ImplConstructor); if (NS_FAILED(rv)) return rv;  rv = RegisterGenericFactory(compMgr, kSupportsPRInt64CID, NS_SUPPORTS_PRINT64_CLASSNAME, NS_SUPPORTS_PRINT64_CONTRACTID, nsSupportsPRInt64ImplConstructor); if (NS_FAILED(rv)) return rv;  rv = RegisterGenericFactory(compMgr, kSupportsFloatCID, NS_SUPPORTS_FLOAT_CLASSNAME, NS_SUPPORTS_FLOAT_CONTRACTID, nsSupportsFloatImplConstructor); if (NS_FAILED(rv)) return rv;  rv = RegisterGenericFactory(compMgr, kSupportsDoubleCID, NS_SUPPORTS_DOUBLE_CLASSNAME, NS_SUPPORTS_DOUBLE_CONTRACTID, nsSupportsDoubleImplConstructor); if (NS_FAILED(rv)) return rv;  rv = RegisterGenericFactory(compMgr, kSupportsVoidCID, NS_SUPPORTS_VOID_CLASSNAME, NS_SUPPORTS_VOID_CONTRACTID, nsSupportsVoidImplConstructor); if (NS_FAILED(rv)) return rv;  rv = RegisterGenericFactory(compMgr, nsLocalFile::GetCID(), NS_LOCAL_FILE_CLASSNAME, NS_LOCAL_FILE_CONTRACTID, nsLocalFile::nsLocalFileConstructor); if (NS_FAILED(rv)) return rv;  rv = RegisterGenericFactory(compMgr, nsDirectoryService::GetCID(), NS_DIRECTORY_SERVICE_CLASSNAME, NS_DIRECTORY_SERVICE_CONTRACTID, nsDirectoryService::Create); if (NS_FAILED(rv)) return rv;  rv = RegisterGenericFactory(compMgr, kProcessCID, NS_PROCESS_CLASSNAME, NS_PROCESS_CONTRACTID, nsProcessConstructor); if (NS_FAILED(rv)) return rv;  rv = RegisterGenericFactory(compMgr, kFileSpecCID, NS_FILESPEC_CLASSNAME, NS_FILESPEC_CONTRACTID, nsFileSpecImpl::Create); if (NS_FAILED(rv)) return rv;  rv = RegisterGenericFactory(compMgr, kDirectoryIteratorCID, NS_DIRECTORYITERATOR_CLASSNAME, NS_DIRECTORYITERATOR_CONTRACTID, nsDirectoryIteratorImpl::Create); if (NS_FAILED(rv)) return rv;
for (int i = 0; i < components_length; i++) RegisterGenericFactory(compMgr, &components[i]);
nsresult NS_COM NS_InitXPCOM2(nsIServiceManager* *result,                               nsIFile* binDirectory,                              nsIDirectoryServiceProvider* appFileLocationProvider){    nsresult rv = NS_OK;#ifdef NS_BUILD_REFCNT_LOGGING    nsTraceRefcnt::Startup();#endif     // Establish the main thread here.    rv = nsIThread::SetMainThread();    if (NS_FAILED(rv)) return rv;    // Startup the memory manager    rv = nsMemoryImpl::Startup();    if (NS_FAILED(rv)) return rv;    NS_StartupLocalFile();    StartupSpecialSystemDirectory();    // 1. Create the Global Service Manager    nsIServiceManager* servMgr = NULL;    if (gServiceManager == NULL)    {        rv = NS_NewServiceManager(&servMgr);        if (NS_FAILED(rv)) return rv;        gServiceManager = servMgr;        if (result)    {          NS_ADDREF(servMgr);      *result = servMgr;    }    }    // 2. Create the Component Manager and register with global service manager    //    It is understood that the component manager can use the global service manager.    nsComponentManagerImpl *compMgr = NULL;        if (nsComponentManagerImpl::gComponentManager == NULL)    {        compMgr = new nsComponentManagerImpl();        if (compMgr == NULL)            return NS_ERROR_OUT_OF_MEMORY;        NS_ADDREF(compMgr);        rv = nsDirectoryService::Create(nsnull,                                         NS_GET_IID(nsIProperties),                                         (void**)&gDirectoryService);                if (NS_FAILED(rv))            return rv;                nsCOMPtr<nsIDirectoryService> dirService = do_QueryInterface(gDirectoryService);                if (!dirService)            return NS_ERROR_NO_INTERFACE;        rv = dirService->Init();                if (NS_FAILED(rv))            return rv;        PRBool value;                                if (binDirectory)        {            rv = binDirectory->IsDirectory(&value);            if (NS_SUCCEEDED(rv) && value)                gDirectoryService->Define(NS_XPCOM_INIT_CURRENT_PROCESS_DIR, binDirectory);            //Since people are still using the nsSpecialSystemDirectory, we should init it.            char* path;            binDirectory->GetPath(&path);            nsFileSpec spec(path);            nsMemory::Free(path);                        nsSpecialSystemDirectory::Set(nsSpecialSystemDirectory::Moz_BinDirectory, &spec);                    }        if (!appFileLocationProvider) {            appFileLocationProvider = new nsAppFileLocationProvider;            if (!appFileLocationProvider)                return NS_ERROR_OUT_OF_MEMORY;        }        rv = dirService->RegisterProvider(appFileLocationProvider);        if (NS_FAILED(rv)) return rv;                        rv = compMgr->Init();        if (NS_FAILED(rv))        {            NS_RELEASE(compMgr);            return rv;        }                nsComponentManagerImpl::gComponentManager = compMgr;    }    nsCOMPtr<nsIMemory> memory = getter_AddRefs(nsMemory::GetGlobalMemoryService());    rv = servMgr->RegisterService(kMemoryCID, memory);    if (NS_FAILED(rv)) return rv;        rv = servMgr->RegisterService(kComponentManagerCID, NS_STATIC_CAST(nsIComponentManager*, compMgr));    if (NS_FAILED(rv)) return rv;    #ifdef GC_LEAK_DETECTOR  rv = NS_InitLeakDetector();    if (NS_FAILED(rv)) return rv;#endif    // 3. Register the global services with the component manager so that    //    clients can create new objects.    // Registry    nsIFactory *registryFactory = NULL;    rv = NS_RegistryGetFactory(&registryFactory);    if (NS_FAILED(rv)) return rv;    NS_DEFINE_CID(kRegistryCID, NS_REGISTRY_CID);    rv = compMgr->RegisterFactory(kRegistryCID,                                  NS_REGISTRY_CLASSNAME,                                  NS_REGISTRY_CONTRACTID,                                  registryFactory, PR_TRUE);    NS_RELEASE(registryFactory);    if (NS_FAILED(rv)) return rv;    // Category Manager    {      nsCOMPtr<nsIFactory> categoryManagerFactory;      if ( NS_FAILED(rv = NS_CategoryManagerGetFactory(getter_AddRefs(categoryManagerFactory))) )        return rv;      NS_DEFINE_CID(kCategoryManagerCID, NS_CATEGORYMANAGER_CID);      rv = compMgr->RegisterFactory(kCategoryManagerCID,                                    NS_CATEGORYMANAGER_CLASSNAME,                                    NS_CATEGORYMANAGER_CONTRACTID,                                    categoryManagerFactory,                                    PR_TRUE);      if ( NS_FAILED(rv) )        return rv;    }    rv = RegisterGenericFactory(compMgr, kMemoryCID,                                NS_MEMORY_CLASSNAME,                                NS_MEMORY_CONTRACTID,                                nsMemoryImpl::Create);    if (NS_FAILED(rv)) return rv;    rv = RegisterGenericFactory(compMgr, kErrorServiceCID,                                NS_ERRORSERVICE_NAME,                                NS_ERRORSERVICE_CONTRACTID,                                nsErrorService::Create);    if (NS_FAILED(rv)) return rv;#ifdef NS_ENABLE_LOGGING    rv = RegisterGenericFactory(compMgr, kLoggingServiceCID,                                NS_LOGGINGSERVICE_CLASSNAME,                                NS_LOGGINGSERVICE_CONTRACTID,                                nsLoggingService::Create);    if (NS_FAILED(rv)) return rv;#endif    rv = RegisterGenericFactory(compMgr, kArenaCID,                                NS_ARENA_CLASSNAME,                                NS_ARENA_CONTRACTID,                                ArenaImpl::Create);    if (NS_FAILED(rv)) return rv;#if 0    rv = RegisterGenericFactory(compMgr, kBufferCID,                                NS_BUFFER_CLASSNAME,                                NS_BUFFER_CONTRACTID,                                nsBuffer::Create);    if (NS_FAILED(rv)) return rv;#endif    rv = RegisterGenericFactory(compMgr, kByteBufferCID,                                NS_BYTEBUFFER_CLASSNAME,                                NS_BYTEBUFFER_CONTRACTID,                                ByteBufferImpl::Create);    if (NS_FAILED(rv)) return rv;    rv = RegisterGenericFactory(compMgr, kScriptableInputStreamCID,                                NS_SCRIPTABLEINPUTSTREAM_CLASSNAME,                                NS_SCRIPTABLEINPUTSTREAM_CONTRACTID,                                nsScriptableInputStream::Create);    if (NS_FAILED(rv)) return rv;#ifdef PAGE_MANAGER    rv = RegisterGenericFactory(compMgr, kPageManagerCID,                                NS_PAGEMANAGER_CLASSNAME,                                NS_PAGEMANAGER_CONTRACTID,                                nsPageMgr::Create);    if (NS_FAILED(rv)) return rv;#endif    rv = RegisterGenericFactory(compMgr, kPropertiesCID,                                NS_PROPERTIES_CLASSNAME,                                NS_PROPERTIES_CONTRACTID,                                nsProperties::Create);    if (NS_FAILED(rv)) return rv;    rv = RegisterGenericFactory(compMgr, kPersistentPropertiesCID,                                NS_PERSISTENTPROPERTIES_CLASSNAME,                                NS_PERSISTENTPROPERTIES_CONTRACTID,                                nsPersistentProperties::Create);    if (NS_FAILED(rv)) return rv;    rv = RegisterGenericFactory(compMgr, kSupportsArrayCID,                                NS_SUPPORTSARRAY_CLASSNAME,                                NS_SUPPORTSARRAY_CONTRACTID,                                nsSupportsArray::Create);    if (NS_FAILED(rv)) return rv;    rv = RegisterGenericFactory(compMgr, kConsoleServiceCID,                                NS_CONSOLESERVICE_CLASSNAME,                                NS_CONSOLESERVICE_CONTRACTID,                                nsConsoleServiceConstructor);    if (NS_FAILED(rv)) return rv;    rv = RegisterGenericFactory(compMgr, kAtomServiceCID,                                NS_ATOMSERVICE_CLASSNAME,                                NS_ATOMSERVICE_CONTRACTID,                                nsAtomServiceConstructor);    if (NS_FAILED(rv)) return rv;        rv = RegisterGenericFactory(compMgr, nsObserver::GetCID(),                                 NS_OBSERVER_CLASSNAME,                                NS_OBSERVER_CONTRACTID,                                nsObserver::Create);    if (NS_FAILED(rv)) return rv;    rv = RegisterGenericFactory(compMgr, nsObserverList::GetCID(),                                 NS_OBSERVERLIST_CLASSNAME,                                NS_OBSERVERLIST_CONTRACTID,                                nsObserverList::Create);    if (NS_FAILED(rv)) return rv;    rv = RegisterGenericFactory(compMgr, nsObserverService::GetCID(),                                NS_OBSERVERSERVICE_CLASSNAME,                                NS_OBSERVERSERVICE_CONTRACTID,                                nsObserverService::Create);    if (NS_FAILED(rv)) return rv;    rv = RegisterGenericFactory(compMgr, kGenericFactoryCID,                                NS_GENERICFACTORY_CLASSNAME,                                NS_GENERICFACTORY_CONTRACTID,                                nsGenericFactory::Create);    if (NS_FAILED(rv)) return rv;    rv = RegisterGenericFactory(compMgr, kEventQueueServiceCID,                                NS_EVENTQUEUESERVICE_CLASSNAME,                                NS_EVENTQUEUESERVICE_CONTRACTID,                                nsEventQueueServiceImpl::Create);    if (NS_FAILED(rv)) return rv;    rv = RegisterGenericFactory(compMgr, kEventQueueCID,                                NS_EVENTQUEUE_CLASSNAME,                                NS_EVENTQUEUE_CONTRACTID,                                nsEventQueueImpl::Create);    if (NS_FAILED(rv)) return rv;    rv = RegisterGenericFactory(compMgr, kThreadCID,                                NS_THREAD_CLASSNAME,                                NS_THREAD_CONTRACTID,                                nsThread::Create);    if (NS_FAILED(rv)) return rv;    rv = RegisterGenericFactory(compMgr, kThreadPoolCID,                                NS_THREADPOOL_CLASSNAME,                                NS_THREADPOOL_CONTRACTID,                                nsThreadPool::Create);    if (NS_FAILED(rv)) return rv;    rv = RegisterGenericFactory(compMgr,                                 kProxyObjectManagerCID,                                 NS_XPCOMPROXY_CLASSNAME,                                NS_XPCOMPROXY_CONTRACTID,                                nsProxyObjectManager::Create);    if (NS_FAILED(rv)) return rv;    rv = RegisterGenericFactory(compMgr, kSupportsIDCID,                                NS_SUPPORTS_ID_CLASSNAME,                                NS_SUPPORTS_ID_CONTRACTID,                                nsSupportsIDImplConstructor);    if (NS_FAILED(rv)) return rv;    rv = RegisterGenericFactory(compMgr, kSupportsStringCID,                                NS_SUPPORTS_STRING_CLASSNAME,                                NS_SUPPORTS_STRING_CONTRACTID,                                nsSupportsStringImplConstructor);    if (NS_FAILED(rv)) return rv;    rv = RegisterGenericFactory(compMgr, kSupportsWStringCID,                                NS_SUPPORTS_WSTRING_CLASSNAME,                                NS_SUPPORTS_WSTRING_CONTRACTID,                                nsSupportsWStringImplConstructor);    if (NS_FAILED(rv)) return rv;    rv = RegisterGenericFactory(compMgr, kSupportsPRBoolCID,                                NS_SUPPORTS_PRBOOL_CLASSNAME,                                NS_SUPPORTS_PRBOOL_CONTRACTID,                                nsSupportsPRBoolImplConstructor);    if (NS_FAILED(rv)) return rv;    rv = RegisterGenericFactory(compMgr, kSupportsPRUint8CID,                                NS_SUPPORTS_PRUINT8_CLASSNAME,                                NS_SUPPORTS_PRUINT8_CONTRACTID,                                nsSupportsPRUint8ImplConstructor);    if (NS_FAILED(rv)) return rv;    rv = RegisterGenericFactory(compMgr, kSupportsPRUint16CID,                                NS_SUPPORTS_PRUINT16_CLASSNAME,                                NS_SUPPORTS_PRUINT16_CONTRACTID,                                nsSupportsPRUint16ImplConstructor);    if (NS_FAILED(rv)) return rv;    rv = RegisterGenericFactory(compMgr, kSupportsPRUint32CID,                                NS_SUPPORTS_PRUINT32_CLASSNAME,                                NS_SUPPORTS_PRUINT32_CONTRACTID,                                nsSupportsPRUint32ImplConstructor);    if (NS_FAILED(rv)) return rv;    rv = RegisterGenericFactory(compMgr, kSupportsPRUint64CID,                                NS_SUPPORTS_PRUINT64_CLASSNAME,                                NS_SUPPORTS_PRUINT64_CONTRACTID,                                nsSupportsPRUint64ImplConstructor);    if (NS_FAILED(rv)) return rv;    rv = RegisterGenericFactory(compMgr, kSupportsPRTimeCID,                                NS_SUPPORTS_PRTIME_CLASSNAME,                                NS_SUPPORTS_PRTIME_CONTRACTID,                                nsSupportsPRTimeImplConstructor);    if (NS_FAILED(rv)) return rv;    rv = RegisterGenericFactory(compMgr, kSupportsCharCID,                                NS_SUPPORTS_CHAR_CLASSNAME,                                NS_SUPPORTS_CHAR_CONTRACTID,                                nsSupportsCharImplConstructor);    if (NS_FAILED(rv)) return rv;    rv = RegisterGenericFactory(compMgr, kSupportsPRInt16CID,                                NS_SUPPORTS_PRINT16_CLASSNAME,                                NS_SUPPORTS_PRINT16_CONTRACTID,                                nsSupportsPRInt16ImplConstructor);    if (NS_FAILED(rv)) return rv;    rv = RegisterGenericFactory(compMgr, kSupportsPRInt32CID,                                NS_SUPPORTS_PRINT32_CLASSNAME,                                NS_SUPPORTS_PRINT32_CONTRACTID,                                nsSupportsPRInt32ImplConstructor);    if (NS_FAILED(rv)) return rv;    rv = RegisterGenericFactory(compMgr, kSupportsPRInt64CID,                                NS_SUPPORTS_PRINT64_CLASSNAME,                                NS_SUPPORTS_PRINT64_CONTRACTID,                                nsSupportsPRInt64ImplConstructor);    if (NS_FAILED(rv)) return rv;    rv = RegisterGenericFactory(compMgr, kSupportsFloatCID,                                NS_SUPPORTS_FLOAT_CLASSNAME,                                NS_SUPPORTS_FLOAT_CONTRACTID,                                nsSupportsFloatImplConstructor);    if (NS_FAILED(rv)) return rv;    rv = RegisterGenericFactory(compMgr, kSupportsDoubleCID,                                NS_SUPPORTS_DOUBLE_CLASSNAME,                                NS_SUPPORTS_DOUBLE_CONTRACTID,                                nsSupportsDoubleImplConstructor);    if (NS_FAILED(rv)) return rv;    rv = RegisterGenericFactory(compMgr, kSupportsVoidCID,                                NS_SUPPORTS_VOID_CLASSNAME,                                NS_SUPPORTS_VOID_CONTRACTID,                                nsSupportsVoidImplConstructor);    if (NS_FAILED(rv)) return rv;    rv = RegisterGenericFactory(compMgr, nsLocalFile::GetCID(),                                NS_LOCAL_FILE_CLASSNAME,                                NS_LOCAL_FILE_CONTRACTID,                                nsLocalFile::nsLocalFileConstructor);    if (NS_FAILED(rv)) return rv;    rv = RegisterGenericFactory(compMgr, nsDirectoryService::GetCID(),                                NS_DIRECTORY_SERVICE_CLASSNAME,                                NS_DIRECTORY_SERVICE_CONTRACTID,                                nsDirectoryService::Create);    if (NS_FAILED(rv)) return rv;    rv = RegisterGenericFactory(compMgr, kProcessCID,                                NS_PROCESS_CLASSNAME,                                NS_PROCESS_CONTRACTID,                                nsProcessConstructor);    if (NS_FAILED(rv)) return rv;    rv = RegisterGenericFactory(compMgr, kFileSpecCID,                                NS_FILESPEC_CLASSNAME,                                NS_FILESPEC_CONTRACTID,                                nsFileSpecImpl::Create);    if (NS_FAILED(rv)) return rv;    rv = RegisterGenericFactory(compMgr, kDirectoryIteratorCID,                                NS_DIRECTORYITERATOR_CLASSNAME,                                NS_DIRECTORYITERATOR_CONTRACTID,                                nsDirectoryIteratorImpl::Create);    if (NS_FAILED(rv)) return rv;    // Prepopulate registry for performance    // Ignore return value. It is ok if this fails.    nsComponentManagerImpl::gComponentManager->PlatformPrePopulateRegistry();    // Pay the cost at startup time of starting this singleton.    nsIInterfaceInfoManager* iim = XPTI_GetInterfaceInfoManager();    NS_IF_RELEASE(iim);    // get the logging service so that it gets registered with the service     // manager, and later unregistered#ifdef NS_ENABLE_LOGGING    nsCOMPtr<nsILoggingService> logServ = do_GetService(kLoggingServiceCID, &rv);#endif    return rv;}