diff --git a/mozilla/xpcom/io/nsLocalFileOS2.cpp b/mozilla/xpcom/io/nsLocalFileOS2.cpp index 7954eb216bf..4c4b4a386ad 100644 --- a/mozilla/xpcom/io/nsLocalFileOS2.cpp +++ b/mozilla/xpcom/io/nsLocalFileOS2.cpp @@ -621,18 +621,21 @@ nsLocalFile::ResolveAndStat(PRBool resolveTerminal) NS_IMETHODIMP nsLocalFile::Clone(nsIFile **file) { - *file = nsnull; + nsresult rv; + char * aFilePath; + GetPath(&aFilePath); + + nsCOMPtr localFile; + + rv = NS_NewLocalFile(aFilePath, mFollowSymlinks, getter_AddRefs(localFile)); + nsMemory::Free(aFilePath); - nsLocalFile *localFile = new nsLocalFile(*this); - if (localFile == NULL) - return NS_ERROR_OUT_OF_MEMORY; - - localFile->mRefCnt = 0; - - *file = localFile; - NS_ADDREF(*file); + if (NS_SUCCEEDED(rv) && localFile) + { + return localFile->QueryInterface(NS_GET_IID(nsIFile), (void**)file); + } - return NS_OK; + return rv; } NS_IMETHODIMP diff --git a/mozilla/xpcom/io/nsLocalFileUnix.cpp b/mozilla/xpcom/io/nsLocalFileUnix.cpp index 75b950c9cdc..6dcd8770c59 100644 --- a/mozilla/xpcom/io/nsLocalFileUnix.cpp +++ b/mozilla/xpcom/io/nsLocalFileUnix.cpp @@ -243,11 +243,13 @@ nsLocalFile::Clone(nsIFile **file) CHECK_mPath(); NS_ENSURE_ARG(file); - nsLocalFile *localFile = new nsLocalFile(*this); + nsCOMPtr localFile = new nsLocalFile(); if (!localFile) return NS_ERROR_OUT_OF_MEMORY; - localFile->mRefCnt = 0; + nsresult rv = localFile->InitWithPath(mPath); + if (NS_FAILED(rv)) + return rv; *file = localFile; NS_ADDREF(*file);