nsresult nsCacheEntry::RequestAccess(nsCacheRequest * request, nsCacheAccessMode *accessGranted) { nsresult rv = NS_OK; if (!IsInitialized()) { // brand new, unbound entry request->mKey = nsnull; // steal ownership of the key string if (request->IsStreamBased()) MarkStreamBased(); MarkInitialized(); *accessGranted = request->AccessRequested() & nsICache::ACCESS_WRITE; NS_ASSERTION(*accessGranted, "new cache entry for READ-ONLY request"); PR_APPEND_LINK(request, &mRequestQ); return rv; } if (IsDoomed()) return NS_ERROR_CACHE_ENTRY_DOOMED; if (IsStreamData() != request->IsStreamBased()) { *accessGranted = nsICache::ACCESS_NONE; return request->IsStreamBased() ? NS_ERROR_CACHE_DATA_IS_NOT_STREAM : NS_ERROR_CACHE_DATA_IS_STREAM; } if (PR_CLIST_IS_EMPTY(&mDescriptorQ)) { // 1st descriptor for existing bound entry *accessGranted = request->AccessRequested(); if (*accessGranted & nsICache::ACCESS_WRITE) { MarkInvalid(); } else { MarkValid(); } } else { // nth request for existing, bound entry *accessGranted = request->AccessRequested() & ~nsICache::ACCESS_WRITE; if (!IsValid()) rv = NS_ERROR_CACHE_WAIT_FOR_VALIDATION; } PR_APPEND_LINK(request,&mRequestQ); return rv; }
//Note:we are not using LEGACY_FLAC defs (see ImportFlac.cpp FlacImportFileHandle::Init() //this code is based on that function. bool ODFlacDecoder::ReadHeader() { mFormat = int16Sample;//start with the smallest and move up in the metadata_callback. //we want to use the native flac type for quick conversion. /* (sampleFormat) gPrefs->Read(wxT("/SamplingRate/DefaultProjectSampleFormat"), floatSample);*/ mFile = std::make_unique<ODFLACFile>(this); if (!mHandle.Open(mFName, wxT("rb"))) { return false; } // Even though there is an init() method that takes a filename, use the one that // takes a file handle because wxWidgets can open a file with a Unicode name and // libflac can't (under Windows). // // Responsibility for closing the file is passed to libflac. // (it happens when mFile->finish() is called) bool result = mFile->init(mHandle.fp())?true:false; mHandle.Detach(); if (result != FLAC__STREAM_DECODER_INIT_STATUS_OK) { return false; } //this will call the metadata_callback when it is done mFile->process_until_end_of_metadata(); // not necessary to check state, error callback will catch errors, but here's how: if (mFile->get_state() > FLAC__STREAM_DECODER_READ_FRAME) { return false; } if (!mFile->is_valid() || mFile->get_was_error()) { // This probably is not a FLAC file at all return false; } MarkInitialized(); return true; }