backing out b=418703, caused test 40118 to fail on WINNT 5.2 qm-win2k3-01 dep unit test tinderbox
authorblassey@mozilla.com
Wed, 05 Mar 2008 14:56:43 -0800
changeset 12627 d72632fcdb6a69cce7ea9e6afb8f8b67ab9bab82
parent 12626 feb246d2c432675022bfc1e576c1fa10aa5e5f74
child 12628 3db4d83eeffc283a287e2e113346afa38eb90284
push id1
push usersledru@mozilla.com
push dateThu, 04 Dec 2014 17:57:20 +0000
bugs418703, 40118
milestone1.9b5pre
backing out b=418703, caused test 40118 to fail on WINNT 5.2 qm-win2k3-01 dep unit test tinderbox
accessible/src/msaa/nsAccessNodeWrap.cpp
accessible/src/msaa/nsAccessibleWrap.cpp
browser/app/nsBrowserApp.cpp
browser/components/migration/src/nsIEProfileMigrator.cpp
browser/components/shell/src/nsWindowsShellService.cpp
db/mork/src/morkFile.cpp
embedding/browser/activex/src/plugin/LegacyPlugin.cpp
embedding/browser/activex/src/plugin/XPCDocument.cpp
embedding/browser/activex/src/plugin/XPConnect.cpp
extensions/auth/nsAuthSSPI.cpp
gfx/src/thebes/nsSystemFontsWin.cpp
gfx/src/thebes/nsSystemFontsWin.h
gfx/src/windows/nsDeviceContextWin.cpp
gfx/src/windows/nsDeviceContextWin.h
gfx/src/windows/nsFontMetricsWin.cpp
gfx/thebes/src/gfxWindowsFonts.cpp
gfx/thebes/src/gfxWindowsSurface.cpp
intl/uconv/src/nsWinCharset.cpp
ipc/ipcd/client/src/ipcConnectionWin.cpp
modules/libpr0n/decoders/icon/win/nsIconChannel.cpp
modules/libpr0n/decoders/icon/win/nsIconChannel.h
modules/oji/src/scd.cpp
modules/plugin/base/src/nsPluginDirServiceProvider.cpp
modules/plugin/base/src/nsPluginHostImpl.cpp
modules/plugin/base/src/nsPluginNativeWindowWin.cpp
modules/plugin/base/src/nsPluginsDirWin.cpp
modules/plugin/samples/default/windows/dialogs.cpp
modules/plugin/samples/default/windows/npshell.cpp
modules/plugin/samples/default/windows/plugin.cpp
modules/plugin/samples/default/windows/plugin.h
modules/plugin/samples/default/windows/utils.cpp
modules/plugin/samples/default/windows/utils.h
modules/plugin/tools/sdk/samples/basic/windows/plugin.cpp
modules/plugin/tools/sdk/samples/scriptable/windows/plugin.cpp
rdf/datasource/src/nsFileSystemDataSource.cpp
toolkit/components/startup/src/nsUserInfoWin.cpp
uriloader/exthandler/win/nsMIMEInfoWin.cpp
uriloader/exthandler/win/nsOSHelperAppService.cpp
widget/src/windows/nsAppShell.cpp
widget/src/windows/nsBidiKeyboard.cpp
widget/src/windows/nsBidiKeyboard.h
widget/src/windows/nsClipboard.cpp
widget/src/windows/nsDataObj.h
widget/src/windows/nsFilePicker.cpp
widget/src/windows/nsLookAndFeel.cpp
widget/src/windows/nsNativeThemeWin.cpp
widget/src/windows/nsSound.cpp
widget/src/windows/nsToolkit.cpp
widget/src/windows/nsWindow.cpp
widget/src/windows/nsWindow.h
xpcom/base/nsDebugImpl.cpp
xpcom/base/nsStackWalk.cpp
xpcom/io/SpecialSystemDirectory.cpp
xpcom/io/nsLocalFileWin.cpp
xpcom/threads/nsProcessCommon.cpp
xpcom/windbgdlg/Makefile.in
xpcom/windbgdlg/windbgdlg.cpp
xpfe/bootstrap/showOSAlert.cpp
--- a/accessible/src/msaa/nsAccessNodeWrap.cpp
+++ b/accessible/src/msaa/nsAccessNodeWrap.cpp
@@ -571,17 +571,17 @@ void nsAccessNodeWrap::InitAccessibility
   }
 
   nsCOMPtr<nsIPrefBranch> prefBranch(do_GetService(NS_PREFSERVICE_CONTRACTID));
   if (prefBranch) {
     prefBranch->GetBoolPref("accessibility.disableenumvariant", &gIsEnumVariantSupportDisabled);
   }
 
   if (!gmUserLib) {
-    gmUserLib =::LoadLibraryW(L"USER32.DLL");
+    gmUserLib =::LoadLibrary("USER32.DLL");
   }
 
   if (gmUserLib) {
     if (!gmNotifyWinEvent)
       gmNotifyWinEvent = (LPFNNOTIFYWINEVENT)GetProcAddress(gmUserLib,"NotifyWinEvent");
     if (!gmGetGUIThreadInfo)
       gmGetGUIThreadInfo = (LPFNGETGUITHREADINFO)GetProcAddress(gmUserLib,"GetGUIThreadInfo");
   }
--- a/accessible/src/msaa/nsAccessibleWrap.cpp
+++ b/accessible/src/msaa/nsAccessibleWrap.cpp
@@ -151,17 +151,17 @@ STDMETHODIMP nsAccessibleWrap::QueryInte
 
 STDMETHODIMP nsAccessibleWrap::AccessibleObjectFromWindow(HWND hwnd,
                                                           DWORD dwObjectID,
                                                           REFIID riid,
                                                           void **ppvObject)
 {
   // open the dll dynamically
   if (!gmAccLib)
-    gmAccLib =::LoadLibraryW(L"OLEACC.DLL");
+    gmAccLib =::LoadLibrary("OLEACC.DLL");
 
   if (gmAccLib) {
     if (!gmAccessibleObjectFromWindow)
       gmAccessibleObjectFromWindow = (LPFNACCESSIBLEOBJECTFROMWINDOW)GetProcAddress(gmAccLib,"AccessibleObjectFromWindow");
 
     if (gmAccessibleObjectFromWindow)
       return gmAccessibleObjectFromWindow(hwnd, dwObjectID, riid, ppvObject);
   }
--- a/browser/app/nsBrowserApp.cpp
+++ b/browser/app/nsBrowserApp.cpp
@@ -59,19 +59,21 @@
 #endif
 
 static void Output(const char *fmt, ... )
 {
   va_list ap;
   va_start(ap, fmt);
 
 #if defined(XP_WIN) && !MOZ_WINCONSOLE
-  PRUnichar msg[2048];
-  _vsnwprintf(msg, sizeof(msg), NS_ConvertUTF8toUTF16(fmt).get(), ap);
-  MessageBoxW(NULL, msg, L"XULRunner", MB_OK | MB_ICONERROR);
+  char msg[2048];
+
+  _vsnprintf(msg, sizeof(msg), fmt, ap);
+
+  MessageBox(NULL, msg, "XULRunner", MB_OK | MB_ICONERROR);
 #else
   vfprintf(stderr, fmt, ap);
 #endif
 
   va_end(ap);
 }
 
 /**
--- a/browser/components/migration/src/nsIEProfileMigrator.cpp
+++ b/browser/components/migration/src/nsIEProfileMigrator.cpp
@@ -862,17 +862,17 @@ static GUID IEPStoreSiteAuthGUID = { 0x5
 
 nsresult
 nsIEProfileMigrator::CopyPasswords(PRBool aReplace)
 {
   HRESULT hr;
   nsresult rv;
   nsVoidArray signonsFound;
 
-  HMODULE pstoreDLL = ::LoadLibraryW(L"pstorec.dll");
+  HMODULE pstoreDLL = ::LoadLibrary("pstorec.dll");
   if (!pstoreDLL) {
     // XXXben TODO
     // Need to figure out what to do here on Windows 98 etc... it may be that the key is universal read
     // and we can just blunder into the registry and use CryptUnprotect to get the data out. 
     return NS_ERROR_FAILURE;
   }
 
   PStoreCreateInstancePtr PStoreCreateInstance = (PStoreCreateInstancePtr)::GetProcAddress(pstoreDLL, "PStoreCreateInstance");
@@ -1172,17 +1172,17 @@ nsIEProfileMigrator::GetUserNameAndPass(
 //
 // "Quite Easily Done". ;-)
 // 
 nsresult
 nsIEProfileMigrator::CopyFormData(PRBool aReplace)
 {
   HRESULT hr;
 
-  HMODULE pstoreDLL = ::LoadLibraryW(L"pstorec.dll");
+  HMODULE pstoreDLL = ::LoadLibrary("pstorec.dll");
   if (!pstoreDLL) {
     // XXXben TODO
     // Need to figure out what to do here on Windows 98 etc... it may be that the key is universal read
     // and we can just blunder into the registry and use CryptUnprotect to get the data out. 
     return NS_ERROR_FAILURE;
   }
 
   PStoreCreateInstancePtr PStoreCreateInstance = (PStoreCreateInstancePtr)::GetProcAddress(pstoreDLL, "PStoreCreateInstance");
@@ -1405,29 +1405,30 @@ nsIEProfileMigrator::CopySmartKeywords(P
   return NS_OK;
 }
 
 void 
 nsIEProfileMigrator::ResolveShortcut(const nsString &aFileName, char** aOutURL) 
 {
   HRESULT result;
 
-  IUniformResourceLocatorW* urlLink = nsnull;
+  IUniformResourceLocator* urlLink = nsnull;
   result = ::CoCreateInstance(CLSID_InternetShortcut, NULL, CLSCTX_INPROC_SERVER,
-                              IID_IUniformResourceLocatorW, (void**)&urlLink);
+                              IID_IUniformResourceLocator, (void**)&urlLink);
   if (SUCCEEDED(result) && urlLink) {
     IPersistFile* urlFile = nsnull;
     result = urlLink->QueryInterface(IID_IPersistFile, (void**)&urlFile);
     if (SUCCEEDED(result) && urlFile) {
       result = urlFile->Load(aFileName.get(), STGM_READ);
       if (SUCCEEDED(result) ) {
-        LPWSTR lpTemp = nsnull;
+        LPSTR lpTemp = nsnull;
         result = urlLink->GetURL(&lpTemp);
         if (SUCCEEDED(result) && lpTemp) {
-          *aOutURL = *aOutURL = (char*)ToNewUTF8String(nsDependentString(lpTemp));
+          *aOutURL = PL_strdup(lpTemp);
+
           // free the string that GetURL alloc'd
           ::CoTaskMemFree(lpTemp);
         }
       }
       urlFile->Release();
     }
     urlLink->Release();
   }
--- a/browser/components/shell/src/nsWindowsShellService.cpp
+++ b/browser/components/shell/src/nsWindowsShellService.cpp
@@ -391,30 +391,30 @@ nsWindowsShellService::SetDefaultBrowser
   NS_ENSURE_SUCCESS(rv, rv);
 
   rv = appHelper->AppendNative(NS_LITERAL_CSTRING("uninstall"));
   NS_ENSURE_SUCCESS(rv, rv);
 
   rv = appHelper->AppendNative(NS_LITERAL_CSTRING("helper.exe"));
   NS_ENSURE_SUCCESS(rv, rv);
 
-  nsAutoString appHelperPath;
-  rv = appHelper->GetPath(appHelperPath);
+  nsCAutoString appHelperPath;
+  rv = appHelper->GetNativePath(appHelperPath);
   NS_ENSURE_SUCCESS(rv, rv);
 
   if (aForAllUsers) {
     appHelperPath.AppendLiteral(" /SetAsDefaultAppGlobal");
   } else {
     appHelperPath.AppendLiteral(" /SetAsDefaultAppUser");
   }
 
-  STARTUPINFOW si = {sizeof(si), 0};
+  STARTUPINFO si = {sizeof(si), 0};
   PROCESS_INFORMATION pi = {0};
 
-  BOOL ok = CreateProcessW(NULL, (LPWSTR)appHelperPath.get(), NULL, NULL,
+  BOOL ok = CreateProcess(NULL, (LPSTR)appHelperPath.get(), NULL, NULL,
                           FALSE, 0, NULL, NULL, &si, &pi);
 
   if (!ok)
     return NS_ERROR_FAILURE;
 
   CloseHandle(pi.hProcess);
   CloseHandle(pi.hThread);
 
--- a/db/mork/src/morkFile.cpp
+++ b/db/mork/src/morkFile.cpp
@@ -924,14 +924,24 @@ morkStdioFile::Steal(nsIMdbEnv* ev, nsIM
 }
 
 
 #if defined(MORK_WIN)
 
 void mork_fileflush(FILE * file)
 {
   fflush(file);
+#ifndef WINCE
+  OSVERSIONINFOA vi = { sizeof(OSVERSIONINFOA) };
+  if ((GetVersionExA(&vi) && vi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS))
+  {
+    // Win9x/ME
+    int fd = fileno(file);
+    HANDLE fh = (HANDLE)_get_osfhandle(fd);
+    FlushFileBuffers(fh);
+  }
+#endif
 }
 
 #endif /*MORK_WIN*/
 
 
 //3456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789
--- a/embedding/browser/activex/src/plugin/LegacyPlugin.cpp
+++ b/embedding/browser/activex/src/plugin/LegacyPlugin.cpp
@@ -298,17 +298,18 @@ ShowError(MozAxPluginErrors errorCode, c
         }
         break;
     case MozAxErrorCouldNotCreateControl:
         {
             USES_CONVERSION;
             LPOLESTR szClsid;
             StringFromCLSID(clsid, &szClsid);
             _sntprintf(szBuffer, kBufSize - 1,
-                _T("Could not create the control %s. Check that it has been installed on your computer and that this page correctly references it."), OLE2T(szClsid));
+                _T("Could not create the control %s. Check that it has been installed on your computer "
+                   "and that this page correctly references it."), OLE2T(szClsid));
             CoTaskMemFree(szClsid);
             szMsg = szBuffer;
         }
         break;
     }
     szBuffer[kBufSize - 1] = TCHAR('\0');
     if (szMsg)
         MessageBox(NULL, szMsg, _T("ActiveX Error"), MB_OK | MB_ICONWARNING);
--- a/embedding/browser/activex/src/plugin/XPCDocument.cpp
+++ b/embedding/browser/activex/src/plugin/XPCDocument.cpp
@@ -1910,17 +1910,17 @@ END_COM_MAP()
         if (doc)
         {
             nsIURI *baseURI = doc->GetBaseURI();
             nsCAutoString spec;
             if (baseURI &&
                 NS_SUCCEEDED(baseURI->GetSpec(spec)))
             {
                 USES_CONVERSION;
-                if (FAILED(CreateURLMoniker(NULL, A2CW(spec.get()), &baseURLMoniker)))
+                if (FAILED(CreateURLMoniker(NULL, T2CW(spec.get()), &baseURLMoniker)))
                     return E_UNEXPECTED;
             }
         }
 
         // Make the moniker
         HRESULT hr = CreateURLMoniker(baseURLMoniker, szName, ppmk);
         if (SUCCEEDED(hr) && !*ppmk)
             hr = E_FAIL;
--- a/embedding/browser/activex/src/plugin/XPConnect.cpp
+++ b/embedding/browser/activex/src/plugin/XPConnect.cpp
@@ -367,17 +367,17 @@ nsScriptablePeer::ConvertVariants(VARIAN
 
     // NOTE: THIS IS AN UGLY BACKWARDS COMPATIBILITY HACK TO WORKAROUND
     // XPCOM GLUE'S INABILITY TO FIND A CERTAIN ENTRY POINT IN MOZ1.0.x/NS7.0!
     // DO NOT TAUNT THE HACK
     if (NS_FAILED(rv))
     {
         // do_CreateInstance macro is broken so load the component manager by
         // hand and get it to create the component.
-        HMODULE hlib = ::LoadLibraryW(L"xpcom.dll");
+        HMODULE hlib = ::LoadLibrary("xpcom.dll");
         if (hlib)
         {
             nsIComponentManager *pManager = nsnull; // A frozen interface, even in 1.0.x
             typedef nsresult (PR_CALLBACK *Moz1XGetComponentManagerFunc)(nsIComponentManager* *result);
             Moz1XGetComponentManagerFunc compMgr = (Moz1XGetComponentManagerFunc)
                 ::GetProcAddress(hlib, "NS_GetComponentManager");
             if (compMgr)
             {
--- a/extensions/auth/nsAuthSSPI.cpp
+++ b/extensions/auth/nsAuthSSPI.cpp
@@ -47,18 +47,16 @@
 
 #include "nsAuthSSPI.h"
 #include "nsIServiceManager.h"
 #include "nsIDNSService.h"
 #include "nsIDNSRecord.h"
 #include "nsNetCID.h"
 #include "nsCOMPtr.h"
 
-#include <windows.h>
-
 #define SEC_SUCCESS(Status) ((Status) >= 0)
 
 #ifndef KERB_WRAP_NO_ENCRYPT
 #define KERB_WRAP_NO_ENCRYPT 0x80000001
 #endif
 
 #ifndef SECBUFFER_PADDING
 #define SECBUFFER_PADDING 9
@@ -100,35 +98,35 @@ static const char *MapErrorCode(int rc)
 }
 #else
 #define MapErrorCode(_rc) ""
 #endif
 
 //-----------------------------------------------------------------------------
 
 static HINSTANCE                 sspi_lib; 
-static PSecurityFunctionTableW    sspi;
+static PSecurityFunctionTable    sspi;
 
 static nsresult
 InitSSPI()
 {
-    PSecurityFunctionTableW (*initFun)(void);
+    PSecurityFunctionTable (*initFun)(void);
 
     LOG(("  InitSSPI\n"));
 
-    sspi_lib = LoadLibraryW(L"secur32.dll");
+    sspi_lib = LoadLibrary("secur32.dll");
     if (!sspi_lib) {
-      sspi_lib = LoadLibraryW(L"security.dll");
+        sspi_lib = LoadLibrary("security.dll");
         if (!sspi_lib) {
             LOG(("SSPI library not found"));
             return NS_ERROR_UNEXPECTED;
         }
     }
 
-    initFun = (PSecurityFunctionTableW (*)(void))
+    initFun = (PSecurityFunctionTable (*)(void))
             GetProcAddress(sspi_lib, "InitSecurityInterfaceA");
     if (!initFun) {
         LOG(("InitSecurityInterfaceA not found"));
         return NS_ERROR_UNEXPECTED;
     }
 
     sspi = initFun();
     if (!sspi) {
@@ -239,41 +237,43 @@ nsAuthSSPI::Init(const char *serviceName
     nsresult rv;
 
     // XXX lazy initialization like this assumes that we are single threaded
     if (!sspi) {
         rv = InitSSPI();
         if (NS_FAILED(rv))
             return rv;
     }
-    SEC_WCHAR *package;
+
+    SEC_CHAR *package;
 
-    package = (SEC_WCHAR *) pTypeName[(int)mPackage];
+    package = (SEC_CHAR *) pTypeName[(int)mPackage];
+
     if (mPackage != PACKAGE_TYPE_NTLM)
     {
         rv = MakeSN(serviceName, mServiceName);
         if (NS_FAILED(rv))
             return rv;
         mServiceFlags = serviceFlags;
     }
 
     SECURITY_STATUS rc;
 
-    PSecPkgInfoW pinfo;
-    rc = (sspi->QuerySecurityPackageInfoW)(package, &pinfo);
+    PSecPkgInfo pinfo;
+    rc = (sspi->QuerySecurityPackageInfo)(package, &pinfo);
     if (rc != SEC_E_OK) {
         LOG(("%s package not found\n", package));
         return NS_ERROR_UNEXPECTED;
     }
     mMaxTokenLen = pinfo->cbMaxToken;
     (sspi->FreeContextBuffer)(pinfo);
 
     TimeStamp useBefore;
 
-    rc = (sspi->AcquireCredentialsHandleW)(NULL,
+    rc = (sspi->AcquireCredentialsHandle)(NULL,
                                           package,
                                           SECPKG_CRED_OUTBOUND,
                                           NULL,
                                           NULL,
                                           NULL,
                                           NULL,
                                           &mCred,
                                           &useBefore);
@@ -331,23 +331,25 @@ nsAuthSSPI::GetNextToken(const void *inT
     obd.cBuffers = 1;
     obd.pBuffers = &ob;
     ob.BufferType = SECBUFFER_TOKEN;
     ob.cbBuffer = mMaxTokenLen;
     ob.pvBuffer = nsMemory::Alloc(ob.cbBuffer);
     if (!ob.pvBuffer)
         return NS_ERROR_OUT_OF_MEMORY;
     memset(ob.pvBuffer, 0, ob.cbBuffer);
-    SEC_WCHAR *sn;
+
+    SEC_CHAR *sn;
+
     if (mPackage == PACKAGE_TYPE_NTLM)
         sn = NULL;
     else
-        sn = (SEC_WCHAR *) mServiceName.get();
+        sn = (SEC_CHAR *) mServiceName.get();
 
-    rc = (sspi->InitializeSecurityContextW)(&mCred,
+    rc = (sspi->InitializeSecurityContext)(&mCred,
                                            ctxIn,
                                            sn,
                                            ctxReq,
                                            0,
                                            SECURITY_NATIVE_DREP,
                                            inToken ? &ibd : NULL,
                                            0,
                                            &mCtxt,
@@ -454,17 +456,17 @@ nsAuthSSPI::Wrap(const void *inToken,
                  PRUint32   *outTokenLen)
 {
     SECURITY_STATUS rc;
 
     SecBufferDesc ibd;
     secBuffers bufs;
     SecPkgContext_Sizes sizes;
 
-    rc = (sspi->QueryContextAttributesW)(
+    rc = (sspi->QueryContextAttributes)(
          &mCtxt,
          SECPKG_ATTR_SIZES,
          &sizes);
 
     if (!SEC_SUCCESS(rc))  
         return NS_ERROR_FAILURE;
     
     ibd.cBuffers = 3;
--- a/gfx/src/thebes/nsSystemFontsWin.cpp
+++ b/gfx/src/thebes/nsSystemFontsWin.cpp
@@ -39,22 +39,28 @@
 #include "nsIRenderingContext.h"
 
 #include "gfxWindowsSurface.h"
 
 #include "nsSystemFontsWin.h"
 
 
 nsresult nsSystemFontsWin::CopyLogFontToNSFont(HDC* aHDC, const LOGFONT* ptrLogFont,
-                                               nsString *aFontName,
-                                               gfxFontStyle *aFontStyle) const
+					       nsString *aFontName,
+                                               gfxFontStyle *aFontStyle,
+                                               PRBool aIsWide) const
 {
   PRUnichar name[LF_FACESIZE];
   name[0] = 0;
+  if (aIsWide)
     memcpy(name, ptrLogFont->lfFaceName, LF_FACESIZE*2);
+  else {
+    MultiByteToWideChar(CP_ACP, 0, ptrLogFont->lfFaceName,
+      strlen(ptrLogFont->lfFaceName) + 1, name, sizeof(name)/sizeof(name[0]));
+  }
   *aFontName = name;
 
   // Do Style
   aFontStyle->style = FONT_STYLE_NORMAL;
   if (ptrLogFont->lfItalic)
   {
     aFontStyle->style = FONT_STYLE_ITALIC;
   }
--- a/gfx/src/thebes/nsSystemFontsWin.h
+++ b/gfx/src/thebes/nsSystemFontsWin.h
@@ -46,16 +46,17 @@ class nsSystemFontsWin
 {
 public:
     nsSystemFontsWin();
 
     nsresult GetSystemFont(nsSystemFontID anID, nsString *aFontName,
                            gfxFontStyle *aFontStyle) const;
 private:
     nsresult CopyLogFontToNSFont(HDC* aHDC, const LOGFONT* ptrLogFont,
-                                 nsString *aFontName, gfxFontStyle *aFontStyle) const;
+                                 nsString *aFontName, gfxFontStyle *aFontStyle,
+				 PRBool aIsWide = PR_FALSE) const;
     nsresult GetSysFontInfo(HDC aHDC, nsSystemFontID anID,
                             nsString *aFontName,
                             gfxFontStyle *aFontStyle) const;
 };
 
 #endif /* _NS_SYSTEMFONTSWIN_H_ */
 
--- a/gfx/src/windows/nsDeviceContextWin.cpp
+++ b/gfx/src/windows/nsDeviceContextWin.cpp
@@ -305,17 +305,17 @@ NS_IMETHODIMP nsDeviceContextWin :: SetC
 {
   DeviceContextImpl::SetCanonicalPixelScale(aScale);
   mPixelScale = aScale;
   return NS_OK;
 }
 
 
 nsresult nsDeviceContextWin::CopyLogFontToNSFont(HDC* aHDC, const LOGFONT* ptrLogFont,
-                                                 nsFont* aFont) const
+                                                 nsFont* aFont, PRBool aIsWide) const
 {
   PRUnichar name[LF_FACESIZE];
   name[0] = 0;
   if (aIsWide)
     memcpy(name, ptrLogFont->lfFaceName, LF_FACESIZE*2);
   else {
     MultiByteToWideChar(CP_ACP, 0, ptrLogFont->lfFaceName,
       strlen(ptrLogFont->lfFaceName) + 1, name, sizeof(name)/sizeof(name[0]));
--- a/gfx/src/windows/nsDeviceContextWin.h
+++ b/gfx/src/windows/nsDeviceContextWin.h
@@ -96,17 +96,18 @@ protected:
   virtual ~nsDeviceContextWin();
   void CommonInit(HDC aDC);
   nsresult Init(nsNativeDeviceContext aContext, nsIDeviceContext *aOrigContext);
   void FindScreen ( nsIScreen** outScreen ) ;
   void ComputeClientRectUsingScreen ( nsRect* outRect ) ;
   void ComputeFullAreaUsingScreen ( nsRect* outRect ) ;
   nsresult GetSysFontInfo(HDC aHDC, nsSystemFontID anID, nsFont* aFont) const;
 
-  nsresult CopyLogFontToNSFont(HDC* aHDC, const LOGFONT* ptrLogFont, nsFont* aFont) const;
+  nsresult CopyLogFontToNSFont(HDC* aHDC, const LOGFONT* ptrLogFont, nsFont* aFont,
+                               PRBool aIsWide = PR_FALSE) const;
   
   PRBool mCachedClientRect;
   PRBool mCachedFullRect;
 
   nsIDrawingSurface*      mSurface;
   PRUint32              mDepth;  // bit depth of device
   nsPaletteInfo         mPaletteInfo;
   float                 mPixelScale;
--- a/gfx/src/windows/nsFontMetricsWin.cpp
+++ b/gfx/src/windows/nsFontMetricsWin.cpp
@@ -2116,19 +2116,50 @@ nsGlyphAgent::GetGlyphMetrics(HDC       
 // aGlyphIndex should be 0 if the caller doesn't know the glyph index of the char.
 DWORD
 nsGlyphAgent::GetGlyphMetrics(HDC           aDC,
                               PRUnichar     aChar,
                               PRUint16      aGlyphIndex,
                               GLYPHMETRICS* aGlyphMetrics)
 {
   memset(aGlyphMetrics, 0, sizeof(GLYPHMETRICS)); // UMR: bug 46438
+  if (eGlyphAgent_UNKNOWN == mState) { // first time we have been in this function
+    // see if this platform implements GetGlyphOutlineW()
+    DWORD len = GetGlyphOutlineW(aDC, aChar, GGO_METRICS, aGlyphMetrics, 0, nsnull, &mMat);
+    if (GetLastError() == ERROR_CALL_NOT_IMPLEMENTED) {
+      // next time, we won't bother trying GetGlyphOutlineW()
+      mState = eGlyphAgent_ANSI;
+    }
+    else {
+      // all is well with GetGlyphOutlineW(), we will be using it from now on
       mState = eGlyphAgent_UNICODE;
+      return len;
+    }
+  }
+
+  if (eGlyphAgent_UNICODE == mState) {
     return GetGlyphOutlineW(aDC, aChar, GGO_METRICS, aGlyphMetrics, 0, nsnull, &mMat);
-
+  }
+
+  // Otherwise, we are on a platform that doesn't implement GetGlyphOutlineW()
+  // (see Q241358: The GetGlyphOutlineW Function Fails on Windows 95 & 98
+  // http://support.microsoft.com/support/kb/articles/Q241/3/58.ASP)
+  // we will use glyph indices as a work around.
+  if (0 == aGlyphIndex) { // caller doesn't know the glyph index, so find it
+    nsAutoChar16Buffer buf;
+    if (NS_SUCCEEDED(GetGlyphIndices(aDC, nsnull, &aChar, 1, buf)))
+      aGlyphIndex = *(buf.Elements());
+  }
+  if (0 < aGlyphIndex) {
+    return GetGlyphOutlineA(aDC, aGlyphIndex, GGO_METRICS | GGO_GLYPH_INDEX, aGlyphMetrics, 0, nsnull, &mMat);
+  }
+
+  // if we ever reach here, something went wrong in GetGlyphIndices() above
+  // because the current font in aDC wasn't a Unicode font
+  return GDI_ERROR;
 }
 
 // the global glyph agent that we will be using
 nsGlyphAgent gGlyphAgent;
 
 #ifdef MOZ_MATHML
 
 // the common part of GetBoundingMetrics used by nsFontWinUnicode
--- a/gfx/thebes/src/gfxWindowsFonts.cpp
+++ b/gfx/thebes/src/gfxWindowsFonts.cpp
@@ -335,23 +335,23 @@ gfxWindowsFont::ComputeMetrics()
     mMetrics->maxHeight = metrics.tmHeight;
     mMetrics->maxAscent = metrics.tmAscent;
     mMetrics->maxDescent = metrics.tmDescent;
     mMetrics->maxAdvance = metrics.tmMaxCharWidth;
     mMetrics->aveCharWidth = PR_MAX(1, metrics.tmAveCharWidth);
 
     // Cache the width of a single space.
     SIZE size;
-    GetTextExtentPoint32W(dc, L" ", 1, &size);
+    GetTextExtentPoint32(dc, " ", 1, &size);
     mMetrics->spaceWidth = ROUND(size.cx);
 
     mSpaceGlyph = 0;
     if (metrics.tmPitchAndFamily & TMPF_TRUETYPE) {
         WORD glyph;
-        DWORD ret = GetGlyphIndicesW(dc, L" ", 1, &glyph,
+        DWORD ret = GetGlyphIndicesA(dc, " ", 1, &glyph,
                                      GGI_MARK_NONEXISTING_GLYPHS);
         if (ret != GDI_ERROR && glyph != 0xFFFF) {
             mSpaceGlyph = glyph;
         }
     }
 
     SelectObject(dc, oldFont);
 
--- a/gfx/thebes/src/gfxWindowsSurface.cpp
+++ b/gfx/thebes/src/gfxWindowsSurface.cpp
@@ -163,43 +163,61 @@ gfxWindowsSurface::OptimizeToDDB(HDC dc,
     tmpCtx.SetSource(this);
     tmpCtx.Paint();
 
     gfxWindowsSurface *raw = (gfxWindowsSurface*) (wsurf.get());
     NS_ADDREF(raw);
     return raw;
 }
 
+static char*
+GetACPString(const nsAString& aStr)
+{
+    int acplen = aStr.Length() * 2 + 1;
+    char * acp = new char[acplen];
+    if(acp) {
+        int outlen = ::WideCharToMultiByte(CP_ACP, 0, 
+                                           PromiseFlatString(aStr).get(),
+                                           aStr.Length(),
+                                           acp, acplen, NULL, NULL);
+        if (outlen > 0)
+            acp[outlen] = '\0';  // null terminate
+    }
+    return acp;
+}
+
 nsresult gfxWindowsSurface::BeginPrinting(const nsAString& aTitle,
                                           const nsAString& aPrintToFileName)
 {
 #define DOC_TITLE_LENGTH 30
-    DOCINFOW docinfo;
+    DOCINFO docinfo;
 
     nsString titleStr;
     titleStr = aTitle;
     if (titleStr.Length() > DOC_TITLE_LENGTH) {
         titleStr.SetLength(DOC_TITLE_LENGTH-3);
         titleStr.AppendLiteral("...");
     }
-    nsPromiseFlatString flatTitleStr(titleStr);
-    const PRUnichar *title = (const PRUnichar*)(flatTitleStr.get());
-    const PRUnichar *docName = nsnull;
-    nsPromiseFlatString printToFileNameStr(aPrintToFileName);
+    char *title = GetACPString(titleStr);
+
+    char *docName = nsnull;
     if (!aPrintToFileName.IsEmpty()) {
-        docName = (const PRUnichar*)(printToFileNameStr.get());
+        docName = ToNewCString(aPrintToFileName);
     }
+
     docinfo.cbSize = sizeof(docinfo);
-    docinfo.lpszDocName = title ? title : L"Mozilla Document";
+    docinfo.lpszDocName = title ? title : "Mozilla Document";
     docinfo.lpszOutput = docName;
     docinfo.lpszDatatype = NULL;
     docinfo.fwType = 0;
 
-    ::StartDocW(mDC, &docinfo);
+    ::StartDoc(mDC, &docinfo);
         
+    delete [] title;
+    if (docName != nsnull) nsMemory::Free(docName);
 
     return NS_OK;
 }
 
 nsresult gfxWindowsSurface::EndPrinting()
 {
     ::EndDoc(mDC);
     return NS_OK;
--- a/intl/uconv/src/nsWinCharset.cpp
+++ b/intl/uconv/src/nsWinCharset.cpp
@@ -128,35 +128,35 @@ nsPlatformCharset::GetCharset(nsPlatform
   return NS_OK;
 }
 
 NS_IMETHODIMP
 nsPlatformCharset::GetDefaultCharsetForLocale(const nsAString& localeName, nsACString& oResult)
 {
   nsCOMPtr<nsIWin32Locale>	winLocale;
   LCID						localeAsLCID;
-  PRUnichar      					acp_name[6];
+  char						acp_name[6];
 
   //
   // convert locale name to a code page (through the LCID)
   //
   nsresult rv;
   oResult.Truncate();
 
   winLocale = do_GetService(NS_WIN32LOCALE_CONTRACTID, &rv);
   if (NS_FAILED(rv)) { return rv; }
 
   rv = winLocale->GetPlatformLocale(localeName, &localeAsLCID);
   if (NS_FAILED(rv)) { return rv; }
 
-  if (GetLocaleInfoW(localeAsLCID, LOCALE_IDEFAULTANSICODEPAGE, acp_name, sizeof(acp_name))==0) { 
+  if (GetLocaleInfo(localeAsLCID, LOCALE_IDEFAULTANSICODEPAGE, acp_name, sizeof(acp_name))==0) { 
     return NS_ERROR_FAILURE; 
   }
   nsAutoString acp_key(NS_LITERAL_STRING("acp."));
-  acp_key.Append(acp_name);
+  acp_key.AppendWithConversion(acp_name);
 
   return MapToCharset(acp_key, oResult);
 }
 
 NS_IMETHODIMP 
 nsPlatformCharset::Init()
 {
   return NS_OK;
--- a/ipc/ipcd/client/src/ipcConnectionWin.cpp
+++ b/ipc/ipcd/client/src/ipcConnectionWin.cpp
@@ -107,17 +107,17 @@ ipcThreadWindowProc(HWND hWnd, UINT uMsg
     if (uMsg == IPC_WM_SENDMSG) {
         ipcMessage *msg = (ipcMessage *) lParam;
         if (msg) {
             LOG(("  sending message...\n"));
             COPYDATASTRUCT cd;
             cd.dwData = GetCurrentProcessId();
             cd.cbData = (DWORD) msg->MsgLen();
             cd.lpData = (PVOID) msg->MsgBuf();
-            SendMessage(ipcDaemonHwnd, WM_COPYDATA, (WPARAM) hWnd, (LPARAM) &cd);
+            SendMessageA(ipcDaemonHwnd, WM_COPYDATA, (WPARAM) hWnd, (LPARAM) &cd);
             LOG(("  done.\n"));
             delete msg;
         }
         return 0;
     }
 
     if (uMsg == IPC_WM_CALLBACK) {
         ipcCallbackFunc func = (ipcCallbackFunc) wParam;
--- a/modules/libpr0n/decoders/icon/win/nsIconChannel.cpp
+++ b/modules/libpr0n/decoders/icon/win/nsIconChannel.cpp
@@ -58,17 +58,16 @@
 #include "nsIMIMEService.h"
 #include "nsCExternalHandlerService.h"
 #include "nsDirectoryServiceDefs.h"
 
 // we need windows.h to read out registry information...
 #include <windows.h>
 #include <shellapi.h>
 #include <shlobj.h>
-#include <wchar.h>
 
 struct ICONFILEHEADER {
   PRUint16 ifhReserved;
   PRUint16 ifhType;
   PRUint16 ifhCount;
 };
 
 struct ICONENTRY {
@@ -185,17 +184,17 @@ NS_IMETHODIMP nsIconChannel::GetURI(nsIU
 }
 
 NS_IMETHODIMP
 nsIconChannel::Open(nsIInputStream **_retval)
 {
   return MakeInputStream(_retval, PR_FALSE);
 }
 
-nsresult nsIconChannel::ExtractIconInfoFromUrl(nsIFile ** aLocalFile, PRUint32 * aDesiredImageSize, nsCString &aContentType, nsCString &aFileExtension)
+nsresult nsIconChannel::ExtractIconInfoFromUrl(nsIFile ** aLocalFile, PRUint32 * aDesiredImageSize, nsACString &aContentType, nsACString &aFileExtension)
 {
   nsresult rv = NS_OK;
   nsCOMPtr<nsIMozIconURI> iconURI (do_QueryInterface(mUrl, &rv));
   NS_ENSURE_SUCCESS(rv, rv);
 
   iconURI->GetImageSize(aDesiredImageSize);
   iconURI->GetContentType(aContentType);
   iconURI->GetFileExtension(aFileExtension);
@@ -232,60 +231,61 @@ NS_IMETHODIMP nsIconChannel::AsyncOpen(n
     mListener = aListener;
     // Add ourself to the load group, if available
     if (mLoadGroup)
       mLoadGroup->AddRequest(this, nsnull);
   }
   return rv;
 }
 
-static DWORD GetSpecialFolderIcon(nsIFile* aFile, int aFolder, SHFILEINFOW* aSFI, UINT aInfoFlags)
+static DWORD GetSpecialFolderIcon(nsIFile* aFile, int aFolder, SHFILEINFO* aSFI, UINT aInfoFlags)
 {
   DWORD shellResult = 0;
 
   if (!aFile)
     return shellResult;
 
-  PRUnichar fileNativePath[MAX_PATH];
-  nsAutoString fileNativePathStr;
-  aFile->GetPath(fileNativePathStr);
-  ::GetShortPathNameW(fileNativePathStr.get(), fileNativePath, sizeof(fileNativePath));
+  char fileNativePath[MAX_PATH];
+  nsCAutoString fileNativePathStr;
+  aFile->GetNativePath(fileNativePathStr);
+  ::GetShortPathName(fileNativePathStr.get(), fileNativePath, sizeof(fileNativePath));
 
   LPITEMIDLIST idList;
   HRESULT hr = ::SHGetSpecialFolderLocation(NULL, aFolder, &idList);
   if (SUCCEEDED(hr)) {
-      PRUnichar specialNativePath[MAX_PATH];
-      ::SHGetPathFromIDListW(idList, specialNativePath);
-      ::GetShortPathNameW(specialNativePath, specialNativePath, sizeof(specialNativePath));
-      if (!wcsicmp(fileNativePath,specialNativePath)) {
+    char specialNativePath[MAX_PATH];
+    ::SHGetPathFromIDList(idList, specialNativePath);
+    ::GetShortPathName(specialNativePath, specialNativePath, sizeof(specialNativePath));
+  
+    if (nsDependentCString(fileNativePath).EqualsIgnoreCase(specialNativePath)) {
       aInfoFlags |= (SHGFI_PIDL | SHGFI_SYSICONINDEX);
-      shellResult = ::SHGetFileInfoW((LPCWSTR)(LPCITEMIDLIST)idList, 0, aSFI, 
-                                    sizeof(SHFILEINFOW), aInfoFlags);
+      shellResult = ::SHGetFileInfo((LPCTSTR)(LPCITEMIDLIST)idList, 0, aSFI, 
+                                    sizeof(SHFILEINFO), aInfoFlags);
       IMalloc* pMalloc;
       hr = ::SHGetMalloc(&pMalloc);
       if (SUCCEEDED(hr)) {
         pMalloc->Free(idList);
         pMalloc->Release();
       }
     }
   }
   return shellResult;
 }
 
 nsresult nsIconChannel::MakeInputStream(nsIInputStream** _retval, PRBool nonBlocking)
 {
   nsXPIDLCString contentType;
-  nsCString filePath;
+  nsCAutoString filePath;
   nsCOMPtr<nsIFile> localFile; // file we want an icon for
   PRUint32 desiredImageSize;
   nsresult rv = ExtractIconInfoFromUrl(getter_AddRefs(localFile), &desiredImageSize, contentType, filePath);
   NS_ENSURE_SUCCESS(rv, rv);
 
   // if the file exists, we are going to use it's real attributes...otherwise we only want to use it for it's extension...
-  SHFILEINFOW      sfi;
+  SHFILEINFO      sfi;
   UINT infoFlags = SHGFI_ICON;
   
   PRBool fileExists = PR_FALSE;
  
   if (localFile)
   {
     rv = localFile->Normalize();
     NS_ENSURE_SUCCESS(rv, rv);
@@ -337,19 +337,17 @@ nsresult nsIconChannel::MakeInputStream(
 
   // There are other "Special Folders" and Namespace entities that we are not 
   // fetching icons for, see: 
   // http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/enums/csidl.asp
   // If we ever need to get them, code to do so would be inserted here. 
 
   // Not a special folder, or something else failed above.
   if (!shellResult)
-      shellResult = ::SHGetFileInfoW(
-                                    NS_ConvertUTF8toUTF16(filePath).get(),
-                                    FILE_ATTRIBUTE_ARCHIVE, &sfi, sizeof(sfi), infoFlags);
+    shellResult = ::SHGetFileInfo(filePath.get(), FILE_ATTRIBUTE_ARCHIVE, &sfi, sizeof(sfi), infoFlags);
 
   if (shellResult && sfi.hIcon)
   {
     // we got a handle to an icon. Now we want to get a bitmap for the icon using GetIconInfo....
     ICONINFO iconInfo;
     if (GetIconInfo(sfi.hIcon, &iconInfo))
     {
       // we got the bitmaps, first find out their size
--- a/modules/libpr0n/decoders/icon/win/nsIconChannel.h
+++ b/modules/libpr0n/decoders/icon/win/nsIconChannel.h
@@ -72,13 +72,13 @@ protected:
   PRInt32          mContentLength;
   nsCOMPtr<nsILoadGroup> mLoadGroup;
   nsCOMPtr<nsIInterfaceRequestor> mCallbacks;
   nsCOMPtr<nsISupports>  mOwner; 
 
   nsCOMPtr<nsIInputStreamPump> mPump;
   nsCOMPtr<nsIStreamListener>  mListener;
 
-  nsresult ExtractIconInfoFromUrl(nsIFile ** aLocalFile, PRUint32 * aDesiredImageSize, nsCString &aContentType, nsCString &aFileExtension);
+  nsresult ExtractIconInfoFromUrl(nsIFile ** aLocalFile, PRUint32 * aDesiredImageSize, nsACString &aContentType, nsACString &aFileExtension);
   nsresult MakeInputStream(nsIInputStream** _retval, PRBool nonBlocking);
 };
 
 #endif /* nsIconChannel_h___ */
--- a/modules/oji/src/scd.cpp
+++ b/modules/oji/src/scd.cpp
@@ -95,17 +95,17 @@ nsSymantecDebugManager::SetDebugAgentPas
 
     /* set up by aHiddenFrameClass in CNetscapeApp::InitInstance */
     err = SetWindowLong(win, 0, pwd);	
     if (err == 0) {
 //        PR_LOG(NSJAVA, PR_LOG_ALWAYS,
 //               ("SetWindowLong returned %ld (err=%d)\n", err, GetLastError()));
         /* continue so that we try to wake up the DebugManager */
     }
-    sem = OpenSemaphoreW(SEMAPHORE_MODIFY_STATE, FALSE, L"Netscape-Symantec Debugger");
+    sem = OpenSemaphore(SEMAPHORE_MODIFY_STATE, FALSE, "Netscape-Symantec Debugger");
     if (sem) {
         ReleaseSemaphore(sem, 1, NULL);
         CloseHandle(sem);
     }
     return NS_OK;
 #else
     return NS_ERROR_FAILURE;
 #endif
--- a/modules/plugin/base/src/nsPluginDirServiceProvider.cpp
+++ b/modules/plugin/base/src/nsPluginDirServiceProvider.cpp
@@ -61,42 +61,42 @@ ClearVersion(verBlock *ver)
 {
   ver->wMajor   = 0;
   ver->wMinor   = 0;
   ver->wRelease = 0;
   ver->wBuild   = 0;
 }
 
 static BOOL
-FileExists(wchar_t* szFile)
+FileExists(LPCSTR szFile)
 {
-  return GetFileAttributesW(szFile) != 0xFFFFFFFF;
+  return GetFileAttributes(szFile) != 0xFFFFFFFF;
 }
 
 // Get file version information from a file
 static BOOL
-GetFileVersion(wchar_t* szFile, verBlock *vbVersion)
+GetFileVersion(LPSTR szFile, verBlock *vbVersion)
 {
   UINT              uLen;
   UINT              dwLen;
   BOOL              bRv;
   DWORD             dwHandle;
   LPVOID            lpData;
   LPVOID            lpBuffer;
   VS_FIXEDFILEINFO  *lpBuffer2;
 
   ClearVersion(vbVersion);
   if (FileExists(szFile)) {
     bRv    = TRUE;
-    dwLen  = GetFileVersionInfoSizeW(szFile, &dwHandle);
+    dwLen  = GetFileVersionInfoSize(szFile, &dwHandle);
     lpData = (LPVOID)malloc(dwLen);
     uLen   = 0;
 
-    if (lpData && GetFileVersionInfoW(szFile, dwHandle, dwLen, lpData) != 0) {
-      if (VerQueryValueW(lpData, L"\\", &lpBuffer, &uLen) != 0) {
+    if (lpData && GetFileVersionInfo(szFile, dwHandle, dwLen, lpData) != 0) {
+      if (VerQueryValue(lpData, "\\", &lpBuffer, &uLen) != 0) {
         lpBuffer2 = (VS_FIXEDFILEINFO *)lpBuffer;
 
         vbVersion->wMajor   = HIWORD(lpBuffer2->dwFileVersionMS);
         vbVersion->wMinor   = LOWORD(lpBuffer2->dwFileVersionMS);
         vbVersion->wRelease = HIWORD(lpBuffer2->dwFileVersionLS);
         vbVersion->wBuild   = LOWORD(lpBuffer2->dwFileVersionLS);
       }
     }
@@ -119,25 +119,25 @@ CopyVersion(verBlock *ver1, verBlock *ve
   ver1->wRelease = ver2->wRelease;
   ver1->wBuild   = ver2->wBuild;
 }
 
 // Convert a string version to a version struct
 static void
 TranslateVersionStr(const char* szVersion, verBlock *vbVersion)
 {
-  char* szNum1 = NULL;
-  char* szNum2 = NULL;
-  char* szNum3 = NULL;
-  char* szNum4 = NULL;
-  char* szJavaBuild = NULL;
+  LPSTR szNum1 = NULL;
+  LPSTR szNum2 = NULL;
+  LPSTR szNum3 = NULL;
+  LPSTR szNum4 = NULL;
+  LPSTR szJavaBuild = NULL;
 
-  char* strVer = nsnull;
+  char *strVer = nsnull;
   if (szVersion) {
-    strVer = strdup(szVersion);
+    strVer = PL_strdup(szVersion);
   }
 
   if (!strVer) {
     // Out of memory
     ClearVersion(vbVersion);
     return;
   }
 
@@ -152,17 +152,17 @@ TranslateVersionStr(const char* szVersio
   szNum3 = strtok(NULL,   ".");
   szNum4 = strtok(NULL,   ".");
 
   vbVersion->wMajor   = szNum1 ? atoi(szNum1) : 0;
   vbVersion->wMinor   = szNum2 ? atoi(szNum2) : 0;
   vbVersion->wRelease = szNum3 ? atoi(szNum3) : 0;
   vbVersion->wBuild   = szNum4 ? atoi(szNum4) : 0;
 
-  free(strVer);
+  PL_strfree(strVer);
 }
 
 // Compare two version struct, return zero if the same
 static int
 CompareVersion(verBlock vbVersionOld, verBlock vbVersionNew)
 {
   if (vbVersionOld.wMajor > vbVersionNew.wMajor) {
     return 4;
@@ -190,38 +190,36 @@ CompareVersion(verBlock vbVersionOld, ve
 
   /* the versions are all the same */
   return 0;
 }
 
 // Indicate whether we should try to use the new NPRuntime-based Java
 // Plug-In if it's available
 static PRBool
-TryToUseNPRuntimeJavaPlugIn(const wchar_t* javaVersion)
+TryToUseNPRuntimeJavaPlugIn(const char* javaVersion)
 {
   HKEY javaKey = NULL;
-  wchar_t keyName[_MAX_PATH];
-  
-  wcsncpy(keyName, L"Software\\JavaSoft\\Java Plug-in\\", wcslen(L"Software\\JavaSoft\\Java Plug-in\\"));
-  wcscpy(keyName, javaVersion);
-
+  char keyName[_MAX_PATH];
+  keyName[0] = 0;
+  PL_strcat(keyName, "Software\\JavaSoft\\Java Plug-in\\");
+  PL_strcat(keyName, javaVersion);
   DWORD val;
   DWORD valSize = sizeof(DWORD);
     
-  if (ERROR_SUCCESS != ::RegOpenKeyExW(HKEY_LOCAL_MACHINE,
+  if (ERROR_SUCCESS != ::RegOpenKeyEx(HKEY_LOCAL_MACHINE,
                                       keyName, 0, KEY_READ, &javaKey)) {
     return FALSE;
   }
 
   // Look for "UseNewJavaPlugin"
-  if (ERROR_SUCCESS != ::RegQueryValueExW(javaKey,
-                                          L"UseNewJavaPlugin",
-                                          NULL, NULL,
-                                          (LPBYTE) &val,
-                                          &valSize)) {
+  if (ERROR_SUCCESS != ::RegQueryValueEx(javaKey, "UseNewJavaPlugin",
+                                         NULL, NULL,
+                                         (LPBYTE) &val,
+                                         &valSize)) {
     val = 0;
   }
 
   ::RegCloseKey(javaKey);
   return (val == 0) ? PR_FALSE : PR_TRUE;
 }
 
 
@@ -259,63 +257,63 @@ nsPluginDirServiceProvider::GetFile(cons
   *_retval = nsnull;
   *persistant = PR_FALSE;
 
   nsCOMPtr<nsIPrefBranch> prefs(do_GetService(NS_PREFSERVICE_CONTRACTID));
   if (!prefs) {
     return rv;
   }
 
-  if (strcmp(prop, NS_WIN_4DOTX_SCAN_KEY) == 0) {
+  if (nsCRT::strcmp(prop, NS_WIN_4DOTX_SCAN_KEY) == 0) {
     // Check our prefs to see if scanning the 4.x folder has been
     // explictly overriden failure to get the pref is okay, we'll do
     // what we've been doing -- a filtered scan
     PRBool bScan4x;
     if (NS_SUCCEEDED(prefs->GetBoolPref(NS_WIN_4DOTX_SCAN_KEY, &bScan4x)) &&
         !bScan4x) {
       return rv;
     }
 
     // Look for the plugin folder that the user has in their
     // Communicator 4x install
     HKEY keyloc;
     long result;
     DWORD type;
-    wchar_t szKey[_MAX_PATH] = L"Software\\Netscape\\Netscape Navigator";
-    wchar_t path[_MAX_PATH];
+    char szKey[_MAX_PATH] = "Software\\Netscape\\Netscape Navigator";
+    char path[_MAX_PATH];
 
-    result = ::RegOpenKeyExW(HKEY_LOCAL_MACHINE, szKey, 0, KEY_READ, &keyloc);
+    result = ::RegOpenKeyEx(HKEY_LOCAL_MACHINE, szKey, 0, KEY_READ, &keyloc);
 
     if (result == ERROR_SUCCESS) {
-      wchar_t current_version[80];
+      char current_version[80];
       DWORD length = sizeof(current_version);
 
-      result = ::RegQueryValueExW(keyloc, L"CurrentVersion", NULL, &type,
+      result = ::RegQueryValueEx(keyloc, "CurrentVersion", NULL, &type,
                                  (LPBYTE)&current_version, &length);
 
       ::RegCloseKey(keyloc);
-      wcscat(szKey, L"\\");
-      wcscat(szKey, current_version);
-      wcscat(szKey, L"\\Main");
-      result = ::RegOpenKeyExW(HKEY_LOCAL_MACHINE, szKey, 0, KEY_READ, &keyloc);
+      PL_strcat(szKey, "\\");
+      PL_strcat(szKey, current_version);
+      PL_strcat(szKey, "\\Main");
+      result = ::RegOpenKeyEx(HKEY_LOCAL_MACHINE, szKey, 0, KEY_READ, &keyloc);
 
       if (result == ERROR_SUCCESS) {
         DWORD pathlen = sizeof(path);
 
-        result = ::RegQueryValueExW(keyloc, L"Plugins Directory", NULL, &type,
+        result = ::RegQueryValueEx(keyloc, "Plugins Directory", NULL, &type,
                                    (LPBYTE)&path, &pathlen);
         if (result == ERROR_SUCCESS) {
-          rv = NS_NewLocalFile(nsDependentString(path), PR_TRUE,
-                               getter_AddRefs(localFile));
+          rv = NS_NewNativeLocalFile(nsDependentCString(path), PR_TRUE,
+                                     getter_AddRefs(localFile));
         }
 
         ::RegCloseKey(keyloc);
       }
     }
-  } else if (strcmp(prop, NS_WIN_JRE_SCAN_KEY) == 0) {
+  } else if (nsCRT::strcmp(prop, NS_WIN_JRE_SCAN_KEY) == 0) {
     nsXPIDLCString strVer;
 #ifdef OJI
     if (NS_FAILED(prefs->GetCharPref(prop, getter_Copies(strVer))))
 #endif /* OJI */
       return NS_ERROR_FAILURE;
     verBlock minVer;
     TranslateVersionStr(strVer.get(), &minVer);
 
@@ -325,217 +323,216 @@ nsPluginDirServiceProvider::GetFile(cons
     HKEY entryloc;
     FILETIME modTime;
     DWORD type;
     DWORD index = 0;
     DWORD numChars = _MAX_PATH;
     DWORD pathlen;
     verBlock maxVer;
     ClearVersion(&maxVer);
-    wchar_t curKey[_MAX_PATH] = L"Software\\JavaSoft\\Java Runtime Environment";
-    wchar_t path[_MAX_PATH];
-
+    char curKey[_MAX_PATH] = "Software\\JavaSoft\\Java Runtime Environment";
+    char path[_MAX_PATH];
     // Add + 15 to prevent buffer overrun when adding \bin (+ optionally
     // \new_plugin)
 #define JAVA_PATH_SIZE _MAX_PATH + 15
-    wchar_t newestPath[JAVA_PATH_SIZE];
-    const wchar_t mozPath[_MAX_PATH] = L"Software\\mozilla.org\\Mozilla";
-    wchar_t browserJavaVersion[_MAX_PATH];
+    char newestPath[JAVA_PATH_SIZE];
+    const char mozPath[_MAX_PATH] = "Software\\mozilla.org\\Mozilla";
+    char browserJavaVersion[_MAX_PATH];
     PRBool tryNPRuntimeJavaPlugIn = PR_FALSE;
 
     newestPath[0] = 0;
-    LONG result = ::RegOpenKeyExW(HKEY_LOCAL_MACHINE, curKey, 0, KEY_READ,
+    LONG result = ::RegOpenKeyEx(HKEY_LOCAL_MACHINE, curKey, 0, KEY_READ,
                                  &baseloc);
     if (ERROR_SUCCESS != result)
       return NS_ERROR_FAILURE;
 
     // Look for "BrowserJavaVersion"
-    if (ERROR_SUCCESS != ::RegQueryValueExW(baseloc, L"BrowserJavaVersion", NULL,
+    if (ERROR_SUCCESS != ::RegQueryValueEx(baseloc, "BrowserJavaVersion", NULL,
                                            NULL, (LPBYTE)&browserJavaVersion,
                                            &numChars))
       browserJavaVersion[0] = 0;
 
     // We must enumerate through the keys because what if there is
     // more than one version?
     do {
       path[0] = 0;
       numChars = _MAX_PATH;
       pathlen = sizeof(path);
-      result = ::RegEnumKeyExW(baseloc, index, curKey, &numChars, NULL, NULL,
+      result = ::RegEnumKeyEx(baseloc, index, curKey, &numChars, NULL, NULL,
                               NULL, &modTime);
       index++;
 
       // Skip major.minor as it always points to latest in its family
       numChars = 0;
-      for (wchar_t *p = curKey; *p; p++) {  // can I do this with wchar_t xxx?
+      for (char *p = curKey; *p; p++) {
         if (*p == '.') {
           numChars++;
         }
       }
       if (numChars < 2)
         continue;
 
       if (ERROR_SUCCESS == result) {
-        if (ERROR_SUCCESS == ::RegOpenKeyExW(baseloc, curKey, 0,
+        if (ERROR_SUCCESS == ::RegOpenKeyEx(baseloc, curKey, 0,
                                             KEY_QUERY_VALUE, &keyloc)) {
           // We have a sub key
-          if (ERROR_SUCCESS == ::RegQueryValueExW(keyloc, L"JavaHome", NULL,
+          if (ERROR_SUCCESS == ::RegQueryValueEx(keyloc, "JavaHome", NULL,
                                                  &type, (LPBYTE)&path,
                                                  &pathlen)) {
             verBlock curVer;
-            TranslateVersionStr(NS_ConvertUTF16toUTF8(curKey).get(), &curVer);
+            TranslateVersionStr(curKey, &curVer);
             if (CompareVersion(curVer, minVer) >= 0) {
-              if (!wcsncmp(browserJavaVersion, curKey, _MAX_PATH)) {
-                wcscpy(newestPath, path);
+              if (!strncmp(browserJavaVersion, curKey, _MAX_PATH)) {
+                PL_strcpy(newestPath, path);
                 tryNPRuntimeJavaPlugIn = TryToUseNPRuntimeJavaPlugIn(curKey);
                 ::RegCloseKey(keyloc);
                 break;
               }
 
               if (CompareVersion(curVer, maxVer) >= 0) {
-                wcscpy(newestPath, path);
+                PL_strcpy(newestPath, path);
                 CopyVersion(&maxVer, &curVer);
                 tryNPRuntimeJavaPlugIn = TryToUseNPRuntimeJavaPlugIn(curKey);
               }
             }
           }
           ::RegCloseKey(keyloc);
         }
       }
     } while (ERROR_SUCCESS == result);
 
     ::RegCloseKey(baseloc);
 
     // If nothing is found, then don't add \bin dir and don't set
     // CurrentVersion for Mozilla
     if (newestPath[0] != 0) {
-      if (ERROR_SUCCESS == ::RegCreateKeyExW(HKEY_LOCAL_MACHINE, mozPath, 0,
+      if (ERROR_SUCCESS == ::RegCreateKeyEx(HKEY_LOCAL_MACHINE, mozPath, 0,
                                             NULL, REG_OPTION_NON_VOLATILE,
                                             KEY_SET_VALUE|KEY_QUERY_VALUE,
                                             NULL, &entryloc, NULL)) {
-        if (ERROR_SUCCESS != ::RegQueryValueExW(entryloc, L"CurrentVersion", 0,
+        if (ERROR_SUCCESS != ::RegQueryValueEx(entryloc, "CurrentVersion", 0,
                                                NULL, NULL, NULL)) {
-          ::RegSetValueExW(entryloc, L"CurrentVersion", 0, REG_SZ,
+          ::RegSetValueEx(entryloc, "CurrentVersion", 0, REG_SZ,
                           (const BYTE*)MOZILLA_VERSION,
                           sizeof(MOZILLA_VERSION));
         }
         ::RegCloseKey(entryloc);
       }
 
-      wcscat(newestPath,L"\\bin");
+      PL_strcat(newestPath,"\\bin");
 
       // See whether we should use the new NPRuntime-based Java Plug-In:
       //  - If tryNPRuntimeJavaPlugIn is true, and
       //  - If the appropriate subdirectory actually exists
       // Note that this is a temporary code path until the old
       // OJI-based Java Plug-In isn't being shipped alongside the new
       // one any more.
       if (tryNPRuntimeJavaPlugIn) {
         // See whether the "new_plugin" directory exists
-        wchar_t tmpPath[JAVA_PATH_SIZE];
-        wcscpy(tmpPath, newestPath);
-        wcscat(tmpPath, L"\\new_plugin");
+        char tmpPath[JAVA_PATH_SIZE];
+        PL_strcpy(tmpPath, newestPath);
+        PL_strcat(tmpPath, "\\new_plugin");
         nsCOMPtr<nsILocalFile> tmpFile;
-        if (NS_SUCCEEDED(NS_NewLocalFile(nsDependentString(tmpPath),
-                                         PR_TRUE,
-                                         getter_AddRefs(tmpFile))) &&
+        if (NS_SUCCEEDED(NS_NewNativeLocalFile(nsDependentCString(tmpPath),
+                                               PR_TRUE,
+                                               getter_AddRefs(tmpFile))) &&
             tmpFile) {
           PRBool exists = PR_FALSE;
           PRBool isDir = PR_FALSE;
           if (NS_SUCCEEDED(tmpFile->Exists(&exists)) && exists &&
               NS_SUCCEEDED(tmpFile->IsDirectory(&isDir)) && isDir) {
             // Assume we're supposed to use this as the search
             // directory for the Java Plug-In instead of the normal
             // one
-            wcscpy(newestPath, tmpPath);
+            PL_strcpy(newestPath, tmpPath);
           }
         }
       }
 
-      rv = NS_NewLocalFile(nsDependentString(newestPath), PR_TRUE,
-                           getter_AddRefs(localFile));
+      rv = NS_NewNativeLocalFile(nsDependentCString(newestPath), PR_TRUE,
+                                 getter_AddRefs(localFile));
     }
-  } else if (strcmp(prop, NS_WIN_QUICKTIME_SCAN_KEY) == 0) {
+  } else if (nsCRT::strcmp(prop, NS_WIN_QUICKTIME_SCAN_KEY) == 0) {
     nsXPIDLCString strVer;
     if (NS_FAILED(prefs->GetCharPref(prop, getter_Copies(strVer))))
       return NS_ERROR_FAILURE;
     verBlock minVer;
     TranslateVersionStr(strVer.get(), &minVer);
 
     // Look for the Quicktime system installation plugins directory
     HKEY keyloc;
     long result;
     DWORD type;
     verBlock qtVer;
     ClearVersion(&qtVer);
-    wchar_t path[_MAX_PATH];
+    char path[_MAX_PATH];
     DWORD pathlen = sizeof(path);
 
     // First we need to check the version of Quicktime via checking
     // the EXE's version table
-    if (ERROR_SUCCESS == ::RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"software\\Microsoft\\Windows\\CurrentVersion\\App Paths\\QuickTimePlayer.exe", 0, KEY_READ, &keyloc)) {
-      if (ERROR_SUCCESS == ::RegQueryValueExW(keyloc, NULL, NULL, &type,
-                                              (LPBYTE)&path, &pathlen)) {
-        GetFileVersion(path, &qtVer);
+    if (ERROR_SUCCESS == ::RegOpenKeyEx(HKEY_LOCAL_MACHINE, "software\\Microsoft\\Windows\\CurrentVersion\\App Paths\\QuickTimePlayer.exe", 0, KEY_READ, &keyloc)) {
+      if (ERROR_SUCCESS == ::RegQueryValueEx(keyloc, NULL, NULL, &type,
+                                             (LPBYTE)&path, &pathlen)) {
+        GetFileVersion((char*)path, &qtVer);
       }
       ::RegCloseKey(keyloc);
     }
     if (CompareVersion(qtVer, minVer) < 0)
       return rv;
 
-    if (ERROR_SUCCESS == ::RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"software\\Apple Computer, Inc.\\QuickTime", 0, KEY_READ, &keyloc)) {
+    if (ERROR_SUCCESS == ::RegOpenKeyEx(HKEY_LOCAL_MACHINE, "software\\Apple Computer, Inc.\\QuickTime", 0, KEY_READ, &keyloc)) {
       DWORD pathlen = sizeof(path);
 
-      result = ::RegQueryValueExW(keyloc, L"InstallDir", NULL, &type,
+      result = ::RegQueryValueEx(keyloc, "InstallDir", NULL, &type,
                                  (LPBYTE)&path, &pathlen);
-      wcscat(path, L"\\Plugins");
+      PL_strcat(path, "\\Plugins");
       if (result == ERROR_SUCCESS)
-        rv = NS_NewLocalFile(nsDependentString(path), PR_TRUE,
-                             getter_AddRefs(localFile));
+        rv = NS_NewNativeLocalFile(nsDependentCString(path), PR_TRUE,
+                                   getter_AddRefs(localFile));
       ::RegCloseKey(keyloc);
     }
-  } else if (strcmp(prop, NS_WIN_WMP_SCAN_KEY) == 0) {
+  } else if (nsCRT::strcmp(prop, NS_WIN_WMP_SCAN_KEY) == 0) {
     nsXPIDLCString strVer;
     if (NS_FAILED(prefs->GetCharPref(prop, getter_Copies(strVer))))
       return NS_ERROR_FAILURE;
     verBlock minVer;
     TranslateVersionStr(strVer.get(), &minVer);
 
     // Look for Windows Media Player system installation plugins directory
     HKEY keyloc;
     DWORD type;
     verBlock wmpVer;
     ClearVersion(&wmpVer);
-    wchar_t path[_MAX_PATH];
+    char path[_MAX_PATH];
     DWORD pathlen = sizeof(path);
 
     // First we need to check the version of WMP
-    if (ERROR_SUCCESS == ::RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"software\\Microsoft\\Windows\\CurrentVersion\\App Paths\\wmplayer.exe", 0, KEY_READ, &keyloc)) {
-      if (ERROR_SUCCESS == ::RegQueryValueExW(keyloc, NULL, NULL, &type,
-                                              (LPBYTE)&path, &pathlen)) {
-        GetFileVersion(path, &wmpVer);
+    if (ERROR_SUCCESS == ::RegOpenKeyEx(HKEY_LOCAL_MACHINE, "software\\Microsoft\\Windows\\CurrentVersion\\App Paths\\wmplayer.exe", 0, KEY_READ, &keyloc)) {
+      if (ERROR_SUCCESS == ::RegQueryValueEx(keyloc, NULL, NULL, &type,
+                                             (LPBYTE)&path, &pathlen)) {
+        GetFileVersion((char*)path, &wmpVer);
       }
       ::RegCloseKey(keyloc);
     }
     if (CompareVersion(wmpVer, minVer) < 0)
       return rv;
 
-    if (ERROR_SUCCESS == ::RegOpenKeyExW(HKEY_LOCAL_MACHINE,
-                                        L"software\\Microsoft\\MediaPlayer", 0,
+    if (ERROR_SUCCESS == ::RegOpenKeyEx(HKEY_LOCAL_MACHINE,
+                                        "software\\Microsoft\\MediaPlayer", 0,
                                         KEY_READ, &keyloc)) {
-      if (ERROR_SUCCESS == ::RegQueryValueExW(keyloc, L"Installation Directory",
+      if (ERROR_SUCCESS == ::RegQueryValueEx(keyloc, "Installation Directory",
                                              NULL, &type, (LPBYTE)&path,
                                              &pathlen)) {
-        rv = NS_NewLocalFile(nsDependentString(path), PR_TRUE,
-                             getter_AddRefs(localFile));
+        rv = NS_NewNativeLocalFile(nsDependentCString(path), PR_TRUE,
+                                   getter_AddRefs(localFile));
       }
 
       ::RegCloseKey(keyloc);
     }
-  } else if (strcmp(prop, NS_WIN_ACROBAT_SCAN_KEY) == 0) {
+  } else if (nsCRT::strcmp(prop, NS_WIN_ACROBAT_SCAN_KEY) == 0) {
     nsXPIDLCString strVer;
     if (NS_FAILED(prefs->GetCharPref(prop, getter_Copies(strVer)))) {
       return NS_ERROR_FAILURE;
     }
 
     verBlock minVer;
     TranslateVersionStr(strVer.get(), &minVer);
 
@@ -544,69 +541,69 @@ nsPluginDirServiceProvider::GetFile(cons
     HKEY keyloc;
     FILETIME modTime;
     DWORD type;
     DWORD index = 0;
     DWORD numChars = _MAX_PATH;
     DWORD pathlen;
     verBlock maxVer;
     ClearVersion(&maxVer);
-    wchar_t curKey[_MAX_PATH] = L"software\\Adobe\\Acrobat Reader";
-    wchar_t path[_MAX_PATH];
+    char curKey[_MAX_PATH] = "software\\Adobe\\Acrobat Reader";
+    char path[_MAX_PATH];
     // Add + 8 to prevent buffer overrun when adding \browser
-    wchar_t newestPath[_MAX_PATH + 8];
+    char newestPath[_MAX_PATH + 8];
 
     newestPath[0] = 0;
-    if (ERROR_SUCCESS != ::RegOpenKeyExW(HKEY_LOCAL_MACHINE, curKey, 0,
+    if (ERROR_SUCCESS != ::RegOpenKeyEx(HKEY_LOCAL_MACHINE, curKey, 0,
                                         KEY_READ, &baseloc)) {
-      wcscpy(curKey, L"software\\Adobe\\Adobe Acrobat");
-      if (ERROR_SUCCESS != ::RegOpenKeyExW(HKEY_LOCAL_MACHINE, curKey, 0,
+      PL_strcpy(curKey, "software\\Adobe\\Adobe Acrobat");
+      if (ERROR_SUCCESS != ::RegOpenKeyEx(HKEY_LOCAL_MACHINE, curKey, 0,
                                           KEY_READ, &baseloc)) {
         return NS_ERROR_FAILURE;
       }
     }
 
     // We must enumerate through the keys because what if there is
     // more than one version?
     LONG result = ERROR_SUCCESS;
     while (ERROR_SUCCESS == result) {
       path[0] = 0;
       numChars = _MAX_PATH;
       pathlen = sizeof(path);
-      result = ::RegEnumKeyExW(baseloc, index, curKey, &numChars, NULL, NULL,
+      result = ::RegEnumKeyEx(baseloc, index, curKey, &numChars, NULL, NULL,
                               NULL, &modTime);
       index++;
 
       if (ERROR_SUCCESS == result) {
         verBlock curVer;
-        TranslateVersionStr(NS_ConvertUTF16toUTF8(curKey).get(), &curVer);
-        wcscat(curKey, L"\\InstallPath");
-        if (ERROR_SUCCESS == ::RegOpenKeyExW(baseloc, curKey, 0,
+        TranslateVersionStr(curKey, &curVer);
+        PL_strcat(curKey, "\\InstallPath");
+        if (ERROR_SUCCESS == ::RegOpenKeyEx(baseloc, curKey, 0,
                                             KEY_QUERY_VALUE, &keyloc)) {
           // We have a sub key
-          if (ERROR_SUCCESS == ::RegQueryValueExW(keyloc, NULL, NULL, &type,
+          if (ERROR_SUCCESS == ::RegQueryValueEx(keyloc, NULL, NULL, &type,
                                                  (LPBYTE)&path, &pathlen)) {
             if (CompareVersion(curVer, maxVer) >= 0 &&
                 CompareVersion(curVer, minVer) >= 0) {
-              wcscpy(newestPath, path);
+              PL_strcpy(newestPath, path);
               CopyVersion(&maxVer, &curVer);
             }
           }
 
           ::RegCloseKey(keyloc);
         }
       }
     }
 
     ::RegCloseKey(baseloc);
 
     if (newestPath[0] != 0) {
-      wcscat(newestPath, L"\\browser");
-      rv = NS_NewLocalFile(nsDependentString(newestPath), PR_TRUE,
-                           getter_AddRefs(localFile));
+      PL_strcat(newestPath,"\\browser");
+      rv = NS_NewNativeLocalFile(nsDependentCString(newestPath), PR_TRUE,
+                                 getter_AddRefs(localFile));
     }
 
   }
 
   if (localFile && NS_SUCCEEDED(rv))
     return CallQueryInterface(localFile, _retval);
 
   return rv;
@@ -624,42 +621,42 @@ nsPluginDirServiceProvider::GetPLIDDirec
   GetPLIDDirectoriesWithHKEY(HKEY_LOCAL_MACHINE, dirs);
 
   return NS_NewArrayEnumerator(aEnumerator, dirs);
 }
 
 nsresult
 nsPluginDirServiceProvider::GetPLIDDirectoriesWithHKEY(HKEY aKey, nsCOMArray<nsILocalFile> &aDirs)
 {
-  wchar_t subkey[_MAX_PATH] = L"Software\\MozillaPlugins";
+  char subkey[_MAX_PATH] = "Software\\MozillaPlugins";
   HKEY baseloc;
 
-  if (ERROR_SUCCESS != ::RegOpenKeyExW(aKey, subkey, 0, KEY_READ, &baseloc))
+  if (ERROR_SUCCESS != ::RegOpenKeyEx(aKey, subkey, 0, KEY_READ, &baseloc))
     return NS_ERROR_FAILURE;
 
   DWORD index = 0;
   DWORD subkeylen = _MAX_PATH;
   FILETIME modTime;
-  while (ERROR_SUCCESS == ::RegEnumKeyExW(baseloc, index++, subkey, &subkeylen,
+  while (ERROR_SUCCESS == ::RegEnumKeyEx(baseloc, index++, subkey, &subkeylen,
                                          NULL, NULL, NULL, &modTime)) {
     subkeylen = _MAX_PATH;
     HKEY keyloc;
 
-    if (ERROR_SUCCESS == ::RegOpenKeyExW(baseloc, subkey, 0, KEY_QUERY_VALUE,
+    if (ERROR_SUCCESS == ::RegOpenKeyEx(baseloc, subkey, 0, KEY_QUERY_VALUE,
                                         &keyloc)) {
       DWORD type;
-      wchar_t path[_MAX_PATH];
+      char path[_MAX_PATH];
       DWORD pathlen = sizeof(path);
 
-      if (ERROR_SUCCESS == ::RegQueryValueExW(keyloc, L"Path", NULL, &type,
+      if (ERROR_SUCCESS == ::RegQueryValueEx(keyloc, "Path", NULL, &type,
                                              (LPBYTE)&path, &pathlen)) {
         nsCOMPtr<nsILocalFile> localFile;
-        if (NS_SUCCEEDED(NS_NewLocalFile(nsDependentString(path),
-                                         PR_TRUE,
-                                         getter_AddRefs(localFile))) &&
+        if (NS_SUCCEEDED(NS_NewNativeLocalFile(nsDependentCString(path),
+                                               PR_TRUE,
+                                               getter_AddRefs(localFile))) &&
             localFile) {
           // Some vendors use a path directly to the DLL so chop off
           // the filename
           PRBool isDir = PR_FALSE;
           if (NS_SUCCEEDED(localFile->IsDirectory(&isDir)) && !isDir) {
             nsCOMPtr<nsIFile> temp;
             localFile->GetParent(getter_AddRefs(temp));
             if (temp)
--- a/modules/plugin/base/src/nsPluginHostImpl.cpp
+++ b/modules/plugin/base/src/nsPluginHostImpl.cpp
@@ -4012,36 +4012,36 @@ nsPluginHostImpl::TrySetUpPluginInstance
 
   // couldn't create an XPCOM plugin, try to create wrapper for a
   // legacy plugin
   if (NS_FAILED(result)) {
     if(plugin) {
 #ifdef XP_WIN
       static BOOL firstJavaPlugin = FALSE;
       BOOL restoreOrigDir = FALSE;
-      PRUnichar origDir[_MAX_PATH];
+      char origDir[_MAX_PATH];
       if (isJavaPlugin && !firstJavaPlugin) {
-        DWORD dw = ::GetCurrentDirectoryW(_MAX_PATH, origDir);
+        DWORD dw = ::GetCurrentDirectory(_MAX_PATH, origDir);
         NS_ASSERTION(dw <= _MAX_PATH, "Falied to obtain the current directory, which may leads to incorrect class laoding");
         nsCOMPtr<nsIFile> binDirectory;
         result = NS_GetSpecialDirectory(NS_XPCOM_CURRENT_PROCESS_DIR,
                                         getter_AddRefs(binDirectory));
 
         if (NS_SUCCEEDED(result)) {
-          nsAutoString path;
-          binDirectory->GetPath(path);
-          restoreOrigDir = ::SetCurrentDirectoryW(path.get());
+          nsCAutoString path;
+          binDirectory->GetNativePath(path);
+          restoreOrigDir = ::SetCurrentDirectory(path.get());
         }
       }
 #endif
       result = plugin->CreateInstance(NULL, kIPluginInstanceIID, (void **)getter_AddRefs(instance));
 
 #ifdef XP_WIN
       if (!firstJavaPlugin && restoreOrigDir) {
-        BOOL bCheck = ::SetCurrentDirectoryW(origDir);
+        BOOL bCheck = ::SetCurrentDirectory(origDir);
         NS_ASSERTION(bCheck, " Error restoring driectoy");
         firstJavaPlugin = TRUE;
       }
 #endif
     }
 
     if (NS_FAILED(result)) {
       nsCOMPtr<nsIPlugin> bwPlugin =
--- a/modules/plugin/base/src/nsPluginNativeWindowWin.cpp
+++ b/modules/plugin/base/src/nsPluginNativeWindowWin.cpp
@@ -57,17 +57,17 @@
 #include "nsPluginSafety.h"
 #include "nsPluginNativeWindow.h"
 #include "nsThreadUtils.h"
 #include "nsAutoPtr.h"
 #include "nsTWeakRef.h"
 
 static NS_DEFINE_CID(kCPluginManagerCID, NS_PLUGINMANAGER_CID); // needed for NS_TRY_SAFE_CALL
 
-#define NS_PLUGIN_WINDOW_PROPERTY_ASSOCIATION L"MozillaPluginWindowPropertyAssociation"
+#define NS_PLUGIN_WINDOW_PROPERTY_ASSOCIATION "MozillaPluginWindowPropertyAssociation"
 
 typedef nsTWeakRef<class nsPluginNativeWindowWin> PluginWindowWeakRef;
 
 /**
  *  PLEvent handling code
  */
 class PluginWindowEvent : public nsRunnable {
 public:
@@ -198,17 +198,17 @@ NS_IMETHODIMP nsDelayedPopupsEnabledEven
   return NS_OK;	
 }
 
 /**
  *   New plugin window procedure
  */
 static LRESULT CALLBACK PluginWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
 {
-  nsPluginNativeWindowWin * win = (nsPluginNativeWindowWin *)::GetPropW(hWnd, NS_PLUGIN_WINDOW_PROPERTY_ASSOCIATION);
+  nsPluginNativeWindowWin * win = (nsPluginNativeWindowWin *)::GetProp(hWnd, NS_PLUGIN_WINDOW_PROPERTY_ASSOCIATION);
   if (!win)
     return TRUE;
 
   // The DispatchEvent(NS_PLUGIN_ACTIVATE) below can trigger a reentrant focus
   // event which might destroy us.  Hold a strong ref on the plugin instance
   // to prevent that, bug 374229.
   nsCOMPtr<nsIPluginInstance> inst;
   win->GetPluginInstance(inst);
@@ -521,34 +521,34 @@ nsresult nsPluginNativeWindowWin::Subcla
   WNDPROC currentWndProc = (WNDPROC)::GetWindowLong(hWnd, GWL_WNDPROC);
   if (PluginWndProc == currentWndProc)
     return NS_OK;
 
   mPluginWinProc = SubclassWindow(hWnd, (LONG)PluginWndProc);
   if (!mPluginWinProc)
     return NS_ERROR_FAILURE;
 
-  nsPluginNativeWindowWin * win = (nsPluginNativeWindowWin *)::GetPropW(hWnd, NS_PLUGIN_WINDOW_PROPERTY_ASSOCIATION);
+  nsPluginNativeWindowWin * win = (nsPluginNativeWindowWin *)::GetProp(hWnd, NS_PLUGIN_WINDOW_PROPERTY_ASSOCIATION);
   NS_ASSERTION(!win || (win == this), "plugin window already has property and this is not us");
   
-  if (!::SetPropW(hWnd, NS_PLUGIN_WINDOW_PROPERTY_ASSOCIATION, (HANDLE)this))
+  if (!::SetProp(hWnd, NS_PLUGIN_WINDOW_PROPERTY_ASSOCIATION, (HANDLE)this))
     return NS_ERROR_FAILURE;
 
   return NS_OK;
 }
 
 nsresult nsPluginNativeWindowWin::UndoSubclassAndAssociateWindow()
 {
   // release plugin instance
   SetPluginInstance(nsnull);
 
   // remove window property
   HWND hWnd = (HWND)window;
   if (IsWindow(hWnd))
-    ::RemovePropW(hWnd, NS_PLUGIN_WINDOW_PROPERTY_ASSOCIATION);
+    ::RemoveProp(hWnd, NS_PLUGIN_WINDOW_PROPERTY_ASSOCIATION);
 
   // restore the original win proc
   // but only do this if this were us last time
   if (mPluginWinProc) {
     WNDPROC currentWndProc = (WNDPROC)::GetWindowLong(hWnd, GWL_WNDPROC);
     if (currentWndProc == PluginWndProc)
       SubclassWindow(hWnd, (LONG)mPluginWinProc);
   }
--- a/modules/plugin/base/src/nsPluginsDirWin.cpp
+++ b/modules/plugin/base/src/nsPluginsDirWin.cpp
@@ -53,28 +53,35 @@
 #include "winbase.h"
 
 #include "nsString.h"
 
 ///////////////////////////////////////////////////////////////////////////
 
 /* Local helper functions */
 
-static char* GetKeyValue(wchar_t* verbuf, wchar_t* key)
+static char* GetKeyValue(char* verbuf, char* key)
 {
-	wchar_t     *buf = NULL;
+	char        *buf = NULL;
 	UINT        blen;
 
-	::VerQueryValueW(verbuf,
-					key,
+	::VerQueryValue(verbuf,
+					TEXT(key),
 					(void **)&buf, &blen);
 
 	if(buf != NULL)
 	{
-        return strdup(NS_ConvertUTF16toUTF8(buf).get());
+#ifdef WINCE
+        // On windows CE, the verbuf is wide and the shunt
+        // layer can't do much about it.  So, here we
+        // convert the wide string.
+		return PL_strdup(NS_ConvertUTF16toUTF8((PRUnichar*)buf).get());
+#else
+		return PL_strdup(buf);	
+#endif
 	}
 
 	return nsnull;
 }
 
 static PRUint32 CalculateVariantCount(char* mimeTypes)
 {
 	PRUint32 variants = 1;
@@ -204,89 +211,87 @@ nsPluginFile::~nsPluginFile()
  * mechanism. Handles platform differences in loading shared libraries.
  */
 nsresult nsPluginFile::LoadPlugin(PRLibrary* &outLibrary)
 {
 	// How can we convert to a full path names for using with NSPR?
     if (!mPlugin)
         return NS_ERROR_NULL_POINTER;
 
-    nsAutoString temp;
-    mPlugin->GetPath(temp);
+    nsCAutoString temp;
+    mPlugin->GetNativePath(temp);
 
-    PRUnichar* index;
-    PRUnichar* pluginFolderPath = _wcsdup(temp.get());
+    char* index;
+    char* pluginFolderPath = PL_strdup(temp.get());
     
-    index = wcsrchr(pluginFolderPath, '\\');
+    index = PL_strrchr(pluginFolderPath, '\\');
     *index = 0;
     
 	BOOL restoreOrigDir = FALSE;
-	PRUnichar aOrigDir[MAX_PATH + 1];
-	DWORD dwCheck = ::GetCurrentDirectoryW(sizeof(aOrigDir), aOrigDir);
+	char aOrigDir[MAX_PATH + 1];
+	DWORD dwCheck = ::GetCurrentDirectory(sizeof(aOrigDir), aOrigDir);
 	NS_ASSERTION(dwCheck <= MAX_PATH + 1, "Error in Loading plugin");
 
 	if (dwCheck <= MAX_PATH + 1)
   	{
-		restoreOrigDir = ::SetCurrentDirectoryW(pluginFolderPath);
+		restoreOrigDir = ::SetCurrentDirectory(pluginFolderPath);
 		NS_ASSERTION(restoreOrigDir, "Error in Loading plugin");
     }
     
-	outLibrary = PR_LoadLibrary(NS_ConvertUTF16toUTF8(temp).get());
+	outLibrary = PR_LoadLibrary(temp.get());
     
 	if (restoreOrigDir)
 	{
-        BOOL bCheck = ::SetCurrentDirectoryW(aOrigDir);
+        BOOL bCheck = ::SetCurrentDirectory(aOrigDir);
 		NS_ASSERTION(bCheck, "Error in Loading plugin");
     }
     
-    free(pluginFolderPath);
+    PL_strfree(pluginFolderPath);
     
 	return NS_OK;
 }
 
 /**
  * Obtains all of the information currently available for this plugin.
  */
 nsresult nsPluginFile::GetPluginInfo(nsPluginInfo& info)
 {
     nsresult res = NS_OK;
 	DWORD zerome, versionsize;
-	PRUnichar* verbuf = nsnull;
+	char* verbuf = nsnull;
 
-	const PRUnichar* path;
+	const char* path;
 
     if (!mPlugin)
         return NS_ERROR_NULL_POINTER;
 
-    nsAutoString temp;
-    mPlugin->GetPath(temp);
+    nsCAutoString temp;
+    mPlugin->GetNativePath(temp);
     path = temp.get();
     
-    versionsize = ::GetFileVersionInfoSizeW(path, &zerome);
+    versionsize = ::GetFileVersionInfoSize((char*)path, &zerome);
 	if (versionsize > 0)
-		verbuf = (wchar_t *)PR_Malloc(versionsize);
+		verbuf = (char *)PR_Malloc(versionsize);
 	if(!verbuf)
 		return NS_ERROR_OUT_OF_MEMORY;
     
-	if(::GetFileVersionInfoW(path, NULL, versionsize, verbuf))
+	if(::GetFileVersionInfo((char*)path, NULL, versionsize, verbuf))
     {
-        info.fName = GetKeyValue(verbuf, L"\\StringFileInfo\\040904E4\\ProductName");
-		info.fDescription = GetKeyValue(verbuf, L"\\StringFileInfo\\040904E4\\FileDescription");
+        info.fName = GetKeyValue(verbuf, "\\StringFileInfo\\040904E4\\ProductName");
+		info.fDescription = GetKeyValue(verbuf, "\\StringFileInfo\\040904E4\\FileDescription");
 
-		char *mimeType = GetKeyValue(verbuf, L"\\StringFileInfo\\040904E4\\MIMEType");
-		char *mimeDescription = GetKeyValue(verbuf, L"\\StringFileInfo\\040904E4\\FileOpenName");
-		char *extensions = GetKeyValue(verbuf, L"\\StringFileInfo\\040904E4\\FileExtents");
+		char *mimeType = GetKeyValue(verbuf, "\\StringFileInfo\\040904E4\\MIMEType");
+		char *mimeDescription = GetKeyValue(verbuf, "\\StringFileInfo\\040904E4\\FileOpenName");
+		char *extensions = GetKeyValue(verbuf, "\\StringFileInfo\\040904E4\\FileExtents");
 
 		info.fVariantCount = CalculateVariantCount(mimeType);
 		info.fMimeTypeArray = MakeStringArray(info.fVariantCount, mimeType);
 		info.fMimeDescriptionArray = MakeStringArray(info.fVariantCount, mimeDescription);
 		info.fExtensionArray = MakeStringArray(info.fVariantCount, extensions);
-
-        // fFileName is narrow.  fix?
-        info.fFileName = PL_strdup(NS_ConvertUTF16toUTF8(path).get());
+        info.fFileName = PL_strdup(path);
         
         PL_strfree(mimeType);
         PL_strfree(mimeDescription);
         PL_strfree(extensions);
 	}
 	else
 		res = NS_ERROR_FAILURE;
 
--- a/modules/plugin/samples/default/windows/dialogs.cpp
+++ b/modules/plugin/samples/default/windows/dialogs.cpp
@@ -74,67 +74,60 @@ static BOOL onInitDialog(HWND hWnd, HWND
   assert(pPlugin != NULL);
   if(pPlugin == NULL)
     return TRUE;
 
   SetWindowLong(hWnd, DWL_USER, (LONG)pPlugin);
 
   pPlugin->m_hWndDialog = hWnd;
   
-  wchar_t szString[512];
-  LoadStringW(hInst, IDS_TITLE, szString, sizeof(szString));
-  SetWindowTextW(hWnd, szString);
+  char szString[512];
+  LoadString(hInst, IDS_TITLE, szString, sizeof(szString));
+  SetWindowText(hWnd, szString);
 
-  LoadStringW(hInst, IDS_INFO, szString, sizeof(szString));
-  SetDlgItemTextW(hWnd, IDC_STATIC_INFO, szString);
+  LoadString(hInst, IDS_INFO, szString, sizeof(szString));
+  SetDlgItemText(hWnd, IDC_STATIC_INFO, szString);
 
-  // convert m_pNPMIMEType dougt
-  SetDlgItemTextA(hWnd, IDC_STATIC_INFOTYPE, pPlugin->m_pNPMIMEType);
+  SetDlgItemText(hWnd, IDC_STATIC_INFOTYPE, (LPSTR)pPlugin->m_pNPMIMEType);
 
-  LoadStringW(hInst, IDS_LOCATION, szString, sizeof(szString));
-  SetDlgItemTextW(hWnd, IDC_STATIC_LOCATION, szString);
+  LoadString(hInst, IDS_LOCATION, szString, sizeof(szString));
+  SetDlgItemText(hWnd, IDC_STATIC_LOCATION, szString);
 
   char contentTypeIsJava = 0;
 
   if (NULL != pPlugin->m_pNPMIMEType) {
     contentTypeIsJava = (0 == strcmp("application/x-java-vm",
 				     pPlugin->m_pNPMIMEType)) ? 1 : 0;
   }
   
   if(pPlugin->m_szPageURL == NULL || contentTypeIsJava)
-    LoadStringW(hInst, IDS_FINDER_PAGE, szString, sizeof(szString));
+    LoadString(hInst, IDS_FINDER_PAGE, szString, sizeof(szString));
   else
-  {
-    MultiByteToWideChar( CP_ACP, 0,
-                         pPlugin->m_szPageURL,
-                         strlen(pPlugin->m_szPageURL)+1,
-                         szString,   
-                         511 ); // defect #362738
-  }
-
+    strncpy(szString, pPlugin->m_szPageURL,511); // defect #362738
+  
   SetDlgItemTextWrapped(hWnd, IDC_STATIC_URL, szString);
 
-  LoadStringW(hInst, IDS_QUESTION, szString, sizeof(szString));
-  SetDlgItemTextW(hWnd, IDC_STATIC_QUESTION, szString);
+  LoadString(hInst, IDS_QUESTION, szString, sizeof(szString));
+  SetDlgItemText(hWnd, IDC_STATIC_QUESTION, szString);
 
-  SetDlgItemTextW(hWnd, IDC_STATIC_WARNING, L"");
+  SetDlgItemText(hWnd, IDC_STATIC_WARNING, "");
 
   if(!pPlugin->m_bOnline)
   {
     EnableWindow(GetDlgItem(hWnd, IDC_GET_PLUGIN), FALSE);
-    LoadStringW(hInst, IDS_WARNING_OFFLINE, szString, sizeof(szString));
-    SetDlgItemTextW(hWnd, IDC_STATIC_WARNING, szString);
-    SetDlgItemTextW(hWnd, IDC_STATIC_QUESTION, L"");
+    LoadString(hInst, IDS_WARNING_OFFLINE, szString, sizeof(szString));
+    SetDlgItemText(hWnd, IDC_STATIC_WARNING, szString);
+    SetDlgItemText(hWnd, IDC_STATIC_QUESTION, "");
     return TRUE;
   }
 
   if((!pPlugin->m_bJava) || (!pPlugin->m_bJavaScript) || (!pPlugin->m_bSmartUpdate))
   {
-    LoadStringW(hInst, IDS_WARNING_JS, szString, sizeof(szString));
-    SetDlgItemTextW(hWnd, IDC_STATIC_WARNING, szString);
+    LoadString(hInst, IDS_WARNING_JS, szString, sizeof(szString));
+    SetDlgItemText(hWnd, IDC_STATIC_WARNING, szString);
     return TRUE;
   }
 
   ShowWindow(GetDlgItem(hWnd, IDC_STATIC_WARNING), SW_HIDE);
 
   RECT rc;
   GetWindowRect(GetDlgItem(hWnd, IDC_STATIC_WARNING), &rc);
   int iHeight = rc.bottom - rc.top;
--- a/modules/plugin/samples/default/windows/npshell.cpp
+++ b/modules/plugin/samples/default/windows/npshell.cpp
@@ -81,28 +81,28 @@ NPError NP_LOADDS NPP_New(NPMIMEType plu
   char * szPageURL = NULL;
   char * szFileURL = NULL;
   char * szFileExtension = NULL;
   char * buf = NULL;
   BOOL bHidden = FALSE;
 
   for(int i = 0; i < argc; i++)
   {
-    if(strcmpi(argn[i],"pluginspage") == 0 && argv[i] != NULL)
+    if(lstrcmpi(argn[i],"pluginspage") == 0 && argv[i] != NULL)
       szPageURL = (char *)argv[i];
-    else if(strcmpi(argn[i],"codebase") == 0 && argv[i] != NULL)
+    else if(lstrcmpi(argn[i],"codebase") == 0 && argv[i] != NULL)
       szPageURL = (char *)argv[i];
-    else if(strcmpi(argn[i],"pluginurl") == 0 && argv[i] != NULL)
+    else if(lstrcmpi(argn[i],"pluginurl") == 0 && argv[i] != NULL)
       szFileURL = (char *)argv[i];
-    else if(strcmpi(argn[i],"classid") == 0 && argv[i] != NULL)
+    else if(lstrcmpi(argn[i],"classid") == 0 && argv[i] != NULL)
       szFileURL = (char *)argv[i];
-    else if(strcmpi(argn[i],"SRC") == 0 && argv[i] != NULL)
+    else if(lstrcmpi(argn[i],"SRC") == 0 && argv[i] != NULL)
       buf = (char *)argv[i];
-    else if(strcmpi(argn[i],"HIDDEN") == 0 && argv[i] != NULL)
-      bHidden = (strcmp((char *)argv[i], "TRUE") == 0);
+    else if(lstrcmpi(argn[i],"HIDDEN") == 0 && argv[i] != NULL)
+      bHidden = (lstrcmp((char *)argv[i], "TRUE") == 0);
   }
 
   /* some post-processing on the filename to attempt to extract the extension:  */
   if(buf != NULL)
   {
     buf = strrchr(buf, '.');
     if(buf)
       szFileExtension = ++buf;
--- a/modules/plugin/samples/default/windows/plugin.cpp
+++ b/modules/plugin/samples/default/windows/plugin.cpp
@@ -46,51 +46,51 @@
 #include "dialogs.h"
 #include "dbg.h"
 #include "nsIServiceManager.h"
 #include "nsIPrefService.h"
 #include "nsIPrefBranch.h"
 
 nsIServiceManager * gServiceManager = NULL;
 
-static wchar_t szNullPluginWindowClassName[] = CLASS_NULL_PLUGIN;
+static char szNullPluginWindowClassName[] = CLASS_NULL_PLUGIN;
 
 static LRESULT CALLBACK NP_LOADDS PluginWndProc(HWND, UINT, WPARAM, LPARAM);
 
 static char szDefaultPluginFinderURL[] = DEFAULT_PLUGINFINDER_URL;
 static char szPageUrlForJavaScript[] = PAGE_URL_FOR_JAVASCRIPT;
 static char szPageUrlForJVM[] = JVM_SMARTUPDATE_URL;
 //static char szPluginFinderCommandFormatString[] = PLUGINFINDER_COMMAND;
 static char szPluginFinderCommandBeginning[] = PLUGINFINDER_COMMAND_BEGINNING;
 static char szPluginFinderCommandEnd[] = PLUGINFINDER_COMMAND_END;
 
 BOOL RegisterNullPluginWindowClass()
 {
   assert(hInst != NULL);
 
-  WNDCLASSW wc;
+  WNDCLASS wc;
 
   memset(&wc, 0, sizeof(wc));
 
   wc.lpfnWndProc   = (WNDPROC)PluginWndProc;
   wc.cbWndExtra    = sizeof(DWORD);
   wc.hInstance     = hInst;
   wc.hIcon         = LoadIcon(hInst, IDI_APPLICATION);
   wc.hCursor       = NULL;
   wc.hbrBackground = HBRUSH(COLOR_WINDOW + 1);
   wc.lpszClassName = szNullPluginWindowClassName;
 
-  ATOM aRet = RegisterClassW(&wc);
+  ATOM aRet = RegisterClass(&wc);
   return (aRet != NULL);
 }
 
 void UnregisterNullPluginWindowClass()
 {
   assert(hInst != NULL);
-  UnregisterClassW(szNullPluginWindowClassName, hInst);
+  UnregisterClass(szNullPluginWindowClassName, hInst);
 }
 
 /*********************************************/
 /*                                           */
 /*       CPlugin class implementation        */
 /*                                           */
 /*********************************************/
 
@@ -124,51 +124,51 @@ CPlugin::CPlugin(HINSTANCE hInst,
   m_bHidden(bHidden)
 {
   dbgOut1("CPlugin::CPlugin()");
   assert(m_hInst != NULL);
   assert(m_pNPInstance != NULL);
 
   if(pluginType && *pluginType)
   {
-    m_pNPMIMEType = (NPMIMEType) new char[strlen(pluginType) + 1];
+    m_pNPMIMEType = (NPMIMEType)new char[lstrlen((LPSTR)pluginType) + 1];
     if(m_pNPMIMEType != NULL)
-      strcpy(m_pNPMIMEType, pluginType);
+      lstrcpy((LPSTR)m_pNPMIMEType, pluginType);
   }
 
   if(szPageURL && *szPageURL)
   {
-    m_szPageURL = new char[strlen(szPageURL) + 1];
+    m_szPageURL = new char[lstrlen(szPageURL) + 1];
     if(m_szPageURL != NULL)
-      strcpy(m_szPageURL, szPageURL);
+      lstrcpy(m_szPageURL, szPageURL);
   }
   
   if(szFileURL && *szFileURL)
   {
-    m_szFileURL = new char[strlen(szFileURL) + 1];
+    m_szFileURL = new char[lstrlen(szFileURL) + 1];
     if(m_szFileURL != NULL)
-      strcpy(m_szFileURL, szFileURL);
+      lstrcpy(m_szFileURL, szFileURL);
   }
 
   if(szFileExtension && *szFileExtension)
   {
-    m_szFileExtension = new char[strlen(szFileExtension) + 1];
+    m_szFileExtension = new char[lstrlen(szFileExtension) + 1];
     if(m_szFileExtension != NULL)
-      strcpy(m_szFileExtension, szFileExtension);
+      lstrcpy(m_szFileExtension, szFileExtension);
   }
 
   m_hIcon = LoadIcon(m_hInst, MAKEINTRESOURCE(IDI_PLUGICON));
 
-  wchar_t szString[1024] = {'\0'};
-  LoadStringW(m_hInst, IDS_CLICK_TO_GET, szString, sizeof(szString));
+  char szString[1024] = {'\0'};
+  LoadString(m_hInst, IDS_CLICK_TO_GET, szString, sizeof(szString));
   if(*szString)
   {
-    m_szCommandMessage = new wchar_t[wcslen(szString) + 1];
+    m_szCommandMessage = new char[lstrlen(szString) + 1];
     if(m_szCommandMessage != NULL)
-      wcscpy(m_szCommandMessage, szString);
+      lstrcpy(m_szCommandMessage, szString);
   }
 }
 
 CPlugin::~CPlugin()
 {
   dbgOut1("CPlugin::~CPlugin()");
 
   if(m_pNPMIMEType != NULL)
@@ -248,18 +248,18 @@ BOOL CPlugin::init(HWND hWndParent)
     assert(IsWindow(hWndParent));
 
     if(IsWindow(hWndParent))
       m_hWndParent = hWndParent;
 
     RECT rcParent;
     GetClientRect(m_hWndParent, &rcParent);
 
-    CreateWindowW(szNullPluginWindowClassName, 
-                 L"NULL Plugin", 
+    CreateWindow(szNullPluginWindowClassName, 
+                 "NULL Plugin", 
                  WS_CHILD,
                  0,0, rcParent.right, rcParent.bottom,
                  m_hWndParent,
                  (HMENU)NULL,
                  m_hInst,
                  (LPVOID)this);
 
     assert(m_hWnd != NULL);
@@ -327,72 +327,72 @@ LPSTR CPlugin::createURLString()
   {
     delete [] m_szURLString;
     m_szURLString = NULL;
   }
 
   // check if there is file URL first
   if(!m_bSmartUpdate && m_szFileURL != NULL)
   {
-    m_szURLString = new char[strlen(m_szFileURL) + 1];
+    m_szURLString = new char[lstrlen(m_szFileURL) + 1];
     if(m_szURLString == NULL)
       return NULL;
-    strcpy(m_szURLString, m_szFileURL);
+    lstrcpy(m_szURLString, m_szFileURL);
     return m_szURLString;
   }
   
   // if not get the page URL
   char * szAddress = NULL;
   char *urlToOpen = NULL;
   char contentTypeIsJava = 0;
 
   if (NULL != m_pNPMIMEType) {
     contentTypeIsJava = (0 == strcmp("application/x-java-vm",
 				     m_pNPMIMEType)) ? 1 : 0;
   }
   
   if(!m_bSmartUpdate && m_szPageURL != NULL && !contentTypeIsJava)
   {
-    szAddress = new char[strlen(m_szPageURL) + 1];
+    szAddress = new char[lstrlen(m_szPageURL) + 1];
     if(szAddress == NULL)
       return NULL;
-    strcpy(szAddress, m_szPageURL);
+    lstrcpy(szAddress, m_szPageURL);
 
-    m_szURLString = new char[strlen(szAddress) + 1 + strlen(m_pNPMIMEType) + 1];
+    m_szURLString = new char[lstrlen(szAddress) + 1 + lstrlen((LPSTR)m_pNPMIMEType) + 1];
 
     if(m_szURLString == NULL)
       return NULL;
 
     // Append the MIME type to the URL
-    sprintf(m_szURLString, "%s?%s", szAddress, (LPSTR)m_pNPMIMEType);
+    wsprintf(m_szURLString, "%s?%s", szAddress, (LPSTR)m_pNPMIMEType);
   }
   else // default
   {
     if(!m_bSmartUpdate)
     {
       urlToOpen = szDefaultPluginFinderURL;
       
       if (contentTypeIsJava) {
         urlToOpen = szPageUrlForJVM;
       }
 
-      szAddress = new char[strlen(urlToOpen) + 1];
+      szAddress = new char[lstrlen(urlToOpen) + 1];
       if(szAddress == NULL)
         return NULL;
-      strcpy(szAddress, urlToOpen);
+      lstrcpy(szAddress, urlToOpen);
 
-      m_szURLString = new char[strlen(szAddress) + 10 + 
-                               strlen(m_pNPMIMEType) + 1];
+      m_szURLString = new char[lstrlen(szAddress) + 10 + 
+                               lstrlen((LPSTR)m_pNPMIMEType) + 1];
 
       if(m_szURLString == NULL)
         return NULL;
 
       // Append the MIME type to the URL
-      sprintf(m_szURLString, "%s?mimetype=%s", 
-              szAddress, m_pNPMIMEType);
+      wsprintf(m_szURLString, "%s?mimetype=%s", 
+               szAddress, (LPSTR)m_pNPMIMEType);
     }
     else
     {
       urlToOpen = szPageUrlForJavaScript;
 
       if (contentTypeIsJava) {
         urlToOpen = szPageUrlForJVM;
       }
@@ -404,25 +404,24 @@ LPSTR CPlugin::createURLString()
         m_szPageURL[0] = '\0';
       }
 
       if (!m_szFileURL) {
         m_szFileURL = new char[1];
         m_szFileURL[0] = '\0';
       }
 
-      m_szURLString = new char[strlen(szPluginFinderCommandBeginning) + strlen(urlToOpen) + 10 + 
-                               strlen((LPSTR)m_pNPMIMEType) + 13 +
-                               strlen((LPSTR)m_szPageURL) + 11 + 
-                               strlen((LPSTR)m_szFileURL) +
-                               strlen(szPluginFinderCommandEnd) + 1];
-      sprintf(m_szURLString, "%s%s?mimetype=%s&pluginspage=%s&pluginurl=%s%s",
-              szPluginFinderCommandBeginning, urlToOpen, 
-              m_pNPMIMEType, m_szPageURL, m_szFileURL, 
-              szPluginFinderCommandEnd);
+      m_szURLString = new char[lstrlen(szPluginFinderCommandBeginning) + lstrlen(urlToOpen) + 10 + 
+                               lstrlen((LPSTR)m_pNPMIMEType) + 13 +
+                               lstrlen((LPSTR)m_szPageURL) + 11 + 
+                               lstrlen((LPSTR)m_szFileURL) +
+                               lstrlen(szPluginFinderCommandEnd) + 1];
+      wsprintf(m_szURLString, "%s%s?mimetype=%s&pluginspage=%s&pluginurl=%s%s",
+               szPluginFinderCommandBeginning, urlToOpen, 
+               (LPSTR)m_pNPMIMEType, m_szPageURL, m_szFileURL, szPluginFinderCommandEnd);
 
     }
   }
 
   if(szAddress != NULL)
     delete [] szAddress;
 
   return m_szURLString;
@@ -508,23 +507,23 @@ void CPlugin::showGetPluginDialog()
 void CPlugin::getPlugin()
 {
   if(m_szCommandMessage != NULL)
   {
     delete [] m_szCommandMessage;
     m_szCommandMessage = NULL;
   }
 
-  wchar_t szString[1024] = {'\0'};
-  LoadStringW(m_hInst, IDS_CLICK_WHEN_DONE, szString, sizeof(szString));
+  char szString[1024] = {'\0'};
+  LoadString(m_hInst, IDS_CLICK_WHEN_DONE, szString, sizeof(szString));
   if(*szString)
   {
-    m_szCommandMessage = new wchar_t[wcslen(szString) + 1];
+    m_szCommandMessage = new char[lstrlen(szString) + 1];
     if(m_szCommandMessage != NULL)
-      wcscpy(m_szCommandMessage, szString);
+      lstrcpy(m_szCommandMessage, szString);
   }
 
   InvalidateRect(m_hWnd, NULL, TRUE);
   UpdateWindow(m_hWnd);
 
   getPluginRegular();
 }
 
@@ -544,30 +543,30 @@ void CPlugin::print(NPPrint * pNPPrint)
     return;
 }
 
 void CPlugin::URLNotify(const char * szURL)
 {
   dbgOut2("CPlugin::URLNotify(), URL '%s'", szURL);
 
   NPStream * pStream = NULL;
-  wchar_t buf[256];
+  char buf[256];
 
   assert(m_hInst != NULL);
   assert(m_pNPInstance != NULL);
   
-  int iSize = LoadStringW(m_hInst, IDS_GOING2HTML, buf, sizeof(buf));
+  int iSize = LoadString(m_hInst, IDS_GOING2HTML, buf, sizeof(buf));
 
   NPError rc = NPN_NewStream(m_pNPInstance, "text/html", "asd_plugin_finder", &pStream);
   if (rc != NPERR_NO_ERROR)
     return;
 
-  //wchar_t buf[] = L"<html>\n<body>\n\n<h2 align=center>NPN_NewStream / NPN_Write - This seems to work.</h2>\n\n</body>\n</html>";
+  //char buf[] = "<html>\n<body>\n\n<h2 align=center>NPN_NewStream / NPN_Write - This seems to work.</h2>\n\n</body>\n</html>";
   
-  NPN_Write(m_pNPInstance, pStream, iSize, buf); // buf is unicode now.
+  NPN_Write(m_pNPInstance, pStream, iSize, buf);
 
   NPN_DestroyStream(m_pNPInstance, pStream, NPRES_DONE);
 }
 
 NPError CPlugin::newStream(NPMIMEType type, NPStream *stream, NPBool seekable, uint16 *stype)
 {
   if (!m_bWaitingStreamFromPFS)
     return NPERR_NO_ERROR;
@@ -590,22 +589,22 @@ NPError CPlugin::destroyStream(NPStream 
   if (stream == m_PFSStream)
     m_PFSStream = NULL;
 
   return NPERR_NO_ERROR;
 }
 
 BOOL CPlugin::readyToRefresh()
 {
-  wchar_t szString[1024] = {'\0'};
-  LoadStringW(m_hInst, IDS_CLICK_WHEN_DONE, szString, sizeof(szString));
+  char szString[1024] = {'\0'};
+  LoadString(m_hInst, IDS_CLICK_WHEN_DONE, szString, sizeof(szString));
   if(m_szCommandMessage == NULL)
     return FALSE;
 
-  return (wcscmp(m_szCommandMessage, szString) == 0);
+  return (lstrcmp(m_szCommandMessage, szString) == 0);
 }
 
 //***************************
 // Windows message handlers
 //***************************
 void CPlugin::onCreate(HWND hWnd)
 {
   m_hWnd = hWnd;
@@ -622,28 +621,28 @@ void CPlugin::onLButtonUp(HWND hWnd, int
 void CPlugin::onRButtonUp(HWND hWnd, int x, int y, UINT keyFlags)
 {
   if(!readyToRefresh())
     showGetPluginDialog();
   else
     NPN_GetURL(m_pNPInstance, "javascript:navigator.plugins.refresh(true)", "_self");
 }
 
-static void DrawCommandMessage(HDC hDC, wchar_t* szString, LPRECT lprc)
+static void DrawCommandMessage(HDC hDC, LPSTR szString, LPRECT lprc)
 {
   if(szString == NULL)
     return;
 
   HFONT hFont = GetStockFont(DEFAULT_GUI_FONT);
   if(hFont == NULL)
     return;
 
   HFONT hFontOld = SelectFont(hDC, hFont);
   SIZE sz;
-  GetTextExtentPoint32W(hDC, szString, wcslen(szString), &sz);
+  GetTextExtentPoint32(hDC, szString, lstrlen(szString), &sz);
   POINT pt;
   pt.x = sz.cx;
   pt.y = sz.cy;
   LPtoDP(hDC, &pt, 1);
 
   int iY = (lprc->bottom / 2) - ((32) / 2) + 36;
   int iX = 0;
 
@@ -655,17 +654,17 @@ static void DrawCommandMessage(HDC hDC, 
   RECT rcText;
   rcText.left   = iX;
   rcText.right  = rcText.left + pt.x;
   rcText.top    = iY;
   rcText.bottom = rcText.top + pt.y;
 
   int iModeOld = SetBkMode(hDC, TRANSPARENT);
   COLORREF crColorOld = SetTextColor(hDC, RGB(0,0,0));
-  DrawTextW(hDC, szString, wcslen(szString), &rcText, DT_CENTER|DT_VCENTER);
+  DrawText(hDC, szString, lstrlen(szString), &rcText, DT_CENTER|DT_VCENTER);
   SetTextColor(hDC, crColorOld);
   SetBkMode(hDC, iModeOld);
   SelectFont(hDC, hFontOld);
 }
 
 void CPlugin::onPaint(HWND hWnd)
 {
   RECT rc;
--- a/modules/plugin/samples/default/windows/plugin.h
+++ b/modules/plugin/samples/default/windows/plugin.h
@@ -46,17 +46,17 @@ private:
   HINSTANCE m_hInst;
   NPP       m_pNPInstance;
   WORD      m_wMode;
   HWND      m_hWnd;
   HWND      m_hWndParent;
   HICON     m_hIcon;
   char*     m_szURLString;
 
-  wchar_t*  m_szCommandMessage;
+  char*     m_szCommandMessage;
   BOOL      m_bWaitingStreamFromPFS;
   NPStream* m_PFSStream;
 
 public:
   BOOL       m_bHidden;
   NPMIMEType m_pNPMIMEType;
   LPSTR      m_szPageURL;       // Location of plug-in HTML page
   LPSTR      m_szFileURL;       // Location of plug-in JAR file 
@@ -113,24 +113,24 @@ public:
 #define PAGE_URL_FOR_JAVASCRIPT "http://plugindoc.mozdev.org/winmime.html"
 
 #define PLUGINFINDER_COMMAND_BEGINNING ""
 #define PLUGINFINDER_COMMAND_END ""
 #define DEFAULT_PLUGINFINDER_URL "http://plugindoc.mozdev.org/winmime.html"
 #define JVM_SMARTUPDATE_URL "http://java.com/download"
 
 #ifdef WIN32
-#define REGISTRY_PLACE L"Software\\Netscape\\Netscape Navigator\\Default Plugin"
+#define REGISTRY_PLACE "Software\\Netscape\\Netscape Navigator\\Default Plugin"
 #else
 #define GWL_USERDATA        0
 #define COLOR_3DSHADOW      COLOR_BTNFACE
 #define COLOR_3DLIGHT       COLOR_BTNHIGHLIGHT
 #define COLOR_3DDKSHADOW    COLOR_BTNSHADOW
 #endif
 
-#define CLASS_NULL_PLUGIN L"NullPluginClass"
+#define CLASS_NULL_PLUGIN "NullPluginClass"
  
 BOOL RegisterNullPluginWindowClass();
 void UnregisterNullPluginWindowClass();
 
 extern HINSTANCE hInst;
 
 #endif // __PLUGIN_HPP__
--- a/modules/plugin/samples/default/windows/utils.cpp
+++ b/modules/plugin/samples/default/windows/utils.cpp
@@ -40,139 +40,132 @@
 
 #include "plugin.h"
 
 // open the registry, create if necessary
 HKEY openRegistry()      
 {
   HKEY phkResult;
 
-  if(RegCreateKeyW(HKEY_CURRENT_USER, REGISTRY_PLACE, &phkResult) != ERROR_SUCCESS)
-    MessageBoxW(0, L"Error creating Default Plugin registry key", L"Default Plugin", MB_OK);
+  if(RegCreateKey(HKEY_CURRENT_USER, REGISTRY_PLACE, &phkResult) != ERROR_SUCCESS)
+    MessageBox(0, "Error creating Default Plugin registry key", "Default Plugin", MB_OK);
 
   return phkResult;
 }
 
 // return TRUE if we've never seen this MIME type before
 BOOL IsNewMimeType(LPSTR mime)   
 {
   HKEY hkey = openRegistry();
   DWORD dwType, keysize = 512;
-  wchar_t keybuf[512];
-  wchar_t wideMime[64];
+  char keybuf[512];
 
-  MultiByteToWideChar(CP_ACP, 0, 
-                      mime,
-                      strlen(mime) + 1, 
-                      wideMime, 
-                      64);
-  
-  if(RegQueryValueExW(hkey, wideMime, 0, &dwType, (LPBYTE) &keybuf, &keysize) == ERROR_SUCCESS)
+  if(RegQueryValueEx(hkey, mime, 0, &dwType, (LPBYTE) &keybuf, &keysize) == ERROR_SUCCESS)
   {
     // key exists, must have already been here...
     return FALSE;
   }
   else 
   {
-    if(RegSetValueExW(hkey, wideMime, 0,  REG_SZ, (LPBYTE) L"(none)", 7) != ERROR_SUCCESS)
-      MessageBoxW(0, L"Error adding MIME type value", L"Default Plugin", MB_OK);
+    if(RegSetValueEx(hkey, mime, 0,  REG_SZ, (LPBYTE) "(none)", 7) != ERROR_SUCCESS)
+      MessageBox(0, "Error adding MIME type value", "Default Plugin", MB_OK);
 
     return TRUE;
   }
 }
 
 // string length in pixels for the specific window (selected font)
-static int getWindowStringLength(HWND hWnd, wchar_t* lpsz)
+static int getWindowStringLength(HWND hWnd, LPSTR lpsz)
 {
   SIZE sz;
   HDC hDC = GetDC(hWnd);
   HFONT hWindowFont = GetWindowFont(hWnd);
   HFONT hFontOld = SelectFont(hDC, hWindowFont);
-  GetTextExtentPoint32W(hDC, lpsz, wcslen(lpsz), &sz);
+  GetTextExtentPoint32(hDC, lpsz, lstrlen(lpsz), &sz);
   POINT pt;
   pt.x = sz.cx;
   pt.y = sz.cy;
   LPtoDP(hDC, &pt, 1);
   SelectFont(hDC, hFontOld);
   ReleaseDC(hWnd, hDC);
   return (int)pt.x;
 }
 
-/*******************************************************************/
-/*                                                                 */
-/* void SetDlgItemTextWrapped(HWND hWnd, int iID, wchar_t* szText) */
-/*                                                                 */
-/* helper to wrap long lines in a static control, which do not     */
-/* wrap automatically if they do not have space characters         */
-/*                                                                 */
-/*******************************************************************/
-void SetDlgItemTextWrapped(HWND hWnd, int iID, wchar_t* szText)
+/****************************************************************/
+/*                                                              */
+/* void SetDlgItemTextWrapped(HWND hWnd, int iID, LPSTR szText) */
+/*                                                              */
+/* helper to wrap long lines in a static control, which do not  */
+/* wrap automatically if they do not have space characters      */
+/*                                                              */
+/****************************************************************/
+void SetDlgItemTextWrapped(HWND hWnd, int iID, LPSTR szText)
 {
   HWND hWndStatic = GetDlgItem(hWnd, iID);
-  if((szText == NULL) || (wcslen(szText) == 0))
+  if((szText == NULL) || (lstrlen(szText) == 0))
   {
-    SetDlgItemTextW(hWnd, iID, L"");
+    SetDlgItemText(hWnd, iID, "");
     return;
   }
 
   RECT rc;
   GetClientRect(hWndStatic, &rc);
 
   int iStaticLength = rc.right - rc.left;
   int iStringLength = getWindowStringLength(hWndStatic, szText);
 
   if(iStringLength <= iStaticLength)
   {
-    SetDlgItemTextW(hWnd, iID, szText);
+    SetDlgItemText(hWnd, iID, szText);
     return;
   }
 
   int iBreaks = iStringLength/iStaticLength;
   if(iBreaks <= 0)
     return;
 
-  wchar_t * pBuf = new wchar_t[iStringLength + iBreaks + 1];
+  char * pBuf = new char[iStringLength + iBreaks + 1];
   if(pBuf == NULL)
     return;
 
-  wcscpy(pBuf, L"");
+  lstrcpy(pBuf, "");
 
   int iStart = 0;
   int iLines = 0;
   for(int i = 0; i < iStringLength; i++)
   {
-    wchar_t* sz = &szText[iStart];
+    char * sz = &szText[iStart];
     int iIndex = i - iStart;
-    wchar_t ch = sz[iIndex + 1];
+    char ch = sz[iIndex + 1];
 
     sz[iIndex + 1] = '\0';
 
     int iLength = getWindowStringLength(hWndStatic, sz);
 
     if(iLength < iStaticLength)
     {
       sz[iIndex + 1] = ch;
       if(iLines == iBreaks)
       {
-        wcscat(pBuf, sz);
+        lstrcat(pBuf, sz);
         break;
       }
       continue;
     }
 
     sz[iIndex + 1] = ch;  // restore zeroed element
     i--;                  // go one step back
 
     ch = sz[iIndex];
     sz[iIndex] = '\0';    // terminate string one char shorter
 
-    wcscat(pBuf, sz);     // append the string
-    wcscat(pBuf, L" ");   // append space character for successful wrapping
+    lstrcat(pBuf, sz);    // append the string
+    lstrcat(pBuf, " ");   // append space character for successful wrapping
 
-    iStart += wcslen(sz); // shift new start position
+    iStart += lstrlen(sz);// shift new start position
     sz[iIndex] = ch;      // restore zeroed element
     iLines++;             // count lines
   }
 
-  SetDlgItemTextW(hWnd, iID, pBuf);
+  SetDlgItemText(hWnd, iID, pBuf);
 
   delete [] pBuf;
 }
--- a/modules/plugin/samples/default/windows/utils.h
+++ b/modules/plugin/samples/default/windows/utils.h
@@ -35,11 +35,11 @@
  *
  * ***** END LICENSE BLOCK ***** */
 
 #ifndef __UTILS_H__
 #define __UTILS_H__
 
 HKEY openRegistry();
 BOOL IsNewMimeType(LPSTR szMimeType);
-void SetDlgItemTextWrapped(HWND hWnd, int iID, wchar_t* szText);
+void SetDlgItemTextWrapped(HWND hWnd, int iID, LPSTR szText);
 
 #endif // __UTILS_H__
--- a/modules/plugin/tools/sdk/samples/basic/windows/plugin.cpp
+++ b/modules/plugin/tools/sdk/samples/basic/windows/plugin.cpp
@@ -141,21 +141,21 @@ static LRESULT CALLBACK PluginWinProc(HW
         RECT rc;
         GetClientRect(hWnd, &rc);
         FrameRect(hdc, &rc, GetStockBrush(BLACK_BRUSH));
 
         // get our plugin instance object and ask it for the version string
         nsPluginInstance *plugin = (nsPluginInstance *)GetWindowLong(hWnd, GWL_USERDATA);
         if (plugin) {
           const char * string = plugin->getVersion();
-          DrawTextA(hdc, string, strlen(string), &rc, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
+          DrawText(hdc, string, strlen(string), &rc, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
         }
         else {
           char string[] = "Error occured";
-          DrawTextA(hdc, string, strlen(string), &rc, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
+          DrawText(hdc, string, strlen(string), &rc, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
         }
 
         EndPaint(hWnd, &ps);
       }
       break;
     default:
       break;
   }
--- a/modules/plugin/tools/sdk/samples/scriptable/windows/plugin.cpp
+++ b/modules/plugin/tools/sdk/samples/scriptable/windows/plugin.cpp
@@ -215,20 +215,20 @@ static LRESULT CALLBACK PluginWinProc(HW
         HDC hdc = BeginPaint(hWnd, &ps);
         RECT rc;
         GetClientRect(hWnd, &rc);
         FrameRect(hdc, &rc, GetStockBrush(BLACK_BRUSH));
 
         // get our plugin instance object and ask it for the version string
         nsPluginInstance *plugin = (nsPluginInstance *)GetWindowLong(hWnd, GWL_USERDATA);
         if (plugin)
-          DrawTextA(hdc, plugin->mString, strlen(plugin->mString), &rc, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
+          DrawText(hdc, plugin->mString, strlen(plugin->mString), &rc, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
         else {
           char string[] = "Error occured";
-          DrawTextA(hdc, string, strlen(string), &rc, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
+          DrawText(hdc, string, strlen(string), &rc, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
         }
 
         EndPaint(hWnd, &ps);
       }
       break;
     default:
       break;
   }
--- a/rdf/datasource/src/nsFileSystemDataSource.cpp
+++ b/rdf/datasource/src/nsFileSystemDataSource.cpp
@@ -923,25 +923,24 @@ FileSystemDataSource::GetVolumeList(nsIS
 
         volumes->AppendElement(vol);
     }
 #endif
 
 #if defined (XP_WIN) && !defined (WINCE)
 
     PRInt32         driveType;
-    PRUnichar       drive[32];
+    char            drive[32];
     PRInt32         volNum;
     char            *url;
 
     for (volNum = 0; volNum < 26; volNum++)
     {
-        swprintf( drive, L"%c:\\", volNum + (PRUnichar)'A');
-
-        driveType = GetDriveTypeW(drive);
+        sprintf(drive, "%c:\\", volNum + 'A');
+        driveType = GetDriveType(drive);
         if (driveType != DRIVE_UNKNOWN && driveType != DRIVE_NO_ROOT_DIR)
         {
             if (nsnull != (url = PR_smprintf("file:///%c|/", volNum + 'A')))
             {
                 rv = mRDFService->GetResource(nsDependentCString(url),
                                               getter_AddRefs(vol));
                 PR_Free(url);
 
--- a/toolkit/components/startup/src/nsUserInfoWin.cpp
+++ b/toolkit/components/startup/src/nsUserInfoWin.cpp
@@ -53,23 +53,24 @@ nsUserInfo::~nsUserInfo()
 
 NS_IMPL_ISUPPORTS1(nsUserInfo,nsIUserInfo)
 
 NS_IMETHODIMP
 nsUserInfo::GetUsername(char **aUsername)
 {
     *aUsername = nsnull;
 
-    PRUnichar username[256];
+    TCHAR username[256];
     DWORD size = 256;
 
-    if (!GetUserNameW(username, &size))
+    if (!GetUserName(username, &size))
         return NS_ERROR_FAILURE;
-
-    *aUsername = ToNewUTF8String(nsDependentString(username));
+    
+    *aUsername = nsCRT::strdup(username);
+    
     if (*aUsername) return NS_OK;
 
     return NS_ERROR_FAILURE;
 }
 
 NS_IMETHODIMP 
 nsUserInfo::GetFullname(PRUnichar **aFullname)
 {
--- a/uriloader/exthandler/win/nsMIMEInfoWin.cpp
+++ b/uriloader/exthandler/win/nsMIMEInfoWin.cpp
@@ -261,48 +261,46 @@ nsMIMEInfoWin::LoadUriInternal(nsIURI * 
     const PRUint32 maxSafeURL(2048);
     if (urlSpec.Length() > maxSafeURL)
       return NS_ERROR_FAILURE;
 
     LPITEMIDLIST pidl;
     SFGAOF sfgao;
     
     // Bug 394974
-    HMODULE hDll = ::LoadLibraryW(L"shell32.dll");
+    HMODULE hDll = ::LoadLibrary("shell32.dll");
     MySHParseDisplayName pMySHParseDisplayName = NULL;
     // Version 6.0 and higher
     if (pMySHParseDisplayName = 
           (MySHParseDisplayName)::GetProcAddress(hDll,
                                                  "SHParseDisplayName")) {
       if (SUCCEEDED(pMySHParseDisplayName(NS_ConvertUTF8toUTF16(urlSpec).get(),
                                           NULL, &pidl, 0, &sfgao))) {
-        static const PRUnichar cmdVerb[] = L"open";
-        SHELLEXECUTEINFOW sinfo;
+        static const char cmdVerb[] = "open";
+        SHELLEXECUTEINFO sinfo;
         memset(&sinfo, 0, sizeof(SHELLEXECUTEINFO));
         sinfo.cbSize   = sizeof(SHELLEXECUTEINFO);
         sinfo.fMask    = SEE_MASK_FLAG_DDEWAIT |
                          SEE_MASK_FLAG_NO_UI |
                          SEE_MASK_INVOKEIDLIST;
         sinfo.hwnd     = NULL;
-        sinfo.lpVerb   = (LPWSTR)&cmdVerb;
+        sinfo.lpVerb   = (LPCSTR)&cmdVerb;
         sinfo.nShow    = SW_SHOWNORMAL;
         sinfo.lpIDList = pidl;
         
-        BOOL result = ShellExecuteExW(&sinfo);
+        BOOL result = ShellExecuteEx(&sinfo);
 
         CoTaskMemFree(pidl);
 
         if (!result || ((int)sinfo.hInstApp) < 32)
           rv = NS_ERROR_FAILURE;
       }
     } else {
       // Version of shell32.dll < 6.0
-      LONG r = (LONG) ::ShellExecuteW(NULL, L"open", 
-                                     NS_ConvertUTF8toUTF16(urlSpec).get(),
-                                     NULL, NULL, 
+      LONG r = (LONG) ::ShellExecute(NULL, "open", urlSpec.get(), NULL, NULL, 
                                      SW_SHOWNORMAL);
       if (r < 32) 
         rv = NS_ERROR_FAILURE;
     }
     if (hDll) 
       ::FreeLibrary(hDll);
   }
 
--- a/uriloader/exthandler/win/nsOSHelperAppService.cpp
+++ b/uriloader/exthandler/win/nsOSHelperAppService.cpp
@@ -140,21 +140,21 @@ static nsresult GetExtensionFrom4xRegist
 
 nsresult nsOSHelperAppService::OSProtocolHandlerExists(const char * aProtocolScheme, PRBool * aHandlerExists)
 {
   // look up the protocol scheme in the windows registry....if we find a match then we have a handler for it...
   *aHandlerExists = PR_FALSE;
   if (aProtocolScheme && *aProtocolScheme)
   {
      HKEY hKey;
-     LONG err = ::RegOpenKeyExA(HKEY_CLASSES_ROOT, aProtocolScheme, 0,
+     LONG err = ::RegOpenKeyEx(HKEY_CLASSES_ROOT, aProtocolScheme, 0,
                                KEY_QUERY_VALUE, &hKey);
      if (err == ERROR_SUCCESS)
      {
-       err = ::RegQueryValueExW(hKey, L"URL Protocol", NULL, NULL, NULL, NULL);
+       err = ::RegQueryValueEx(hKey, "URL Protocol", NULL, NULL, NULL, NULL);
        *aHandlerExists = (err == ERROR_SUCCESS);
        // close the key
        ::RegCloseKey(hKey);
      }
   }
 
   return NS_OK;
 }
--- a/widget/src/windows/nsAppShell.cpp
+++ b/widget/src/windows/nsAppShell.cpp
@@ -88,37 +88,37 @@ nsAppShell::~nsAppShell()
     SendMessage(mEventWnd, WM_CLOSE, 0, 0);
   }
 }
 
 nsresult
 nsAppShell::Init()
 {
   if (!sMsgId)
-    sMsgId = RegisterWindowMessageW(L"nsAppShell:EventID");
+    sMsgId = RegisterWindowMessage("nsAppShell:EventID");
 
-  WNDCLASSW wc;
+  WNDCLASS wc;
   HINSTANCE module = GetModuleHandle(NULL);
 
-  const PRUnichar *const kWindowClass = L"nsAppShell:EventWindowClass";
-  if (!GetClassInfoW(module, kWindowClass, &wc)) {
+  const char *const kWindowClass = "nsAppShell:EventWindowClass";
+  if (!GetClassInfo(module, kWindowClass, &wc)) {
     wc.style         = 0;
     wc.lpfnWndProc   = EventWindowProc;
     wc.cbClsExtra    = 0;
     wc.cbWndExtra    = 0;
     wc.hInstance     = module;
     wc.hIcon         = NULL;
     wc.hCursor       = NULL;
     wc.hbrBackground = (HBRUSH) NULL;
-    wc.lpszMenuName  = (LPCWSTR) NULL;
+    wc.lpszMenuName  = (LPCSTR) NULL;
     wc.lpszClassName = kWindowClass;
-    RegisterClassW(&wc);
+    RegisterClass(&wc);
   }
 
-  mEventWnd = CreateWindowW(kWindowClass, L"nsAppShell:EventWindow",
+  mEventWnd = CreateWindow(kWindowClass, "nsAppShell:EventWindow",
                            0, 0, 0, 10, 10, NULL, NULL, module, NULL);
   NS_ENSURE_STATE(mEventWnd);
 
   return nsBaseAppShell::Init();
 }
 
 void
 nsAppShell::ScheduleNativeEventCallback()
--- a/widget/src/windows/nsBidiKeyboard.cpp
+++ b/widget/src/windows/nsBidiKeyboard.cpp
@@ -35,17 +35,16 @@
  * the provisions above, a recipient may use your version of this file under
  * the terms of any one of the MPL, the GPL or the LGPL.
  *
  * ***** END LICENSE BLOCK ***** */
 
 #include <stdio.h>
 #include "nsBidiKeyboard.h"
 #include "prmem.h"
-#include <tchar.h>
 
 NS_IMPL_ISUPPORTS1(nsBidiKeyboard, nsIBidiKeyboard)
 
 nsBidiKeyboard::nsBidiKeyboard() : nsIBidiKeyboard()
 {
   mInitialized = PR_FALSE;
   mHaveBidiKeyboards = PR_FALSE;
   mLTRKeyboard[0] = '\0';
@@ -59,18 +58,18 @@ nsBidiKeyboard::~nsBidiKeyboard()
 
 NS_IMETHODIMP nsBidiKeyboard::SetLangFromBidiLevel(PRUint8 aLevel)
 {
   nsresult result = SetupBidiKeyboards();
   if (NS_FAILED(result))
     return result;
 
   // call LoadKeyboardLayout() only if the target keyboard layout is different from the current
-  PRUnichar currentLocaleName[KL_NAMELENGTH];
-  wcsncpy(currentLocaleName, (aLevel & 1) ? mRTLKeyboard : mLTRKeyboard, KL_NAMELENGTH);
+  char currentLocaleName[KL_NAMELENGTH];
+  strncpy(currentLocaleName, (aLevel & 1) ? mRTLKeyboard : mLTRKeyboard, KL_NAMELENGTH);
   currentLocaleName[KL_NAMELENGTH-1] = '\0'; // null terminate
 
   NS_ASSERTION(*currentLocaleName, 
     "currentLocaleName has string length == 0");
 
 #if 0
   /* This implementation of automatic keyboard layout switching is too buggy to be useful
      and the feature itself is inconsistent with Windows. See Bug 162242 */
@@ -92,53 +91,53 @@ NS_IMETHODIMP nsBidiKeyboard::IsLangRTL(
   if (NS_FAILED(result))
     return result;
 
   HKL  currentLocale;
  
   currentLocale = ::GetKeyboardLayout(0);
   *aIsRTL = IsRTLLanguage(currentLocale);
   
-  if (!::GetKeyboardLayoutNameW(mCurrentLocaleName))
+  if (!::GetKeyboardLayoutName(mCurrentLocaleName))
     return NS_ERROR_FAILURE;
 
   NS_ASSERTION(*mCurrentLocaleName, 
     "GetKeyboardLayoutName return string length == 0");
-  NS_ASSERTION((wcslen(mCurrentLocaleName) < KL_NAMELENGTH), 
+  NS_ASSERTION((strlen(mCurrentLocaleName) < KL_NAMELENGTH), 
     "GetKeyboardLayoutName return string length >= KL_NAMELENGTH");
 
   // The language set by the user overrides the default language for that direction
   if (*aIsRTL) {
-    wcsncpy(mRTLKeyboard, mCurrentLocaleName, KL_NAMELENGTH);
+    strncpy(mRTLKeyboard, mCurrentLocaleName, KL_NAMELENGTH);
     mRTLKeyboard[KL_NAMELENGTH-1] = '\0'; // null terminate
   } else {
-    wcsncpy(mLTRKeyboard, mCurrentLocaleName, KL_NAMELENGTH);
+    strncpy(mLTRKeyboard, mCurrentLocaleName, KL_NAMELENGTH);
     mLTRKeyboard[KL_NAMELENGTH-1] = '\0'; // null terminate
   }
 
-  NS_ASSERTION((wcslen(mRTLKeyboard) < KL_NAMELENGTH), 
+  NS_ASSERTION((strlen(mRTLKeyboard) < KL_NAMELENGTH), 
     "mLTRKeyboard has string length >= KL_NAMELENGTH");
-  NS_ASSERTION((wcslen(mLTRKeyboard) < KL_NAMELENGTH), 
+  NS_ASSERTION((strlen(mLTRKeyboard) < KL_NAMELENGTH), 
     "mRTLKeyboard has string length >= KL_NAMELENGTH");
   return NS_OK;
 }
 
 
 // Get the list of keyboard layouts available in the system
 // Set mLTRKeyboard to the first LTR keyboard in the list and mRTLKeyboard to the first RTL keyboard in the list
 // These defaults will be used unless the user explicitly sets something else.
 nsresult nsBidiKeyboard::SetupBidiKeyboards()
 {
   if (mInitialized)
     return mHaveBidiKeyboards ? NS_OK : NS_ERROR_FAILURE;
 
   int keyboards;
   HKL far* buf;
   HKL locale;
-  PRUnichar localeName[KL_NAMELENGTH];
+  char localeName[KL_NAMELENGTH];
   PRBool isLTRKeyboardSet = PR_FALSE;
   PRBool isRTLKeyboardSet = PR_FALSE;
   
   // GetKeyboardLayoutList with 0 as first parameter returns the number of keyboard layouts available
   keyboards = ::GetKeyboardLayoutList(0, nsnull);
   if (!keyboards)
     return NS_ERROR_FAILURE;
 
@@ -152,21 +151,21 @@ nsresult nsBidiKeyboard::SetupBidiKeyboa
     PR_Free(buf);
     return NS_ERROR_UNEXPECTED;
   }
 
   // Go through the list and pick a default LTR and RTL keyboard layout
   while (keyboards--) {
     locale = buf[keyboards];
     if (IsRTLLanguage(locale)) {
-      swprintf(mRTLKeyboard, L"%.*x", KL_NAMELENGTH - 1, LANGIDFROMLCID(locale));
+      sprintf(mRTLKeyboard, "%.*x", KL_NAMELENGTH - 1, LANGIDFROMLCID(locale));
       isRTLKeyboardSet = PR_TRUE;
     }
     else {
-      swprintf( mLTRKeyboard, L"%.*x", KL_NAMELENGTH - 1, LANGIDFROMLCID(locale));
+      sprintf(mLTRKeyboard, "%.*x", KL_NAMELENGTH - 1, LANGIDFROMLCID(locale));
       isLTRKeyboardSet = PR_TRUE;
     }
   }
   PR_Free(buf);
   mInitialized = PR_TRUE;
 
   // If there is not at least one keyboard of each directionality, Bidi
   // keyboard functionality will be disabled.
@@ -174,30 +173,30 @@ nsresult nsBidiKeyboard::SetupBidiKeyboa
   if (!mHaveBidiKeyboards)
     return NS_ERROR_FAILURE;
 
   // Get the current keyboard layout and use it for either mRTLKeyboard or
   // mLTRKeyboard as appropriate. If the user has many keyboard layouts
   // installed this prevents us from arbitrarily resetting the current
   // layout (bug 80274)
   locale = ::GetKeyboardLayout(0);
-  if (!::GetKeyboardLayoutNameW(localeName))
+  if (!::GetKeyboardLayoutName(localeName))
     return NS_ERROR_FAILURE;
 
   NS_ASSERTION(*localeName, 
     "GetKeyboardLayoutName return string length == 0");
-  NS_ASSERTION((wcslen(localeName) < KL_NAMELENGTH), 
+  NS_ASSERTION((strlen(localeName) < KL_NAMELENGTH), 
     "GetKeyboardLayout return string length >= KL_NAMELENGTH");
 
   if (IsRTLLanguage(locale)) {
-      swprintf(mRTLKeyboard, localeName, KL_NAMELENGTH);
+    strncpy(mRTLKeyboard, localeName, KL_NAMELENGTH);
     mRTLKeyboard[KL_NAMELENGTH-1] = '\0'; // null terminate
   }
   else {
-      swprintf( mLTRKeyboard, localeName, KL_NAMELENGTH);
+    strncpy(mLTRKeyboard, localeName, KL_NAMELENGTH);
     mLTRKeyboard[KL_NAMELENGTH-1] = '\0'; // null terminate
   }
 
   NS_ASSERTION(*mRTLKeyboard, 
     "mLTRKeyboard has string length == 0");
   NS_ASSERTION(*mLTRKeyboard, 
     "mLTRKeyboard has string length == 0");
 
--- a/widget/src/windows/nsBidiKeyboard.h
+++ b/widget/src/windows/nsBidiKeyboard.h
@@ -53,15 +53,15 @@ public:
 
 protected:
 
   nsresult SetupBidiKeyboards();
   PRBool IsRTLLanguage(HKL aLocale);
 
   PRPackedBool mInitialized;
   PRPackedBool mHaveBidiKeyboards;
-  PRUnichar  mLTRKeyboard[KL_NAMELENGTH];
-  PRUnichar  mRTLKeyboard[KL_NAMELENGTH];
-  PRUnichar  mCurrentLocaleName[KL_NAMELENGTH];
+  char mLTRKeyboard[KL_NAMELENGTH];
+  char mRTLKeyboard[KL_NAMELENGTH];
+  char mCurrentLocaleName[KL_NAMELENGTH];
 };
 
 
 #endif // __nsBidiKeyboard
--- a/widget/src/windows/nsClipboard.cpp
+++ b/widget/src/windows/nsClipboard.cpp
@@ -65,17 +65,17 @@
 #include "nsWidgetsCID.h"
 #include "nsCRT.h"
 #include "nsNetUtil.h"
 
 #include "nsIImage.h"
 
 
 // oddly, this isn't in the MSVC headers anywhere.
-UINT nsClipboard::CF_HTML = ::RegisterClipboardFormatW(L"HTML Format");
+UINT nsClipboard::CF_HTML = ::RegisterClipboardFormat("HTML Format");
 
 
 //-------------------------------------------------------------------------
 //
 // nsClipboard constructor
 //
 //-------------------------------------------------------------------------
 nsClipboard::nsClipboard() : nsBaseClipboard()
@@ -106,19 +106,17 @@ UINT nsClipboard::GetFormat(const char* 
     format = CF_DIB;
   else if (strcmp(aMimeStr, kFileMime) == 0 || 
            strcmp(aMimeStr, kFilePromiseMime) == 0)
     format = CF_HDROP;
 #endif
   else if (strcmp(aMimeStr, kNativeHTMLMime) == 0)
     format = CF_HTML;
   else
-    format = ::RegisterClipboardFormatW(NS_ConvertASCIItoUTF16(aMimeStr).get());
-
-
+    format = ::RegisterClipboardFormat(aMimeStr);
 
   return format;
 }
 
 //-------------------------------------------------------------------------
 nsresult nsClipboard::CreateNativeDataObject(nsITransferable * aTransferable, IDataObject ** aDataObj, nsIURI * uri)
 {
   if (nsnull == aTransferable) {
@@ -313,17 +311,17 @@ nsresult nsClipboard::GetGlobalData(HGLO
         GetLastError(),
         MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
         (LPTSTR) &lpMsgBuf,
         0,
         NULL 
     );
 
     // Display the string.
-    MessageBoxW( NULL, (LPCWSTR)lpMsgBuf, L"GetLastError", MB_OK|MB_ICONINFORMATION );
+    MessageBox( NULL, (const char *)lpMsgBuf, "GetLastError", MB_OK|MB_ICONINFORMATION );
 
     // Free the buffer.
     LocalFree( lpMsgBuf );    
   }
 
   return result;
 }
 
--- a/widget/src/windows/nsDataObj.h
+++ b/widget/src/windows/nsDataObj.h
@@ -77,31 +77,31 @@ IAsyncOperation : public IUnknown
 #endif // __IAsyncOperation_INTERFACE_DEFINED__
 
 /* 
  * CFSTR_SHELLURL is deprecated and doesn't have a Unicode version.
  * Therefore we are using CFSTR_INETURL instead of CFSTR_SHELLURL.
  * See http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/programmersguide/shell_basics/shell_basics_programming/transferring/clipboard.asp
  */
 #ifndef CFSTR_INETURLA
-#define CFSTR_INETURLA    L"UniformResourceLocator"
+#define CFSTR_INETURLA    "UniformResourceLocator"
 #endif
 #ifndef CFSTR_INETURLW
-#define CFSTR_INETURLW    L"UniformResourceLocatorW"
+#define CFSTR_INETURLW    "UniformResourceLocatorW"
 #endif
 
 // For support of MinGW w32api v2.4. 
 // When the next version of w32api is released with shlobj.h rev 1.35 
 // http://sources.redhat.com/cgi-bin/cvsweb.cgi/src/winsup/w32api/include/shlobj.h?cvsroot=src
 // then that can be made the base required version and this code should be removed.
 #ifndef CFSTR_FILEDESCRIPTORA
-# define CFSTR_FILEDESCRIPTORA   L"FileGroupDescriptor"
+# define CFSTR_FILEDESCRIPTORA   "FileGroupDescriptor"
 #endif
 #ifndef CFSTR_FILEDESCRIPTORW
-# define CFSTR_FILEDESCRIPTORW   L"FileGroupDescriptorW"
+# define CFSTR_FILEDESCRIPTORW   "FileGroupDescriptorW"
 #endif
 
 #ifdef __MINGW32__
 # include <w32api.h>
 # if __W32API_MAJOR_VERSION < 3 || (__W32API_MAJOR_VERSION == 3 && __W32API_MINOR_VERSION == 0)
 #  ifndef FILEGROUPDESCRIPTORA
 #   define FILEGROUPDESCRIPTORA    FILEGROUPDESCRIPTOR
 #  endif
--- a/widget/src/windows/nsFilePicker.cpp
+++ b/widget/src/windows/nsFilePicker.cpp
@@ -275,20 +275,20 @@ NS_IMETHODIMP nsFilePicker::ShowW(PRInt1
         }
       }
       else {
         NS_ASSERTION(0, "unsupported mode"); 
       }
 #ifndef WINCE
     }
     catch(...) {
-      MessageBoxW(ofn.hwndOwner,
-                  0,
-                  L"The filepicker was unexpectedly closed by Windows.",
-                  MB_ICONERROR);
+      MessageBox(ofn.hwndOwner,
+                 0,
+                 "The filepicker was unexpectedly closed by Windows.",
+                 MB_ICONERROR);
       result = PR_FALSE;
     }
 #endif
   
     if (result == PR_TRUE) {
       // Remember what filter type the user selected
       mSelectedType = (PRInt16)ofn.nFilterIndex;
 
--- a/widget/src/windows/nsLookAndFeel.cpp
+++ b/widget/src/windows/nsLookAndFeel.cpp
@@ -51,17 +51,17 @@ typedef HRESULT (WINAPI*GetThemeColorPtr
                                           int iStateId, int iPropId, OUT COLORREF* pFont);
 typedef BOOL (WINAPI*IsAppThemedPtr)(VOID);
 
 static OpenThemeDataPtr openTheme = NULL;
 static CloseThemeDataPtr closeTheme = NULL;
 static GetThemeColorPtr getThemeColor = NULL;
 static IsAppThemedPtr isAppThemed = NULL;
 
-static const PRUnichar kThemeLibraryName[] = L"uxtheme.dll";
+static const char kThemeLibraryName[] = "uxtheme.dll";
 static HINSTANCE gThemeDLLInst = NULL;
 static HANDLE gMenuTheme = NULL;
 
 #define MENU_POPUPITEM 14
 
 #define MPI_NORMAL 1
 #define MPI_HOT 2
 #define MPI_DISABLED 3
@@ -100,23 +100,23 @@ static PRInt32 GetSystemParam(long flag,
     DWORD value; 
     return ::SystemParametersInfo(flag, 0, &value, 0) ? value : def;
 #endif
 }
 
 nsLookAndFeel::nsLookAndFeel() : nsXPLookAndFeel()
 {
 #ifndef WINCE
-  gShell32DLLInst = LoadLibraryW(L"Shell32.dll");
+  gShell32DLLInst = LoadLibrary("Shell32.dll");
   if (gShell32DLLInst)
   {
       gSHAppBarMessage = (SHAppBarMessagePtr) GetProcAddress(gShell32DLLInst,
                                                              "SHAppBarMessage");
   }
-  gThemeDLLInst = LoadLibraryW(kThemeLibraryName);
+  gThemeDLLInst = LoadLibrary(kThemeLibraryName);
   if(gThemeDLLInst)
   {
     openTheme = (OpenThemeDataPtr)GetProcAddress(gThemeDLLInst, "OpenThemeData");
     closeTheme = (CloseThemeDataPtr)GetProcAddress(gThemeDLLInst, "CloseThemeData");
     getThemeColor = (GetThemeColorPtr)GetProcAddress(gThemeDLLInst, "GetThemeColor");
     isAppThemed = (IsAppThemedPtr)GetProcAddress(gThemeDLLInst, "IsAppThemed");
     gMenuTheme = openTheme(NULL, L"Menu");
   }
@@ -499,17 +499,17 @@ NS_IMETHODIMP nsLookAndFeel::GetMetric(c
         aMetric = 3;
         break;
 #ifndef WINCE
     case eMetric_AlertNotificationOrigin:
         aMetric = 0;
         if (gSHAppBarMessage)
         {
           // Get task bar window handle
-          HWND shellWindow = FindWindowW(L"Shell_TrayWnd", NULL);
+          HWND shellWindow = FindWindow("Shell_TrayWnd", NULL);
 
           if (shellWindow != NULL)
           {
             // Determine position
             APPBARDATA appBarData;
             appBarData.hWnd = shellWindow;
             appBarData.cbSize = sizeof(appBarData);
             if (gSHAppBarMessage(ABM_GETTASKBARPOS, &appBarData))
--- a/widget/src/windows/nsNativeThemeWin.cpp
+++ b/widget/src/windows/nsNativeThemeWin.cpp
@@ -274,17 +274,17 @@ static CloseThemeDataPtr closeTheme = NU
 static DrawThemeBackgroundPtr drawThemeBG = NULL;
 static DrawThemeEdgePtr drawThemeEdge = NULL;
 static GetThemeContentRectPtr getThemeContentRect = NULL;
 static GetThemePartSizePtr getThemePartSize = NULL;
 static GetThemeSysFontPtr getThemeSysFont = NULL;
 static GetThemeColorPtr getThemeColor = NULL;
 static GetThemeMarginsPtr getThemeMargins = NULL;
 
-static const PRUnichar kThemeLibraryName[] = L"uxtheme.dll";
+static const char kThemeLibraryName[] = "uxtheme.dll";
 
 static inline bool IsCheckboxWidgetType(PRUint8 aWidgetType)
 {
   return (aWidgetType == NS_THEME_CHECKBOX || aWidgetType == NS_THEME_CHECKBOX_SMALL);
 }
 
 static inline bool IsRadioWidgetType(PRUint8 aWidgetType)
 {
@@ -313,17 +313,17 @@ nsNativeThemeWin::nsNativeThemeWin() {
   mScaleTheme = NULL;
   mStatusbarTheme = NULL;
   mTabTheme = NULL;
   mTreeViewTheme = NULL;
   mComboBoxTheme = NULL;
   mHeaderTheme = NULL;
   mMenuTheme = NULL;
 
-  mThemeDLL = ::LoadLibraryW(kThemeLibraryName);
+  mThemeDLL = ::LoadLibrary(kThemeLibraryName);
   if (mThemeDLL) {
     openTheme = (OpenThemeDataPtr)GetProcAddress(mThemeDLL, "OpenThemeData");
     closeTheme = (CloseThemeDataPtr)GetProcAddress(mThemeDLL, "CloseThemeData");
     drawThemeBG = (DrawThemeBackgroundPtr)GetProcAddress(mThemeDLL, "DrawThemeBackground");
     drawThemeEdge = (DrawThemeEdgePtr)GetProcAddress(mThemeDLL, "DrawThemeEdge");
     getThemeContentRect = (GetThemeContentRectPtr)GetProcAddress(mThemeDLL, "GetThemeBackgroundContentRect");
     getThemePartSize = (GetThemePartSizePtr)GetProcAddress(mThemeDLL, "GetThemePartSize");
     getThemeSysFont = (GetThemeSysFontPtr)GetProcAddress(mThemeDLL, "GetThemeSysFont");
--- a/widget/src/windows/nsSound.cpp
+++ b/widget/src/windows/nsSound.cpp
@@ -35,17 +35,17 @@
  * the provisions above, a recipient may use your version of this file under
  * the terms of any one of the MPL, the GPL or the LGPL.
  *
  * ***** END LICENSE BLOCK ***** */
 
 #include "nscore.h"
 #include "plstr.h"
 #include <stdio.h>
-#include "nsString.h"
+
 #include <windows.h>
 
 // mmsystem.h is needed to build with WIN32_LEAN_AND_MEAN
 #include <mmsystem.h>
 
 #include "nsSound.h"
 #include "nsIURL.h"
 #include "nsNetUtil.h"
@@ -120,17 +120,17 @@ NS_IMETHODIMP nsSound::OnStreamComplete(
     // We try to make a copy so we can play it async.
     mLastSound = (PRUint8 *) malloc(dataLen);
     if (mLastSound) {
       memcpy(mLastSound, data, dataLen);
       data = mLastSound;
       flags |= SND_ASYNC;
     }
 
-    ::PlaySoundA(reinterpret_cast<const char*>(data), 0, flags);
+    ::PlaySound(reinterpret_cast<const char*>(data), 0, flags);
   }
 
   return NS_OK;
 }
 
 NS_IMETHODIMP nsSound::Play(nsIURL *aURL)
 {
   nsresult rv;
@@ -161,17 +161,19 @@ NS_IMETHODIMP nsSound::Init()
 }
 
 
 NS_IMETHODIMP nsSound::PlaySystemSound(const nsAString &aSoundAlias)
 {
   PurgeLastSound();
 
   if (aSoundAlias.EqualsLiteral("_moz_mailbeep")) {
-    ::PlaySoundW(L"MailBeep", nsnull, SND_ALIAS | SND_ASYNC);
+    ::PlaySound("MailBeep", nsnull, SND_ALIAS | SND_ASYNC);
   }
   else {
-    ::PlaySoundW(PromiseFlatString(aSoundAlias).get(), nsnull, SND_ALIAS | SND_ASYNC);
+    nsCAutoString nativeSoundAlias;
+    NS_CopyUnicodeToNative(aSoundAlias, nativeSoundAlias);
+    ::PlaySound(nativeSoundAlias.get(), nsnull, SND_ALIAS | SND_ASYNC);
   }
 
   return NS_OK;
 }
 
--- a/widget/src/windows/nsToolkit.cpp
+++ b/widget/src/windows/nsToolkit.cpp
@@ -259,17 +259,17 @@ nsToolkit::Startup(HMODULE hModule)
     wc.lpszMenuName     = NULL;
     wc.lpszClassName    = L"nsToolkitClass";
     VERIFY(::RegisterClassW(&wc));
 
     // Vista API.  Mozilla is DPI Aware.
     typedef BOOL (*SetProcessDPIAwareFunc)(VOID);
 
     SetProcessDPIAwareFunc setDPIAware = (SetProcessDPIAwareFunc)
-      GetProcAddress(LoadLibraryW(L"user32.dll"),
+      GetProcAddress(LoadLibrary("user32.dll"),
                      "SetProcessDPIAware");
 
     if (setDPIAware)
       setDPIAware();
 }
 
 
 void
@@ -290,18 +290,18 @@ void nsToolkit::CreateInternalWindow(PRT
     
     NS_PRECONDITION(aThread, "null thread");
     mGuiThread  = aThread;
 
     //
     // create the internal window
     //
 
-    mDispatchWnd = ::CreateWindowW(L"nsToolkitClass",
-                                   L"NetscapeDispatchWnd",
+    mDispatchWnd = ::CreateWindow("nsToolkitClass",
+                                  "NetscapeDispatchWnd",
                                   WS_DISABLED,
                                   -50, -50,
                                   10, 10,
                                   NULL,
                                   NULL,
                                   nsToolkit::mDllInstance,
                                   NULL);
 
--- a/widget/src/windows/nsWindow.cpp
+++ b/widget/src/windows/nsWindow.cpp
@@ -145,17 +145,17 @@
 #include "nsCRT.h"
 #include "nsAppDirectoryServiceDefs.h"
 #include "nsXPIDLString.h"
 #include "nsIFile.h"
 
 #include "prprf.h"
 #include "prmem.h"
 
-static const PRUnichar kMozHeapDumpMessageString[] = L"MOZ_HeapDump";
+static const char kMozHeapDumpMessageString[] = "MOZ_HeapDump";
 
 #define kWindowPositionSlop 20
 
 #ifndef SPI_GETWHEELSCROLLLINES
 #define SPI_GETWHEELSCROLLLINES 104
 #endif
 
 #ifndef WM_MOUSEHWHEEL
@@ -694,17 +694,17 @@ nsWindow::nsWindow() : nsBaseWidget()
     gbInitGlobalValue = TRUE;
     gKeyboardLayout = GetKeyboardLayout(0);
 
     // mouse message of MSIME98/2000
     nsWindow::uWM_MSIME_MOUSE     = ::RegisterWindowMessage(RWM_MOUSE);
 
     // Heap dump
 #ifndef WINCE
-    nsWindow::uWM_HEAP_DUMP = ::RegisterWindowMessageW(kMozHeapDumpMessageString);
+    nsWindow::uWM_HEAP_DUMP = ::RegisterWindowMessage(kMozHeapDumpMessageString);
 #endif
   }
 
   mNativeDragTarget = nsnull;
   mIsTopWidgetWindow = PR_FALSE;
   mLastKeyboardLayout = 0;
 
 #ifndef WINCE
@@ -1114,36 +1114,36 @@ nsWindow::EventIsInsideWindow(UINT Msg, 
   POINT mp;
   mp.x = GET_X_LPARAM(pos);
   mp.y = GET_Y_LPARAM(pos);
 
   // was the event inside this window?
   return (PRBool) PtInRect(&r, mp);
 }
 
-static PRUnichar sPropName[40] = L"";
-static PRUnichar* GetNSWindowPropName() {
+static char sPropName[40] = "";
+static char* GetNSWindowPropName() {
   if (!*sPropName)
   {
-    _snwprintf(sPropName, 39, L"MozillansIWidgetPtr%p", _getpid());
+    _snprintf(sPropName, 39, "MozillansIWidgetPtr%p", _getpid());
     sPropName[39] = '\0';
   }
   return sPropName;
 }
 
 nsWindow * nsWindow::GetNSWindowPtr(HWND aWnd) {
-  return (nsWindow *) ::GetPropW(aWnd, GetNSWindowPropName());
+  return (nsWindow *) ::GetPropA(aWnd, GetNSWindowPropName());
 }
 
 BOOL nsWindow::SetNSWindowPtr(HWND aWnd, nsWindow * ptr) {
   if (ptr == NULL) {
-    ::RemovePropW(aWnd, GetNSWindowPropName());
+    ::RemovePropA(aWnd, GetNSWindowPropName());
     return TRUE;
   } else {
-    return ::SetPropW(aWnd, GetNSWindowPropName(), (HANDLE)ptr);
+    return ::SetPropA(aWnd, GetNSWindowPropName(), (HANDLE)ptr);
   }
 }
 
 //-------------------------------------------------------------------------
 //
 // the nsWindow procedure for all nsWindows in this toolkit
 //
 //-------------------------------------------------------------------------
@@ -1783,17 +1783,17 @@ NS_IMETHODIMP nsWindow::SetSizeMode(PRIn
           // next window.
           ::SetWindowPos(mWnd, HWND_BOTTOM, 0, 0, 0, 0,
                          SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE);
           if (hwndBelow)
             ::SetForegroundWindow(hwndBelow);
 
           // Play the minimize sound while we're here, since that is also
           // forgotten when we use SW_SHOWMINIMIZED.
-          ::PlaySoundW(L"Minimize", nsnull, SND_ALIAS | SND_NODEFAULT | SND_ASYNC);
+          ::PlaySound("Minimize", nsnull, SND_ALIAS | SND_NODEFAULT | SND_ASYNC);
         }
 #endif
         break;
       default :
         mode = SW_RESTORE;
     }
     ::ShowWindow(mWnd, mode);
   }
@@ -5187,58 +5187,52 @@ LPCWSTR nsWindow::WindowPopupClassW()
       wc.style = CS_DBLCLKS;
       nsWindow::sIsPopupClassRegistered = ::RegisterClassW(&wc);
     }
   }
 
   return className;
 }
 
-LPCTSTR nsWindow::WindowClass()
+LPCSTR nsWindow::WindowClass()
 {
   // Call into the wide version to make sure things get
   // registered properly.
   LPCWSTR classNameW = WindowClassW();
 
   // XXX: The class name used here must be kept in sync with
   //      the classname used in WindowClassW();
-#ifdef UNICODE
-	return classNameW;
-#else
+
   if (classNameW == kWClassNameHidden) {
     return kClassNameHidden;
   }
   if (classNameW == kWClassNameDialog) {
     return kClassNameDialog;
   }
   if (classNameW == kWClassNameUI) {
     return kClassNameUI;
   }
   if (classNameW == kWClassNameContent) {
     return kClassNameContent;
   }
   if (classNameW == kWClassNameContentFrame) {
     return kClassNameContentFrame;
   }
   return kClassNameGeneral;
-#endif
-}
-
-LPCTSTR nsWindow::WindowPopupClass()
+}
+
+LPCSTR nsWindow::WindowPopupClass()
 {
   // Call into the wide version to make sure things get
   // registered properly.
-#ifdef UNICODE
-  return WindowPopupClassW();
-#else
+  WindowPopupClassW();
 
   // XXX: The class name used here must be kept in sync with
   //      the classname used in WindowPopupClassW();
   return "MozillaDropShadowWindowClass";
-#endif
 }
 
 //-------------------------------------------------------------------------
 //
 // return nsWindow styles
 //
 //-------------------------------------------------------------------------
 DWORD nsWindow::WindowStyle()
@@ -7719,17 +7713,17 @@ already_AddRefed<nsIAccessible> nsWindow
 
 HINSTANCE nsWindow::gmAccLib = 0;
 LPFNLRESULTFROMOBJECT nsWindow::gmLresultFromObject = 0;
 
 STDMETHODIMP_(LRESULT) nsWindow::LresultFromObject(REFIID riid, WPARAM wParam, LPUNKNOWN pAcc)
 {
   // open the dll dynamically
   if (!gmAccLib)
-    gmAccLib =::LoadLibraryW(L"OLEACC.DLL");
+    gmAccLib =::LoadLibrary("OLEACC.DLL");
 
   if (gmAccLib) {
     if (!gmLresultFromObject)
       gmLresultFromObject = (LPFNLRESULTFROMOBJECT)GetProcAddress(gmAccLib,"LresultFromObject");
 
     if (gmLresultFromObject)
       return gmLresultFromObject(riid,wParam,pAcc);
   }
--- a/widget/src/windows/nsWindow.h
+++ b/widget/src/windows/nsWindow.h
@@ -100,23 +100,16 @@ const LPCWSTR kWClassNameContentFrame = 
 const LPCWSTR kWClassNameGeneral      = L"MozillaWindowClass";
 const LPCWSTR kWClassNameDialog       = L"MozillaDialogClass";
 const LPCSTR kClassNameHidden         = "MozillaHiddenWindowClass";
 const LPCSTR kClassNameUI             = "MozillaUIWindowClass";
 const LPCSTR kClassNameContent        = "MozillaContentWindowClass";
 const LPCSTR kClassNameContentFrame   = "MozillaContentFrameWindowClass";
 const LPCSTR kClassNameGeneral        = "MozillaWindowClass";
 const LPCSTR kClassNameDialog         = "MozillaDialogClass";
-const LPCTSTR kTClassNameHidden       = TEXT("MozillaHiddenWindowClass");
-const LPCTSTR kTClassNameUI           = TEXT("MozillaUIWindowClass");
-const LPCTSTR kTClassNameContent      = TEXT("MozillaContentWindowClass");
-const LPCTSTR kTClassNameContentFrame = TEXT("MozillaContentFrameWindowClass");
-const LPCTSTR kTClassNameGeneral      = TEXT("MozillaWindowClass");
-const LPCTSTR kTClassNameDialog       = TEXT("MozillaDialogClass");
-
 
 /**
  * Native WIN32 window wrapper.
  */
 
 class nsWindow : public nsSwitchToUIThread,
                  public nsBaseWidget,
                  public nsIKBStateControl
--- a/xpcom/base/nsDebugImpl.cpp
+++ b/xpcom/base/nsDebugImpl.cpp
@@ -61,21 +61,16 @@
 
 #include "nsTraceRefcntImpl.h"
 #include "nsISupportsUtils.h"
 
 #if defined(XP_UNIX)
 #include <signal.h>
 #endif
 
-#if defined(XP_WIN)
-#include <tchar.h>
-#include "nsString.h"
-#endif
-
 static void
 Abort(const char *aMsg);
 
 static void
 Break(const char *aMsg);
 
 #if defined(XP_OS2)
 #  define INCL_WINDIALOGS  // need for WinMessageBox
@@ -97,17 +92,17 @@ Break(const char *aMsg);
 #if defined (_WIN32)
 
 typedef WINBASEAPI BOOL (WINAPI* LPFNISDEBUGGERPRESENT)();
 PRBool InDebugger()
 {
 #ifndef WINCE
    PRBool fReturn = PR_FALSE;
    LPFNISDEBUGGERPRESENT lpfnIsDebuggerPresent = NULL;
-   HINSTANCE hKernel = LoadLibraryW(L"Kernel32.dll");
+   HINSTANCE hKernel = LoadLibrary("Kernel32.dll");
 
    if(hKernel)
       {
       lpfnIsDebuggerPresent = 
          (LPFNISDEBUGGERPRESENT)GetProcAddress(hKernel, "IsDebuggerPresent");
       if(lpfnIsDebuggerPresent)
          {
          fReturn = (*lpfnIsDebuggerPresent)();
@@ -401,36 +396,34 @@ Break(const char *aMsg)
     DWORD code = IDRETRY;
 
     /* Create the debug dialog out of process to avoid the crashes caused by 
      * Windows events leaking into our event loop from an in process dialog.
      * We do this by launching windbgdlg.exe (built in xpcom/windbgdlg).
      * See http://bugzilla.mozilla.org/show_bug.cgi?id=54792
      */
     PROCESS_INFORMATION pi;
-    STARTUPINFOW si;
-    PRUnichar executable[MAX_PATH];
-    PRUnichar* pName;
+    STARTUPINFO si;
+    char executable[MAX_PATH];
+    char* pName;
 
     memset(&pi, 0, sizeof(pi));
 
     memset(&si, 0, sizeof(si));
     si.cb          = sizeof(si);
     si.wShowWindow = SW_SHOW;
 
     // 2nd arg of CreateProcess is in/out
-    PRUnichar *msgCopy = (PRUnichar*) _alloca((strlen(aMsg) + 1)*sizeof(PRUnichar));
-    wcscpy(msgCopy  , (PRUnichar*)NS_ConvertUTF8toUTF16(aMsg).get());
+    char *msgCopy = (char*) _alloca(strlen(aMsg) + 1); 
+    strcpy(msgCopy, aMsg);
 
-    if(GetModuleFileNameW(GetModuleHandleW(L"xpcom.dll"), (LPWCH)executable, MAX_PATH) &&
-       NULL != (pName = wcsrchr(executable, '\\')) &&
-       NULL != 
-       wcscpy((WCHAR*)
-       pName+1, L"windbgdlg.exe") &&
-       CreateProcessW((LPCWSTR)executable, (LPWSTR)msgCopy, NULL, NULL, PR_FALSE,
+    if(GetModuleFileName(GetModuleHandle("xpcom.dll"), executable, MAX_PATH) &&
+       NULL != (pName = strrchr(executable, '\\')) &&
+       NULL != strcpy(pName+1, "windbgdlg.exe") &&
+       CreateProcess(executable, msgCopy, NULL, NULL, PR_FALSE,
                      DETACHED_PROCESS | NORMAL_PRIORITY_CLASS,
                      NULL, NULL, &si, &pi)) {
       WaitForSingleObject(pi.hProcess, INFINITE);
       GetExitCodeProcess(pi.hProcess, &code);
       CloseHandle(pi.hProcess);
       CloseHandle(pi.hThread);
     }
 
--- a/xpcom/base/nsStackWalk.cpp
+++ b/xpcom/base/nsStackWalk.cpp
@@ -323,19 +323,19 @@ EnsureImageHlpInitialized()
     ::CloseHandle(hStackWalkThread);
 
     // Wait for the thread's event loop to start before posting events to it.
     ::WaitForSingleObject(readyEvent, INFINITE);
     ::CloseHandle(readyEvent);
 
     ::InitializeCriticalSection(&gDbgHelpCS);
 
-    HMODULE module = ::LoadLibraryW(L"DBGHELP.DLL");
+    HMODULE module = ::LoadLibrary("DBGHELP.DLL");
     if (!module) {
-        module = ::LoadLibraryW(L"IMAGEHLP.DLL");
+        module = ::LoadLibrary("IMAGEHLP.DLL");
         if (!module) return PR_FALSE;
     }
 
     _SymSetOptions = (SYMSETOPTIONSPROC) ::GetProcAddress(module, "SymSetOptions");
     if (!_SymSetOptions) return PR_FALSE;
 
     _SymInitialize = (SYMINITIALIZEPROC) ::GetProcAddress(module, "SymInitialize");
     if (!_SymInitialize) return PR_FALSE;
--- a/xpcom/io/SpecialSystemDirectory.cpp
+++ b/xpcom/io/SpecialSystemDirectory.cpp
@@ -122,17 +122,17 @@ static nsGetKnownFolderPath gGetKnownFol
 static HINSTANCE gShell32DLLInst = NULL;
 #endif
 
 NS_COM void StartupSpecialSystemDirectory()
 {
 #if defined (XP_WIN) && !defined (WINCE)
     // SHGetKnownFolderPath is only available on Windows Vista
     // so that we need to use GetProcAddress to get the pointer.
-    gShell32DLLInst = LoadLibraryW(L"Shell32.dll");
+    gShell32DLLInst = LoadLibrary("Shell32.dll");
     if(gShell32DLLInst)
     {
         gGetKnownFolderPath = (nsGetKnownFolderPath) 
             GetProcAddress(gShell32DLLInst, "SHGetKnownFolderPath");
     }
 #endif
 }
 
--- a/xpcom/io/nsLocalFileWin.cpp
+++ b/xpcom/io/nsLocalFileWin.cpp
@@ -103,18 +103,18 @@ public:
     NS_DECL_NSISIMPLEENUMERATOR
     nsresult Init();
 private:
     /* mDrives and mLetter share data
      * Init sets them.
      * HasMoreElements reads mLetter.
      * GetNext advances mLetter.
      */
-    nsString mDrives;
-    const PRUnichar *mLetter;
+    nsCString mDrives;
+    const char *mLetter;
 };
 
 //----------------------------------------------------------------------------
 // short cut resolver
 //----------------------------------------------------------------------------
 #ifndef WINCE
 class ShortcutResolver
 {
@@ -2947,17 +2947,17 @@ nsresult nsDriveEnumerator::Init()
 #else
     /* If the length passed to GetLogicalDriveStrings is smaller
      * than the length of the string it would return, it returns
      * the length required for the string. */
     DWORD length = GetLogicalDriveStrings(0, 0);
     /* The string is null terminated */
     if (!EnsureStringLength(mDrives, length+1))
         return NS_ERROR_OUT_OF_MEMORY;
-    if (!GetLogicalDriveStringsW(length, mDrives.BeginWriting()))
+    if (!GetLogicalDriveStrings(length, mDrives.BeginWriting()))
         return NS_ERROR_FAILURE;
     mLetter = mDrives.get();
     return NS_OK;
 #endif
 }
 
 NS_IMETHODIMP nsDriveEnumerator::HasMoreElements(PRBool *aHasMore)
 {
@@ -2977,19 +2977,18 @@ NS_IMETHODIMP nsDriveEnumerator::GetNext
     *aNext = file;
 #else
     /* GetLogicalDrives stored in mLetter is a concatenation
      * of null terminated strings, followed by a null terminator. */
     if (!*mLetter) {
         *aNext = nsnull;
         return NS_OK;
     }
-    nsString drive(mDrives);
+    NS_ConvertASCIItoUTF16 drive(mLetter);
     mLetter += drive.Length() + 1;
-
     nsILocalFile *file;
     nsresult rv = 
         NS_NewLocalFile(drive, PR_FALSE, &file);
 
     *aNext = file;
 #endif
     return rv;
 }
--- a/xpcom/threads/nsProcessCommon.cpp
+++ b/xpcom/threads/nsProcessCommon.cpp
@@ -101,21 +101,20 @@ nsProcess::Init(nsIFile* executable)
 #endif
         rv = mExecutable->GetNativePath(mTargetPath);
 
     return rv;
 }
 
 
 #if defined(XP_WIN)
-static int assembleCmdLine(char *const *argv, PRUnichar **cmdLine)
+static int assembleCmdLine(char *const *argv, char **cmdLine)
 {
     char *const *arg;
-    PRUnichar *p;
-    char *q;
+    char *p, *q;
     int cmdLineSize;
     int numBackslashes;
     int i;
     int argNeedQuotes;
 
     /*
      * Find out how large the command line buffer should be.
      */
@@ -127,17 +126,17 @@ static int assembleCmdLine(char *const *
          * may double.  If we quote an argument, that needs two ".
          * Finally, we need a space between arguments, and
          * a null byte at the end of command line.
          */
         cmdLineSize += 2 * strlen(*arg)  /* \ and " need to be escaped */
                 + 2                      /* we quote every argument */
                 + 1;                     /* space in between, or final null */
     }
-    p = *cmdLine = (PRUnichar *) PR_MALLOC(cmdLineSize*sizeof(PRUnichar));
+    p = *cmdLine = (char *) PR_MALLOC(cmdLineSize);
     if (p == NULL) {
         return -1;
     }
 
     for (arg = argv; *arg; arg++) {
         /* Add a space to separates the arguments */
         if (arg != argv) {
             *p++ = ' '; 
@@ -233,43 +232,43 @@ nsProcess::Run(PRBool blocking, const ch
         my_argv[i+1] = const_cast<char*>(args[i]);
     }
     // we need to set argv[0] to the program name.
     my_argv[0] = mTargetPath.BeginWriting();
     // null terminate the array
     my_argv[count+1] = NULL;
 
 #if defined(XP_WIN) && !defined (WINCE) /* wince uses nspr */
-    STARTUPINFOW startupInfo;
+    STARTUPINFO startupInfo;
     PROCESS_INFORMATION procInfo;
     BOOL retVal;
-    PRUnichar *cmdLine;
+    char *cmdLine;
 
     if (assembleCmdLine(my_argv, &cmdLine) == -1) {
         nsMemory::Free(my_argv);
         return NS_ERROR_FILE_EXECUTION_FAILED;    
     }
 
     ZeroMemory(&startupInfo, sizeof(startupInfo));
     startupInfo.cb = sizeof(startupInfo);
 
-    retVal = CreateProcessW(NULL,
-                            // const_cast<char*>(mTargetPath.get()),
-                            cmdLine,
-                            NULL,  /* security attributes for the new
-                                    * process */
-                            NULL,  /* security attributes for the primary
-                                    * thread in the new process */
-                            FALSE,  /* inherit handles */
-                            0,     /* creation flags */
-                            NULL,  /* env */
-                            NULL,  /* current drive and directory */
-                            &startupInfo,
-                            &procInfo
-                           );
+    retVal = CreateProcess(NULL,
+                           // const_cast<char*>(mTargetPath.get()),
+                           cmdLine,
+                           NULL,  /* security attributes for the new
+                                   * process */
+                           NULL,  /* security attributes for the primary
+                                   * thread in the new process */
+                           FALSE,  /* inherit handles */
+                           0,     /* creation flags */
+                           NULL,  /* env */
+                           NULL,  /* current drive and directory */
+                           &startupInfo,
+                           &procInfo
+                          );
     PR_Free( cmdLine );
     if (blocking) {
  
         // if success, wait for process termination. the early returns and such
         // are a bit ugly but preserving the logic of the nspr code I copied to 
         // minimize our risk abit.
 
         if ( retVal == TRUE ) {
--- a/xpcom/windbgdlg/Makefile.in
+++ b/xpcom/windbgdlg/Makefile.in
@@ -37,16 +37,14 @@
 
 DEPTH		= ../..
 topsrcdir	= @top_srcdir@
 srcdir		= @srcdir@
 VPATH		= @srcdir@
 
 include $(DEPTH)/config/autoconf.mk
 
-OS_LIBS		+= shell32.lib
-
 SIMPLE_PROGRAMS	= windbgdlg$(BIN_SUFFIX)
 
 CPPSRCS		= windbgdlg.cpp
 
 include $(topsrcdir)/config/rules.mk
 
--- a/xpcom/windbgdlg/windbgdlg.cpp
+++ b/xpcom/windbgdlg/windbgdlg.cpp
@@ -37,17 +37,16 @@
  * the terms of any one of the MPL, the GPL or the LGPL.
  *
  * ***** END LICENSE BLOCK ***** */
 
 /* Windows only app to show a modal debug dialog - launched by nsDebug.cpp */
 
 #include <windows.h>
 #include <stdlib.h>
-#include <shellapi.h>
 
 int WINAPI 
 WinMain(HINSTANCE  hInstance, HINSTANCE  hPrevInstance, 
         LPSTR  lpszCmdLine, int  nCmdShow)
 {
     /* support for auto answering based on words in the assertion.
      * the assertion message is sent as a series of arguements (words) to the commandline.
      * set a "word" to 0xffffffff to let the word not affect this code.
@@ -55,39 +54,38 @@ WinMain(HINSTANCE  hInstance, HINSTANCE 
      * set a "word" to 0x5 to ignore (program should continue).
      * set a "word" to 0x4 to retry (should fall into debugger).
      * set a "word" to 0x3 to abort (die).
      */
     DWORD regType;
     DWORD regValue = -1;
     DWORD regLength = sizeof regValue;
     HKEY hkeyCU, hkeyLM;
-    RegOpenKeyExW(HKEY_CURRENT_USER, L"Software\\mozilla.org\\windbgdlg", 0, KEY_READ, &hkeyCU);
-    RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"Software\\mozilla.org\\windbgdlg", 0, KEY_READ, &hkeyLM);
-    int argc =0;
-    LPWSTR *argv = CommandLineToArgvW(GetCommandLineW(), &argc);
-    for (int i = argc - 1; regValue == (DWORD)-1 && i; --i) {
+    RegOpenKeyEx(HKEY_CURRENT_USER, "Software\\mozilla.org\\windbgdlg", 0, KEY_READ, &hkeyCU);
+    RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\\mozilla.org\\windbgdlg", 0, KEY_READ, &hkeyLM);
+    const char * const * argv = __argv;
+    for (int i = __argc - 1; regValue == (DWORD)-1 && i; --i) {
         bool ok = false;
         if (hkeyCU)
             ok = RegQueryValueEx(hkeyCU, argv[i], 0, &regType, (LPBYTE)&regValue, &regLength) == ERROR_SUCCESS;
         if (!ok && hkeyLM)
             ok = RegQueryValueEx(hkeyLM, argv[i], 0, &regType, (LPBYTE)&regValue, &regLength) == ERROR_SUCCESS;
         if (!ok)
             regValue = -1;
     }
     if (hkeyCU)
         RegCloseKey(hkeyCU);
     if (hkeyLM)
         RegCloseKey(hkeyLM);
     if (regValue != (DWORD)-1 && regValue != (DWORD)-2)
         return regValue;
-    static PRUnichar msg[4048];
+    static char msg[4048];
 
     wsprintf(msg,
-             L"%s\n\nClick Abort to exit the Application.\n"
-             L"Click Retry to Debug the Application..\n"
-             L"Click Ignore to continue running the Application.", 
+             "%s\n\nClick Abort to exit the Application.\n"
+             "Click Retry to Debug the Application..\n"
+             "Click Ignore to continue running the Application.", 
              lpszCmdLine);
              
-    return MessageBoxW(NULL, msg, L"NSGlue_Assertion",
+    return MessageBox(NULL, msg, "NSGlue_Assertion",
                       MB_ICONSTOP | MB_SYSTEMMODAL| 
                       MB_ABORTRETRYIGNORE | MB_DEFBUTTON3);
 }
--- a/xpfe/bootstrap/showOSAlert.cpp
+++ b/xpfe/bootstrap/showOSAlert.cpp
@@ -34,17 +34,16 @@
  * the provisions above, a recipient may use your version of this file under
  * the terms of any one of the MPL, the GPL or the LGPL.
  *
  * ***** END LICENSE BLOCK ***** */
 
 #include  <stdio.h>
 #include  <string.h>
 #include "nscore.h"
-#include "nsString.h"
 
 //defines and includes for previous installation cleanup process
 #if defined (XP_WIN)
 #include <windows.h>
 #elif defined (XP_MAC)
 #include <Dialogs.h>
 #include <TextUtils.h>
 #elif defined (XP_OS2)
@@ -59,28 +58,25 @@ extern "C" void ShowOSAlert(const char* 
 // The maximum allowed length of aMessage is 255 characters!
 void ShowOSAlert(const char* aMessage)
 {
 #ifdef DEBUG_dbragg
 printf("\n****Inside ShowOSAlert ***\n");	
 #endif 
 
     const PRInt32 max_len = 255;
+    char message_copy[max_len+1] = { 0 };
     PRInt32 input_len = strlen(aMessage);
     PRInt32 copy_len = (input_len > max_len) ? max_len : input_len;
-#if defined (XP_WIN)
-    NS_ConvertUTF8toUTF16 msg_str(aMessage, copy_len);
-    PRUnichar* message_copy =  (PRUnichar*)msg_str.get();
-    MessageBoxW(NULL, message_copy, NULL, MB_OK | MB_ICONERROR | MB_SETFOREGROUND );
-#else
-    char message_copy[max_len+1] = { 0 };
     strncpy(message_copy, aMessage, copy_len);
     message_copy[copy_len] = 0;
-#endif
-#if (XP_MAC)
+
+#if defined (XP_WIN)
+    MessageBoxA(NULL, message_copy, NULL, MB_OK | MB_ICONERROR | MB_SETFOREGROUND );
+#elif (XP_MAC)
     short buttonClicked;
     StandardAlert(kAlertStopAlert, c2pstr(message_copy), nil, nil, &buttonClicked);
 #elif defined (XP_OS2)
     /* Set our app to be a PM app before attempting Win calls */
     PPIB ppib;
     PTIB ptib;
     DosGetInfoBlocks(&ptib, &ppib);
     ppib->pib_ultype = 3;