diff --git a/mozilla/xpcom/build/nsXPComInit.cpp b/mozilla/xpcom/build/nsXPComInit.cpp index 890aee1f030..758a8e2c04a 100644 --- a/mozilla/xpcom/build/nsXPComInit.cpp +++ b/mozilla/xpcom/build/nsXPComInit.cpp @@ -417,6 +417,46 @@ nsresult NS_COM NS_InitXPCOM2(nsIServiceManager* *result, NS_ADDREF(*result = serviceManager); } } +#if defined(WINCE) + else + { + // WINCE may cause multiple XPCOM initializations, due to some unicode + // string conversions other code requiers.... + // + // Handle that here. + + compMgr = nsComponentManagerImpl::gComponentManager; + + PRBool value; + if (binDirectory) + { + rv = binDirectory->IsDirectory(&value); + + if (NS_SUCCEEDED(rv) && value) + { + gDirectoryService->Define(NS_XPCOM_INIT_CURRENT_PROCESS_DIR, binDirectory); + } + + nsCAutoString path; + binDirectory->GetNativePath(path); + nsFileSpec spec(path.get()); + + nsSpecialSystemDirectory::Set(nsSpecialSystemDirectory::Moz_BinDirectory, &spec); + } + if (appFileLocationProvider) { + rv = dirService->RegisterProvider(appFileLocationProvider); + if (NS_FAILED(rv)) + { + return rv; + } + } + + if (result) { + nsIServiceManager *serviceManager = NS_STATIC_CAST(nsIServiceManager*, compMgr); + NS_ADDREF(*result = serviceManager); + } + } +#endif /* WINCE */ nsCOMPtr memory; NS_GetMemoryManager(getter_AddRefs(memory)); diff --git a/mozilla/xpcom/threads/nsThread.cpp b/mozilla/xpcom/threads/nsThread.cpp index 0f37b5ac3e8..b2cfb0ada66 100644 --- a/mozilla/xpcom/threads/nsThread.cpp +++ b/mozilla/xpcom/threads/nsThread.cpp @@ -393,6 +393,7 @@ nsIThread::GetIThread(PRThread* prthread, nsIThread* *result) return NS_OK; } +#if !defined(WINCE) NS_COM nsresult nsIThread::SetMainThread() { @@ -404,6 +405,15 @@ nsIThread::SetMainThread() } return GetCurrent(&gMainThread); } +#else /* WINCE */ +NS_COM nsresult +nsIThread::SetMainThread() +{ + // wince, being unicode, may unfortunately initialize xpcom2 multiple + // times to perform rudimentary upper case conversion.... + return GetCurrent(&gMainThread); +} +#endif /* WINCE */ NS_COM nsresult nsIThread::GetMainThread(nsIThread **result)