nsresult rv = NS_OK;   rv = nsIThread::SetMainThread(); if (NS_FAILED(rv)) return rv;   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; } }    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;  PRBool value;  if (binDirectory) { rv = binDirectory->IsDirectory(&value);  if (NS_SUCCEEDED(rv) && value) gDirectoryService->Define(NS_XPCOM_INIT_CURRENT_PROCESS_DIR, binDirectory);   char* path; binDirectory->GetPath(&path); nsFileSpec spec(path); nsMemory::Free(path);  nsSpecialSystemDirectory::Set(nsSpecialSystemDirectory::Moz_BinDirectory, &spec);  }   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      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_PROGID, registryFactory, PR_TRUE); NS_RELEASE(registryFactory); if (NS_FAILED(rv)) return rv;   { 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_PROGID, categoryManagerFactory, PR_TRUE); if ( NS_FAILED(rv) ) return rv; }  rv = RegisterGenericFactory(compMgr, kMemoryCID, NS_MEMORY_CLASSNAME, NS_MEMORY_PROGID, nsMemoryImpl::Create); if (NS_FAILED(rv)) return rv;  rv = RegisterGenericFactory(compMgr, kErrorServiceCID, NS_ERRORSERVICE_NAME, NS_ERRORSERVICE_PROGID, nsErrorService::Create); if (NS_FAILED(rv)) return rv;  rv = RegisterGenericFactory(compMgr, kArenaCID, NS_ARENA_CLASSNAME, NS_ARENA_PROGID, ArenaImpl::Create); if (NS_FAILED(rv)) return rv;  #if 0 rv = RegisterGenericFactory(compMgr, kBufferCID, NS_BUFFER_CLASSNAME, NS_BUFFER_PROGID, nsBuffer::Create); if (NS_FAILED(rv)) return rv; #endif  rv = RegisterGenericFactory(compMgr, kByteBufferCID, NS_BYTEBUFFER_CLASSNAME, NS_BYTEBUFFER_PROGID, ByteBufferImpl::Create); if (NS_FAILED(rv)) return rv;  rv = RegisterGenericFactory(compMgr, kScriptableInputStreamCID, NS_SCRIPTABLEINPUTSTREAM_CLASSNAME, NS_SCRIPTABLEINPUTSTREAM_PROGID, nsScriptableInputStream::Create); if (NS_FAILED(rv)) return rv;  #ifdef PAGE_MANAGER rv = RegisterGenericFactory(compMgr, kPageManagerCID, NS_PAGEMANAGER_CLASSNAME, NS_PAGEMANAGER_PROGID, nsPageMgr::Create); if (NS_FAILED(rv)) return rv; #endif  rv = RegisterGenericFactory(compMgr, kPropertiesCID, NS_PROPERTIES_CLASSNAME, NS_PROPERTIES_PROGID, nsProperties::Create); if (NS_FAILED(rv)) return rv;  rv = RegisterGenericFactory(compMgr, kPersistentPropertiesCID, NS_PERSISTENTPROPERTIES_CLASSNAME, NS_PERSISTENTPROPERTIES_PROGID, nsPersistentProperties::Create); if (NS_FAILED(rv)) return rv;  rv = RegisterGenericFactory(compMgr, kSupportsArrayCID, NS_SUPPORTSARRAY_CLASSNAME, NS_SUPPORTSARRAY_PROGID, nsSupportsArray::Create); if (NS_FAILED(rv)) return rv;  rv = RegisterGenericFactory(compMgr, kConsoleServiceCID, NS_CONSOLESERVICE_CLASSNAME, NS_CONSOLESERVICE_PROGID, nsConsoleServiceConstructor); if (NS_FAILED(rv)) return rv;  rv = RegisterGenericFactory(compMgr, kAtomServiceCID, NS_ATOMSERVICE_CLASSNAME, NS_ATOMSERVICE_PROGID, nsAtomServiceConstructor); if (NS_FAILED(rv)) return rv;  rv = RegisterGenericFactory(compMgr, nsObserver::GetCID(), NS_OBSERVER_CLASSNAME, NS_OBSERVER_PROGID, nsObserver::Create); if (NS_FAILED(rv)) return rv;  rv = RegisterGenericFactory(compMgr, nsObserverService::GetCID(), NS_OBSERVERSERVICE_CLASSNAME, NS_OBSERVERSERVICE_PROGID, nsObserverService::Create); if (NS_FAILED(rv)) return rv;  rv = RegisterGenericFactory(compMgr, kGenericFactoryCID, NS_GENERICFACTORY_CLASSNAME, NS_GENERICFACTORY_PROGID, nsGenericFactory::Create); if (NS_FAILED(rv)) return rv;  rv = RegisterGenericFactory(compMgr, kEventQueueServiceCID, NS_EVENTQUEUESERVICE_CLASSNAME, NS_EVENTQUEUESERVICE_PROGID, nsEventQueueServiceImpl::Create); if (NS_FAILED(rv)) return rv;  rv = RegisterGenericFactory(compMgr, kEventQueueCID, NS_EVENTQUEUE_CLASSNAME, NS_EVENTQUEUE_PROGID, nsEventQueueImpl::Create); if (NS_FAILED(rv)) return rv;  rv = RegisterGenericFactory(compMgr, kThreadCID, NS_THREAD_CLASSNAME, NS_THREAD_PROGID, nsThread::Create); if (NS_FAILED(rv)) return rv;  rv = RegisterGenericFactory(compMgr, kThreadPoolCID, NS_THREADPOOL_CLASSNAME, NS_THREADPOOL_PROGID, nsThreadPool::Create); if (NS_FAILED(rv)) return rv;  rv = RegisterGenericFactory(compMgr, kProxyObjectManagerCID, NS_XPCOMPROXY_CLASSNAME, NS_XPCOMPROXY_PROGID, nsProxyObjectManager::Create); if (NS_FAILED(rv)) return rv;   rv = RegisterGenericFactory(compMgr, kSupportsIDCID, NS_SUPPORTS_ID_CLASSNAME, NS_SUPPORTS_ID_PROGID, nsSupportsIDImplConstructor); if (NS_FAILED(rv)) return rv;  rv = RegisterGenericFactory(compMgr, kSupportsStringCID, NS_SUPPORTS_STRING_CLASSNAME, NS_SUPPORTS_STRING_PROGID, nsSupportsStringImplConstructor); if (NS_FAILED(rv)) return rv;  rv = RegisterGenericFactory(compMgr, kSupportsWStringCID, NS_SUPPORTS_WSTRING_CLASSNAME, NS_SUPPORTS_WSTRING_PROGID, nsSupportsWStringImplConstructor); if (NS_FAILED(rv)) return rv;  rv = RegisterGenericFactory(compMgr, kSupportsPRBoolCID, NS_SUPPORTS_PRBOOL_CLASSNAME, NS_SUPPORTS_PRBOOL_PROGID, nsSupportsPRBoolImplConstructor); if (NS_FAILED(rv)) return rv;  rv = RegisterGenericFactory(compMgr, kSupportsPRUint8CID, NS_SUPPORTS_PRUINT8_CLASSNAME, NS_SUPPORTS_PRUINT8_PROGID, nsSupportsPRUint8ImplConstructor); if (NS_FAILED(rv)) return rv;  rv = RegisterGenericFactory(compMgr, kSupportsPRUint16CID, NS_SUPPORTS_PRUINT16_CLASSNAME, NS_SUPPORTS_PRUINT16_PROGID, nsSupportsPRUint16ImplConstructor); if (NS_FAILED(rv)) return rv;  rv = RegisterGenericFactory(compMgr, kSupportsPRUint32CID, NS_SUPPORTS_PRUINT32_CLASSNAME, NS_SUPPORTS_PRUINT32_PROGID, nsSupportsPRUint32ImplConstructor); if (NS_FAILED(rv)) return rv;  rv = RegisterGenericFactory(compMgr, kSupportsPRUint64CID, NS_SUPPORTS_PRUINT64_CLASSNAME, NS_SUPPORTS_PRUINT64_PROGID, nsSupportsPRUint64ImplConstructor); if (NS_FAILED(rv)) return rv;  rv = RegisterGenericFactory(compMgr, kSupportsPRTimeCID, NS_SUPPORTS_PRTIME_CLASSNAME, NS_SUPPORTS_PRTIME_PROGID, nsSupportsPRTimeImplConstructor); if (NS_FAILED(rv)) return rv;  rv = RegisterGenericFactory(compMgr, kSupportsCharCID, NS_SUPPORTS_CHAR_CLASSNAME, NS_SUPPORTS_CHAR_PROGID, nsSupportsCharImplConstructor); if (NS_FAILED(rv)) return rv;  rv = RegisterGenericFactory(compMgr, kSupportsPRInt16CID, NS_SUPPORTS_PRINT16_CLASSNAME, NS_SUPPORTS_PRINT16_PROGID, nsSupportsPRInt16ImplConstructor); if (NS_FAILED(rv)) return rv;  rv = RegisterGenericFactory(compMgr, kSupportsPRInt32CID, NS_SUPPORTS_PRINT32_CLASSNAME, NS_SUPPORTS_PRINT32_PROGID, nsSupportsPRInt32ImplConstructor); if (NS_FAILED(rv)) return rv;  rv = RegisterGenericFactory(compMgr, kSupportsPRInt64CID, NS_SUPPORTS_PRINT64_CLASSNAME, NS_SUPPORTS_PRINT64_PROGID, nsSupportsPRInt64ImplConstructor); if (NS_FAILED(rv)) return rv;  rv = RegisterGenericFactory(compMgr, kSupportsFloatCID, NS_SUPPORTS_FLOAT_CLASSNAME, NS_SUPPORTS_FLOAT_PROGID, nsSupportsFloatImplConstructor); if (NS_FAILED(rv)) return rv;  rv = RegisterGenericFactory(compMgr, kSupportsDoubleCID, NS_SUPPORTS_DOUBLE_CLASSNAME, NS_SUPPORTS_DOUBLE_PROGID, nsSupportsDoubleImplConstructor); if (NS_FAILED(rv)) return rv;  rv = RegisterGenericFactory(compMgr, kSupportsVoidCID, NS_SUPPORTS_VOID_CLASSNAME, NS_SUPPORTS_VOID_PROGID, nsSupportsVoidImplConstructor); if (NS_FAILED(rv)) return rv;  rv = RegisterGenericFactory(compMgr, nsLocalFile::GetCID(), NS_LOCAL_FILE_CLASSNAME, NS_LOCAL_FILE_PROGID, nsLocalFile::nsLocalFileConstructor); if (NS_FAILED(rv)) return rv;  rv = RegisterGenericFactory(compMgr, nsDirectoryService::GetCID(), NS_DIRECTORY_SERVICE_CLASSNAME, NS_DIRECTORY_SERVICE_PROGID, nsDirectoryService::Create); if (NS_FAILED(rv)) return rv;  rv = RegisterGenericFactory(compMgr, kFileSpecCID, NS_FILESPEC_CLASSNAME, NS_FILESPEC_PROGID, nsFileSpecImpl::Create); if (NS_FAILED(rv)) return rv;  rv = RegisterGenericFactory(compMgr, kDirectoryIteratorCID, NS_DIRECTORYITERATOR_CLASSNAME, NS_DIRECTORYITERATOR_PROGID, nsDirectoryIteratorImpl::Create); if (NS_FAILED(rv)) return rv;    nsComponentManagerImpl::gComponentManager->PlatformPrePopulateRegistry();   nsIInterfaceInfoManager* iim = XPTI_GetInterfaceInfoManager(); NS_IF_RELEASE(iim);  return rv;
return NS_InitXPCOM2(nsnull, result, binDirectory);
nsresult NS_COM NS_InitXPCOM(nsIServiceManager* *result,                              nsIFile* binDirectory){    nsresult rv = NS_OK;    // Establish the main thread here.    rv = nsIThread::SetMainThread();    if (NS_FAILED(rv)) return rv;    // 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;        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);                    }                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_PROGID,                                  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_PROGID,                                    categoryManagerFactory,                                    PR_TRUE);      if ( NS_FAILED(rv) )        return rv;    }    rv = RegisterGenericFactory(compMgr, kMemoryCID,                                NS_MEMORY_CLASSNAME,                                NS_MEMORY_PROGID,                                nsMemoryImpl::Create);    if (NS_FAILED(rv)) return rv;    rv = RegisterGenericFactory(compMgr, kErrorServiceCID,                                NS_ERRORSERVICE_NAME,                                NS_ERRORSERVICE_PROGID,                                nsErrorService::Create);    if (NS_FAILED(rv)) return rv;    rv = RegisterGenericFactory(compMgr, kArenaCID,                                NS_ARENA_CLASSNAME,                                NS_ARENA_PROGID,                                ArenaImpl::Create);    if (NS_FAILED(rv)) return rv;#if 0    rv = RegisterGenericFactory(compMgr, kBufferCID,                                NS_BUFFER_CLASSNAME,                                NS_BUFFER_PROGID,                                nsBuffer::Create);    if (NS_FAILED(rv)) return rv;#endif    rv = RegisterGenericFactory(compMgr, kByteBufferCID,                                NS_BYTEBUFFER_CLASSNAME,                                NS_BYTEBUFFER_PROGID,                                ByteBufferImpl::Create);    if (NS_FAILED(rv)) return rv;    rv = RegisterGenericFactory(compMgr, kScriptableInputStreamCID,                                NS_SCRIPTABLEINPUTSTREAM_CLASSNAME,                                NS_SCRIPTABLEINPUTSTREAM_PROGID,                                nsScriptableInputStream::Create);    if (NS_FAILED(rv)) return rv;#ifdef PAGE_MANAGER    rv = RegisterGenericFactory(compMgr, kPageManagerCID,                                NS_PAGEMANAGER_CLASSNAME,                                NS_PAGEMANAGER_PROGID,                                nsPageMgr::Create);    if (NS_FAILED(rv)) return rv;#endif    rv = RegisterGenericFactory(compMgr, kPropertiesCID,                                NS_PROPERTIES_CLASSNAME,                                NS_PROPERTIES_PROGID,                                nsProperties::Create);    if (NS_FAILED(rv)) return rv;    rv = RegisterGenericFactory(compMgr, kPersistentPropertiesCID,                                NS_PERSISTENTPROPERTIES_CLASSNAME,                                NS_PERSISTENTPROPERTIES_PROGID,                                nsPersistentProperties::Create);    if (NS_FAILED(rv)) return rv;    rv = RegisterGenericFactory(compMgr, kSupportsArrayCID,                                NS_SUPPORTSARRAY_CLASSNAME,                                NS_SUPPORTSARRAY_PROGID,                                nsSupportsArray::Create);    if (NS_FAILED(rv)) return rv;    rv = RegisterGenericFactory(compMgr, kConsoleServiceCID,                                NS_CONSOLESERVICE_CLASSNAME,                                NS_CONSOLESERVICE_PROGID,                                nsConsoleServiceConstructor);    if (NS_FAILED(rv)) return rv;    rv = RegisterGenericFactory(compMgr, kAtomServiceCID,                                NS_ATOMSERVICE_CLASSNAME,                                NS_ATOMSERVICE_PROGID,                                nsAtomServiceConstructor);    if (NS_FAILED(rv)) return rv;        rv = RegisterGenericFactory(compMgr, nsObserver::GetCID(),                                 NS_OBSERVER_CLASSNAME,                                NS_OBSERVER_PROGID,                                nsObserver::Create);    if (NS_FAILED(rv)) return rv;    rv = RegisterGenericFactory(compMgr, nsObserverService::GetCID(),                                NS_OBSERVERSERVICE_CLASSNAME,                                NS_OBSERVERSERVICE_PROGID,                                nsObserverService::Create);    if (NS_FAILED(rv)) return rv;    rv = RegisterGenericFactory(compMgr, kGenericFactoryCID,                                NS_GENERICFACTORY_CLASSNAME,                                NS_GENERICFACTORY_PROGID,                                nsGenericFactory::Create);    if (NS_FAILED(rv)) return rv;    rv = RegisterGenericFactory(compMgr, kEventQueueServiceCID,                                NS_EVENTQUEUESERVICE_CLASSNAME,                                NS_EVENTQUEUESERVICE_PROGID,                                nsEventQueueServiceImpl::Create);    if (NS_FAILED(rv)) return rv;    rv = RegisterGenericFactory(compMgr, kEventQueueCID,                                NS_EVENTQUEUE_CLASSNAME,                                NS_EVENTQUEUE_PROGID,                                nsEventQueueImpl::Create);    if (NS_FAILED(rv)) return rv;    rv = RegisterGenericFactory(compMgr, kThreadCID,                                NS_THREAD_CLASSNAME,                                NS_THREAD_PROGID,                                nsThread::Create);    if (NS_FAILED(rv)) return rv;    rv = RegisterGenericFactory(compMgr, kThreadPoolCID,                                NS_THREADPOOL_CLASSNAME,                                NS_THREADPOOL_PROGID,                                nsThreadPool::Create);    if (NS_FAILED(rv)) return rv;    rv = RegisterGenericFactory(compMgr,                                 kProxyObjectManagerCID,                                 NS_XPCOMPROXY_CLASSNAME,                                NS_XPCOMPROXY_PROGID,                                nsProxyObjectManager::Create);    if (NS_FAILED(rv)) return rv;    rv = RegisterGenericFactory(compMgr, kSupportsIDCID,                                NS_SUPPORTS_ID_CLASSNAME,                                NS_SUPPORTS_ID_PROGID,                                nsSupportsIDImplConstructor);    if (NS_FAILED(rv)) return rv;    rv = RegisterGenericFactory(compMgr, kSupportsStringCID,                                NS_SUPPORTS_STRING_CLASSNAME,                                NS_SUPPORTS_STRING_PROGID,                                nsSupportsStringImplConstructor);    if (NS_FAILED(rv)) return rv;    rv = RegisterGenericFactory(compMgr, kSupportsWStringCID,                                NS_SUPPORTS_WSTRING_CLASSNAME,                                NS_SUPPORTS_WSTRING_PROGID,                                nsSupportsWStringImplConstructor);    if (NS_FAILED(rv)) return rv;    rv = RegisterGenericFactory(compMgr, kSupportsPRBoolCID,                                NS_SUPPORTS_PRBOOL_CLASSNAME,                                NS_SUPPORTS_PRBOOL_PROGID,                                nsSupportsPRBoolImplConstructor);    if (NS_FAILED(rv)) return rv;    rv = RegisterGenericFactory(compMgr, kSupportsPRUint8CID,                                NS_SUPPORTS_PRUINT8_CLASSNAME,                                NS_SUPPORTS_PRUINT8_PROGID,                                nsSupportsPRUint8ImplConstructor);    if (NS_FAILED(rv)) return rv;    rv = RegisterGenericFactory(compMgr, kSupportsPRUint16CID,                                NS_SUPPORTS_PRUINT16_CLASSNAME,                                NS_SUPPORTS_PRUINT16_PROGID,                                nsSupportsPRUint16ImplConstructor);    if (NS_FAILED(rv)) return rv;    rv = RegisterGenericFactory(compMgr, kSupportsPRUint32CID,                                NS_SUPPORTS_PRUINT32_CLASSNAME,                                NS_SUPPORTS_PRUINT32_PROGID,                                nsSupportsPRUint32ImplConstructor);    if (NS_FAILED(rv)) return rv;    rv = RegisterGenericFactory(compMgr, kSupportsPRUint64CID,                                NS_SUPPORTS_PRUINT64_CLASSNAME,                                NS_SUPPORTS_PRUINT64_PROGID,                                nsSupportsPRUint64ImplConstructor);    if (NS_FAILED(rv)) return rv;    rv = RegisterGenericFactory(compMgr, kSupportsPRTimeCID,                                NS_SUPPORTS_PRTIME_CLASSNAME,                                NS_SUPPORTS_PRTIME_PROGID,                                nsSupportsPRTimeImplConstructor);    if (NS_FAILED(rv)) return rv;    rv = RegisterGenericFactory(compMgr, kSupportsCharCID,                                NS_SUPPORTS_CHAR_CLASSNAME,                                NS_SUPPORTS_CHAR_PROGID,                                nsSupportsCharImplConstructor);    if (NS_FAILED(rv)) return rv;    rv = RegisterGenericFactory(compMgr, kSupportsPRInt16CID,                                NS_SUPPORTS_PRINT16_CLASSNAME,                                NS_SUPPORTS_PRINT16_PROGID,                                nsSupportsPRInt16ImplConstructor);    if (NS_FAILED(rv)) return rv;    rv = RegisterGenericFactory(compMgr, kSupportsPRInt32CID,                                NS_SUPPORTS_PRINT32_CLASSNAME,                                NS_SUPPORTS_PRINT32_PROGID,                                nsSupportsPRInt32ImplConstructor);    if (NS_FAILED(rv)) return rv;    rv = RegisterGenericFactory(compMgr, kSupportsPRInt64CID,                                NS_SUPPORTS_PRINT64_CLASSNAME,                                NS_SUPPORTS_PRINT64_PROGID,                                nsSupportsPRInt64ImplConstructor);    if (NS_FAILED(rv)) return rv;    rv = RegisterGenericFactory(compMgr, kSupportsFloatCID,                                NS_SUPPORTS_FLOAT_CLASSNAME,                                NS_SUPPORTS_FLOAT_PROGID,                                nsSupportsFloatImplConstructor);    if (NS_FAILED(rv)) return rv;    rv = RegisterGenericFactory(compMgr, kSupportsDoubleCID,                                NS_SUPPORTS_DOUBLE_CLASSNAME,                                NS_SUPPORTS_DOUBLE_PROGID,                                nsSupportsDoubleImplConstructor);    if (NS_FAILED(rv)) return rv;    rv = RegisterGenericFactory(compMgr, kSupportsVoidCID,                                NS_SUPPORTS_VOID_CLASSNAME,                                NS_SUPPORTS_VOID_PROGID,                                nsSupportsVoidImplConstructor);    if (NS_FAILED(rv)) return rv;    rv = RegisterGenericFactory(compMgr, nsLocalFile::GetCID(),                                NS_LOCAL_FILE_CLASSNAME,                                NS_LOCAL_FILE_PROGID,                                nsLocalFile::nsLocalFileConstructor);    if (NS_FAILED(rv)) return rv;    rv = RegisterGenericFactory(compMgr, nsDirectoryService::GetCID(),                                NS_DIRECTORY_SERVICE_CLASSNAME,                                NS_DIRECTORY_SERVICE_PROGID,                                nsDirectoryService::Create);    if (NS_FAILED(rv)) return rv;    rv = RegisterGenericFactory(compMgr, kFileSpecCID,                                NS_FILESPEC_CLASSNAME,                                NS_FILESPEC_PROGID,                                nsFileSpecImpl::Create);    if (NS_FAILED(rv)) return rv;    rv = RegisterGenericFactory(compMgr, kDirectoryIteratorCID,                                NS_DIRECTORYITERATOR_CLASSNAME,                                NS_DIRECTORYITERATOR_PROGID,                                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);    return rv;}