Bug 72129 - OpenANSIFIleDesc on Mac won't create new files.

This commit is contained in:
ccarlen@netscape.com
2001-03-21 01:13:20 +00:00
parent 49f2c07274
commit 80d65362f0

View File

@@ -1093,19 +1093,35 @@ nsLocalFile::OpenNSPRFileDesc(PRInt32 flags, PRInt32 mode, PRFileDesc **_retval)
NS_IMETHODIMP
nsLocalFile::OpenANSIFileDesc(const char *mode, FILE * *_retval)
{
nsresult rv = ResolveAndStat(PR_TRUE);
if (NS_FAILED(rv) && rv != NS_ERROR_FILE_NOT_FOUND)
return rv;
NS_ENSURE_ARG(mode);
NS_ENSURE_ARG_POINTER(_retval);
nsresult rv;
FSSpec spec;
// Resolve the alias to the original file.
FSSpec spec = mTargetSpec;
Boolean targetIsFolder;
Boolean wasAliased;
OSErr err = ::ResolveAliasFile(&spec, TRUE, &targetIsFolder, &wasAliased);
if (err != noErr)
return MacErrorMapper(err);
if (mode[0] == 'w' || mode[0] == 'a') // Check if the file exists
{
PRBool exists;
rv = Exists(&exists);
if (NS_FAILED(rv))
return rv;
if (!exists) {
mType = (mode[1] == 'b') ? 'BiNA' : 'TEXT';
rv = Create(nsIFile::NORMAL_FILE_TYPE, 0);
if (NS_FAILED(rv))
return rv;
spec = mResolvedSpec;
}
else
spec = mTargetSpec;
}
else
{
rv = ResolveAndStat(PR_TRUE);
if (NS_FAILED(rv) && rv != NS_ERROR_FILE_NOT_FOUND)
return rv;
spec = mTargetSpec;
}
*_retval = FSp_fopen(&spec, mode);