From 44d056d6a30abb9374923d8b5616297e8df3eed1 Mon Sep 17 00:00:00 2001 From: "sfraser%netscape.com" Date: Thu, 9 Mar 2000 00:35:11 +0000 Subject: [PATCH] Fix for 29572 (launching PSM on Mac). Implement GetParent() for an nsILocalFileMac that was initialized with an FSSpec. r=davidm, a=jar git-svn-id: svn://10.0.0.236/trunk@62415 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/xpcom/io/nsLocalFileMac.cpp | 45 ++++++++++++++++++++++++----- 1 file changed, 38 insertions(+), 7 deletions(-) diff --git a/mozilla/xpcom/io/nsLocalFileMac.cpp b/mozilla/xpcom/io/nsLocalFileMac.cpp index abb03545d9c..5306c9fe391 100644 --- a/mozilla/xpcom/io/nsLocalFileMac.cpp +++ b/mozilla/xpcom/io/nsLocalFileMac.cpp @@ -1556,7 +1556,8 @@ NS_IMETHODIMP nsLocalFile::GetParent(nsIFile * *aParent) { NS_ENSURE_ARG_POINTER(aParent); - + nsresult rv = NS_OK; + switch (mInitType) { case eInitWithPath: @@ -1570,30 +1571,60 @@ nsLocalFile::GetParent(nsIFile * *aParent) parentPath.Truncate(offset); nsCOMPtr localFile; - nsresult rv = NS_NewLocalFile(parentPath.GetBuffer(), getter_AddRefs(localFile)); - + rv = NS_NewLocalFile(parentPath.GetBuffer(), getter_AddRefs(localFile)); if (NS_SUCCEEDED(rv) && localFile) { - return localFile->QueryInterface(NS_GET_IID(nsIFile), (void**)aParent); + rv = localFile->QueryInterface(NS_GET_IID(nsIFile), (void**)aParent); } - return rv; break; } case eInitWithFSSpec: { - break; + rv = ResolveAndStat(PR_TRUE); + if (NS_FAILED(rv)) return rv; + + FSSpec parentFolderSpec; + CInfoPBRec pBlock = {0}; + + parentFolderSpec.name[0] = 0; + + pBlock.dirInfo.ioVRefNum = mResolvedSpec.vRefNum; + pBlock.dirInfo.ioDrDirID = mResolvedSpec.parID; + pBlock.dirInfo.ioNamePtr = (StringPtr)parentFolderSpec.name; + pBlock.dirInfo.ioFDirIndex = -1; //get info on parID + OSErr err = PBGetCatInfoSync(&pBlock); + if (err != noErr) return MacErrorMapper(err); + + parentFolderSpec.vRefNum = mResolvedSpec.vRefNum; + parentFolderSpec.parID = pBlock.dirInfo.ioDrParID; + + nsCOMPtr file; + rv = NS_NewLocalFile("dummy:path", getter_AddRefs(file)); + if (NS_FAILED(rv)) + return rv; + + // Init with the FSSpec for the current dir + nsCOMPtr localFileMac = do_QueryInterface(file, &rv); + if (localFileMac) { + localFileMac->InitWithFSSpec(&parentFolderSpec); + rv = localFileMac->QueryInterface(NS_GET_IID(nsIFile), (void**)aParent); + } + break; } default: // !!!!! Danger Will Robinson !!!!! // we really shouldn't get here + NS_NOTREACHED("Unknown nsLocalFileMac init type"); + rv = NS_ERROR_FAILURE; break; } - return NS_OK; + return rv; } + NS_IMETHODIMP nsLocalFile::Exists(PRBool *_retval) {