Bug 72129 - OpenANSIFIleDesc on Mac won't create new files.
This commit is contained in:
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user