if (aPath) NS_InitXPCOM(&sServiceManager, aPath); else NS_InitXPCOM(&sServiceManager, nsnull);  #ifdef HACK_AROUND_NONREENTRANT_INITXPCOM sXPCOMInitializedFlag = PR_TRUE; sXPCOMCleanupHack.mCleanOnExit = PR_TRUE; #endif
NS_NewLocalFile(aPath, PR_FALSE, &localFile);
nsresult NS_InitEmbedding(nsILocalFile *aPath){    // Reentrant calls to this method do nothing except increment a counter    sInitCounter++;    if (sInitCounter > 1)        return NS_OK;    // Initialise XPCOM#ifdef HACK_AROUND_NONREENTRANT_INITXPCOM    // Can't call NS_InitXPCom more than once or things go boom!    if (!sXPCOMInitializedFlag)#endif    {        // Initialise XPCOM        if (aPath)            NS_InitXPCOM(&sServiceManager, aPath);        else            NS_InitXPCOM(&sServiceManager, nsnull);#ifdef HACK_AROUND_NONREENTRANT_INITXPCOM        sXPCOMInitializedFlag = PR_TRUE;        sXPCOMCleanupHack.mCleanOnExit = PR_TRUE;#endif    }    nsresult rv;    // Register components    if (!sRegistryInitializedFlag)    {        // XXX hack method        NS_SetupRegistry();                rv = nsComponentManager::AutoRegister(nsIComponentManager::NS_Startup,                                              NULL /* default */);        if (NS_FAILED(rv))        {            NS_ASSERTION(PR_FALSE, "Could not AutoRegister");            return rv;        }        sRegistryInitializedFlag = PR_TRUE;    }    // Create the Event Queue for the UI thread...    //    // If an event queue already exists for the thread, then     // CreateThreadEventQueue(...) will fail...    NS_WITH_SERVICE(nsIEventQueueService, eventQService,                    kEventQueueServiceCID, &rv);    if (NS_FAILED(rv))      return rv;    eventQService->CreateThreadEventQueue();#ifdef HACK_AROUND_THREADING_ISSUES    // XXX force certain objects to be created on the main thread    NS_WITH_SERVICE(nsIStringBundleService, sBundleService,                    kStringBundleServiceCID, &rv);    if (NS_SUCCEEDED(rv))    {        nsCOMPtr<nsIStringBundle> stringBundle;        char*  propertyURL = "chrome://necko/locale/necko.properties";        nsILocale *locale = nsnull;        rv = sBundleService->CreateBundle(propertyURL, locale,                                          getter_AddRefs(stringBundle));    }#endif    // Init the chrome registry.    nsCOMPtr <nsIChromeRegistry> chromeReg =         do_GetService("component://netscape/chrome/chrome-registry");    NS_ASSERTION(chromeReg, "chrome check couldn't get the chrome registry");    if (!chromeReg)        return NS_ERROR_FAILURE;    // Ignore the return value here.  If chrome is already initialized    // this call will return an error even though nothing is wrong.    chromeReg->CheckForNewChrome();    return NS_OK;}