Bug 27857 - nsIFile not complete on Mac. Adding CopyToFollowingLinks(). r=sdagley@netscape.com, sr=sfraser@netscape.com

git-svn-id: svn://10.0.0.236/trunk@87987 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
ccarlen%netscape.com 2001-02-26 15:22:17 +00:00
parent 22ffc2d35a
commit 395017ccda
2 changed files with 20 additions and 11 deletions

View File

@ -1389,16 +1389,21 @@ nsLocalFile::GetPath(char **_retval)
return NS_OK;
}
nsresult nsLocalFile::MoveCopy( nsIFile* newParentDir, const char* newName, PRBool isCopy )
nsresult nsLocalFile::MoveCopy( nsIFile* newParentDir, const char* newName, PRBool isCopy, PRBool followLinks )
{
nsresult rv = ResolveAndStat( PR_TRUE );
if ( NS_FAILED( rv ) )
return rv;
OSErr macErr;
FSSpec srcSpec = mResolvedSpec;
FSSpec srcSpec;
Str255 newPascalName;
if (followLinks)
srcSpec = mTargetSpec;
else
srcSpec = mResolvedSpec;
// If newParentDir == nsnull, it's a simple rename
if ( !newParentDir )
{
@ -1407,15 +1412,19 @@ nsresult nsLocalFile::MoveCopy( nsIFile* newParentDir, const char* newName, PRBo
macErr = ::FSpRename( &srcSpec, newPascalName );
return MacErrorMapper( macErr );
}
PRBool isDirectory;
rv = newParentDir->IsDirectory( &isDirectory );
if ( NS_FAILED( rv ) || !isDirectory )
return NS_ERROR_FILE_DESTINATION_NOT_DIR;
nsCOMPtr<nsILocalFileMac> destDir( do_QueryInterface( newParentDir ));
FSSpec destSpec;
PRBool isDirectory;
rv = newParentDir->IsDirectory( &isDirectory );
if ( NS_FAILED( rv ) )
return rv;
rv = destDir->GetResolvedFSSpec( &destSpec );
if (followLinks)
rv = destDir->GetTargetFSSpec( &destSpec );
else
rv = destDir->GetResolvedFSSpec( &destSpec ); // If resolved spec is an alias file, we'll rightly fail
if ( NS_FAILED( rv ) )
return rv;
@ -1448,19 +1457,19 @@ nsresult nsLocalFile::MoveCopy( nsIFile* newParentDir, const char* newName, PRBo
NS_IMETHODIMP
nsLocalFile::CopyTo(nsIFile *newParentDir, const char *newName)
{
return MoveCopy( newParentDir, newName, PR_TRUE );
return MoveCopy( newParentDir, newName, PR_TRUE, PR_FALSE );
}
NS_IMETHODIMP
nsLocalFile::CopyToFollowingLinks(nsIFile *newParentDir, const char *newName)
{
return NS_ERROR_NOT_IMPLEMENTED;
return MoveCopy( newParentDir, newName, PR_TRUE, PR_TRUE );
}
NS_IMETHODIMP
nsLocalFile::MoveTo(nsIFile *newParentDir, const char *newName)
{
return MoveCopy( newParentDir, newName, PR_FALSE );
return MoveCopy( newParentDir, newName, PR_FALSE, PR_FALSE );
}
NS_IMETHODIMP

View File

@ -94,7 +94,7 @@ protected:
nsresult TestFinderFlag(PRUint16 flagMask, PRBool *outFlagSet, PRBool testTargetSpec = PR_TRUE);
OSErr GetTargetSpecCatInfo(CInfoPBRec& outInfo);
nsresult MoveCopy( nsIFile* newParentDir, const char* newName, PRBool isCopy );
nsresult MoveCopy( nsIFile* newParentDir, const char* newName, PRBool isCopy, PRBool followLinks );
// Passing nsnull for the extension uses leaf name
nsresult SetOSTypeAndCreatorFromExtension(const char* extension = nsnull);