if (NS_SUCCEEDED(rv)) { renamedDoomedFile = parent; renamedDoomedFile->AppendNative(uniqueLeafName);  }
PRInt32 ReplaceFileNow(nsIFile* replacementFile, nsIFile* doomedFile ){    PRBool flagExists, flagIsEqual;    nsresult rv;    // replacement file must exist, doomed file doesn't have to    replacementFile->Exists(&flagExists);    if ( !flagExists )        return nsInstall::DOES_NOT_EXIST;    // don't have to do anything if the files are the same    replacementFile->Equals(doomedFile, &flagIsEqual);    if ( flagIsEqual )        return nsInstall::SUCCESS;    PRInt32 result = nsInstall::ACCESS_DENIED;    // first try to rename the doomed file out of the way (if it exists)    nsCOMPtr<nsIFile>      renamedDoomedFile;    nsCOMPtr<nsILocalFile> tmpLocalFile;    nsCOMPtr<nsIFile> parent;    nsCAutoString leafname;        doomedFile->Clone(getter_AddRefs(renamedDoomedFile));    renamedDoomedFile->Exists(&flagExists);    if ( flagExists )    {        tmpLocalFile = do_QueryInterface(renamedDoomedFile, &rv); // Convert to an nsILocalFile        //get the leafname so we can convert its extension to .old        nsCAutoString uniqueLeafName;        tmpLocalFile->GetNativeLeafName(leafname);        PRInt32 extpos = leafname.RFindChar('.');        if (extpos != -1)        {            // We found the extension;             leafname.Truncate(extpos + 1); //strip off the old extension        }        leafname.Append("old");                //Now reset the leafname        tmpLocalFile->SetNativeLeafName(leafname);        tmpLocalFile->CreateUnique(nsIFile::NORMAL_FILE_TYPE, 0644);        tmpLocalFile->GetParent(getter_AddRefs(parent)); //get the parent for later use in MoveTo        tmpLocalFile->GetNativeLeafName(uniqueLeafName);//this is the new "unique" leafname        rv = doomedFile->Clone(getter_AddRefs(renamedDoomedFile));// Reset renamedDoomed file so doomedfile isn't                                                                   //   changed during the MoveTo call        if (NS_FAILED(rv)) result = nsInstall::UNEXPECTED_ERROR;        rv = renamedDoomedFile->MoveToNative(parent, uniqueLeafName);                if (NS_SUCCEEDED(rv))        {            renamedDoomedFile = parent;                      //MoveTo on Mac doesn't reset the tmpFile object to             renamedDoomedFile->AppendNative(uniqueLeafName); //the new name or location. That's why there's this                                                              //explict assignment and Append call.        }        if (result == nsInstall::UNEXPECTED_ERROR)            return result;    }    // if doomedFile is gone move new file into place    doomedFile->Exists(&flagExists);    if ( !flagExists )    {        nsCOMPtr<nsIFile> parentofFinalFile;        nsCOMPtr<nsIFile> parentofReplacementFile;        doomedFile->GetParent(getter_AddRefs(parentofFinalFile));        replacementFile->GetParent(getter_AddRefs(parentofReplacementFile));        // XXX looks dangerous, the replacement file name may NOT be unique in the        // target directory if we have to move it! Either we should never move the        // files like this (i.e. error if not in the same dir) or we need to take        // a little more care in the move.        parentofReplacementFile->Equals(parentofFinalFile, &flagIsEqual);        if(!flagIsEqual)        {            NS_WARNING("File unpacked into a non-dest dir" );            replacementFile->GetNativeLeafName(leafname);            rv = replacementFile->MoveToNative(parentofFinalFile, leafname);        }        	        rv = doomedFile->GetNativeLeafName(leafname);        if ( NS_SUCCEEDED(rv))            rv = replacementFile->MoveToNative(parentofReplacementFile, leafname );        if ( NS_SUCCEEDED(rv) )         {            // we replaced the old file OK, now we have to            // get rid of it if it was renamed out of the way            result = DeleteFileNowOrSchedule( renamedDoomedFile );        }        else        {            // couldn't rename file, try to put old file back            renamedDoomedFile->GetParent(getter_AddRefs(parent));            renamedDoomedFile->MoveToNative(parent, leafname);        }    }    return result;}