From a9039a480ffb123c194c8be3d5015de111e1c286 Mon Sep 17 00:00:00 2001 From: "ccarlen%netscape.com" Date: Fri, 22 Mar 2002 15:03:17 +0000 Subject: [PATCH] Bug 58533 - Can't open files with a '/' in name by double-clicking in Finder. r=rjc/sr=sfraser/a=asa git-svn-id: svn://10.0.0.236/trunk@117181 18797224-902f-48f8-a5cc-f745e15eee43 --- .../appshell/src/nsCommandLineServiceMac.cpp | 36 ++++++++++++++----- .../startup/src/nsCommandLineServiceMac.cpp | 36 ++++++++++++++----- 2 files changed, 56 insertions(+), 16 deletions(-) diff --git a/mozilla/xpfe/appshell/src/nsCommandLineServiceMac.cpp b/mozilla/xpfe/appshell/src/nsCommandLineServiceMac.cpp index 39a381b14f0..34013a77f9b 100644 --- a/mozilla/xpfe/appshell/src/nsCommandLineServiceMac.cpp +++ b/mozilla/xpfe/appshell/src/nsCommandLineServiceMac.cpp @@ -52,7 +52,6 @@ #include "nsIURL.h" #include "nsIServiceManager.h" #include "nsNetCID.h" -static NS_DEFINE_CID(kIOServiceCID, NS_IOSERVICE_CID); #include "nsIWebShellWindow.h" #include "nsIWebShell.h" #include "nsIDOMWindow.h" @@ -194,11 +193,21 @@ nsresult nsMacCommandLine::AddToCommandLine(const char* inOptionString, const FS //---------------------------------------------------------------------------------------- { // Convert the filespec to a URL - nsFileSpec nsspec(inFileSpec); - nsFileURL fileAsURL(nsspec); + FSSpec nonConstSpec = inFileSpec; + nsCOMPtr inFile; + nsresult rv = NS_NewLocalFileWithFSSpec(&nonConstSpec, PR_TRUE, getter_AddRefs(inFile)); + if (NS_FAILED(rv)) + return rv; + nsCOMPtr ioService(do_GetService(NS_IOSERVICE_CONTRACTID)); + if (!ioService) + return NS_ERROR_FAILURE; + nsCAutoString specBuf; + rv = ioService->GetURLSpecFromFile(inFile, specBuf); + if (NS_FAILED(rv)) + return rv; mTempArgsString.Append(" "); - AddToCommandLine(inOptionString); - AddToCommandLine(fileAsURL.GetAsString()); + AddToCommandLine(inOptionString); + AddToCommandLine(specBuf.get()); return NS_OK; } @@ -267,10 +276,21 @@ OSErr nsMacCommandLine::HandleOpenOneDoc(const FSSpec& inFileSpec, OSType inFile return AddToCommandLine("-url", inFileSpec); } // Final case: we're not just starting up. How do we handle this? - nsFileSpec fileSpec(inFileSpec); - nsFileURL fileURL(fileSpec); - nsString urlString; urlString.AssignWithConversion(fileURL.GetURLString()); nsresult rv; + FSSpec nonConstSpec = inFileSpec; + nsCOMPtr inFile; + rv = NS_NewLocalFileWithFSSpec(&nonConstSpec, PR_TRUE, getter_AddRefs(inFile)); + if (NS_FAILED(rv)) + return errAEEventNotHandled; + nsCOMPtr ioService(do_GetService(NS_IOSERVICE_CONTRACTID)); + if (!ioService) + return errAEEventNotHandled; + nsCAutoString specBuf; + rv = ioService->GetURLSpecFromFile(inFile, specBuf); + if (NS_FAILED(rv)) + return errAEEventNotHandled; + nsAutoString urlString; + CopyASCIItoUCS2(specBuf, urlString); rv = OpenWindow( "chrome://navigator/content", urlString.get() ); if (NS_FAILED(rv)) return errAEEventNotHandled; diff --git a/mozilla/xpfe/components/startup/src/nsCommandLineServiceMac.cpp b/mozilla/xpfe/components/startup/src/nsCommandLineServiceMac.cpp index 39a381b14f0..34013a77f9b 100644 --- a/mozilla/xpfe/components/startup/src/nsCommandLineServiceMac.cpp +++ b/mozilla/xpfe/components/startup/src/nsCommandLineServiceMac.cpp @@ -52,7 +52,6 @@ #include "nsIURL.h" #include "nsIServiceManager.h" #include "nsNetCID.h" -static NS_DEFINE_CID(kIOServiceCID, NS_IOSERVICE_CID); #include "nsIWebShellWindow.h" #include "nsIWebShell.h" #include "nsIDOMWindow.h" @@ -194,11 +193,21 @@ nsresult nsMacCommandLine::AddToCommandLine(const char* inOptionString, const FS //---------------------------------------------------------------------------------------- { // Convert the filespec to a URL - nsFileSpec nsspec(inFileSpec); - nsFileURL fileAsURL(nsspec); + FSSpec nonConstSpec = inFileSpec; + nsCOMPtr inFile; + nsresult rv = NS_NewLocalFileWithFSSpec(&nonConstSpec, PR_TRUE, getter_AddRefs(inFile)); + if (NS_FAILED(rv)) + return rv; + nsCOMPtr ioService(do_GetService(NS_IOSERVICE_CONTRACTID)); + if (!ioService) + return NS_ERROR_FAILURE; + nsCAutoString specBuf; + rv = ioService->GetURLSpecFromFile(inFile, specBuf); + if (NS_FAILED(rv)) + return rv; mTempArgsString.Append(" "); - AddToCommandLine(inOptionString); - AddToCommandLine(fileAsURL.GetAsString()); + AddToCommandLine(inOptionString); + AddToCommandLine(specBuf.get()); return NS_OK; } @@ -267,10 +276,21 @@ OSErr nsMacCommandLine::HandleOpenOneDoc(const FSSpec& inFileSpec, OSType inFile return AddToCommandLine("-url", inFileSpec); } // Final case: we're not just starting up. How do we handle this? - nsFileSpec fileSpec(inFileSpec); - nsFileURL fileURL(fileSpec); - nsString urlString; urlString.AssignWithConversion(fileURL.GetURLString()); nsresult rv; + FSSpec nonConstSpec = inFileSpec; + nsCOMPtr inFile; + rv = NS_NewLocalFileWithFSSpec(&nonConstSpec, PR_TRUE, getter_AddRefs(inFile)); + if (NS_FAILED(rv)) + return errAEEventNotHandled; + nsCOMPtr ioService(do_GetService(NS_IOSERVICE_CONTRACTID)); + if (!ioService) + return errAEEventNotHandled; + nsCAutoString specBuf; + rv = ioService->GetURLSpecFromFile(inFile, specBuf); + if (NS_FAILED(rv)) + return errAEEventNotHandled; + nsAutoString urlString; + CopyASCIItoUCS2(specBuf, urlString); rv = OpenWindow( "chrome://navigator/content", urlString.get() ); if (NS_FAILED(rv)) return errAEEventNotHandled;