bool XMLMacCarbonFile::openWithPermission(const XMLCh* const fileName, int macPermission) { OSErr err = noErr; if (mFileValid) ThrowXML1(XMLPlatformUtilsException, XMLExcepts::File_CouldNotOpenFile, fileName); if (gHasHFSPlusAPIs) { FSRef ref; if (!XMLParsePathToFSRef(fileName, ref)) err = fnfErr; HFSUniStr255 forkName; if (err == noErr) err = FSGetDataForkName(&forkName); if (err == noErr) err = FSOpenFork(&ref, forkName.length, forkName.unicode, macPermission, &mFileRefNum); } else { FSSpec spec; if (!XMLParsePathToFSSpec(fileName, spec)) err = fnfErr; if (err == noErr) err = FSpOpenDF(&spec, macPermission, &mFileRefNum); } if (err != noErr) ThrowXML1(XMLPlatformUtilsException, XMLExcepts::File_CouldNotOpenFile, fileName); mFileValid = true; return mFileValid; }
XERCES_CPP_NAMESPACE_BEGIN URLAccessBinInputStream::URLAccessBinInputStream(const XMLURL& urlSource) : mBytesProcessed(0), mURLReference(NULL), mBuffer(NULL), mBufPos(NULL), mBufAvailable(0) { OSStatus status = noErr; // Get the full URL from the source char* url = XMLString::transcode(urlSource.getURLText(), urlSource.getMemoryManager()); ArrayJanitor<char> janBuf(url, urlSource.getMemoryManager()); // Create a URL reference from the URL status = URLNewReference(url, &mURLReference); // Begin the transfer if (status == noErr) status = URLOpen( mURLReference, NULL, // FSSpec* (not reading to file) 0, // URLOpenFlags NULL, // URLNotifyUPP 0, // URLEventMask 0); // userContext // If we failed, we throw switch (status) { case noErr: break; case kURLInvalidURLError: ThrowXML(MalformedURLException, XMLExcepts::URL_MalformedURL); break; case kURLUnsupportedSchemeError: ThrowXML(MalformedURLException, XMLExcepts::URL_UnsupportedProto); break; default: ThrowXML1(NetAccessorException, XMLExcepts::NetAcc_ConnSocket, urlSource.getURLText()); break; } }
XERCES_CPP_NAMESPACE_BEGIN URLAccessCFBinInputStream::URLAccessCFBinInputStream(const XMLURL& urlSource) : mBytesProcessed(0), mDataRef(NULL) { // Figure out what we're dealing with const XMLCh* urlText = urlSource.getURLText(); unsigned int urlLength = XMLString::stringLen(urlText); // Create a CFString from the path CFStringRef stringRef = NULL; if (urlText) { stringRef = CFStringCreateWithCharacters( kCFAllocatorDefault, urlText, urlLength ); } // Create a URLRef from the CFString CFURLRef urlRef = NULL; if (stringRef) { urlRef = CFURLCreateWithString( kCFAllocatorDefault, stringRef, NULL // CFURLRef baseURL ); } // Fetch the data mDataRef = NULL; SInt32 errorCode = 0; Boolean success = false; if (stringRef) { success = CFURLCreateDataAndPropertiesFromResource( kCFAllocatorDefault, urlRef, &mDataRef, NULL, // CFDictionaryRef *properties, NULL, // CFArrayRef desiredProperties, &errorCode ); } // Cleanup temporary stuff if (stringRef) CFRelease(stringRef); if (urlRef) CFRelease(urlRef); // Check for an error in fetching the data if (!success || errorCode) { // Dispose any potential dataRef if (mDataRef) { CFRelease(mDataRef); mDataRef = NULL; } // Do a best attempt at mapping some errors switch (errorCode) { case kCFURLUnknownSchemeError: ThrowXML(MalformedURLException, XMLExcepts::URL_UnsupportedProto); break; case kCFURLRemoteHostUnavailableError: ThrowXML1(NetAccessorException, XMLExcepts::NetAcc_TargetResolution, urlSource.getHost()); break; case kCFURLUnknownError: ThrowXML1(NetAccessorException, XMLExcepts::NetAcc_ReadSocket, urlText); break; case kCFURLResourceNotFoundError: case kCFURLResourceAccessViolationError: case kCFURLTimeoutError: ThrowXML1(NetAccessorException, XMLExcepts::File_CouldNotOpenFile, urlText); break; case kCFURLImproperArgumentsError: case kCFURLUnknownPropertyKeyError: case kCFURLPropertyKeyUnavailableError: default: ThrowXML1(NetAccessorException, XMLExcepts::NetAcc_InternalError, urlText); break; } } }