static long ogg_tell_func(void *datasource) { imFileRef fp = static_cast<imFileRef>(datasource); #ifdef PRWIN_ENV long pos; LARGE_INTEGER lpos, zero; zero.QuadPart = 0; BOOL result = SetFilePointerEx(fp, zero, &lpos, FILE_CURRENT); pos = lpos.QuadPart; return pos; #else long pos; SInt64 lpos; OSErr result = FSGetForkPosition(CAST_REFNUM(fp), &lpos); pos = lpos; return pos; #endif }
XERCES_CPP_NAMESPACE_BEGIN //---------------------------------------------------------------------------- // XMLMacCarbonFile methods //---------------------------------------------------------------------------- unsigned int XMLMacCarbonFile::currPos() { OSErr err = noErr; unsigned int pos = 0; if (!mFileValid) ThrowXML(XMLPlatformUtilsException, XMLExcepts::File_CouldNotGetCurPos); if (gHasHFSPlusAPIs) { SInt64 bigPos = 0; err = FSGetForkPosition(mFileRefNum, &bigPos); if (err == noErr) pos = bigPos; } else { long longPos; err = GetFPos(mFileRefNum, &longPos); if (err == noErr) pos = longPos; } if (err != noErr) ThrowXML(XMLPlatformUtilsException, XMLExcepts::File_CouldNotGetCurPos); return pos; }
Imf::Int64 IStreamPr::tellg() { #ifdef __APPLE__ Imf::Int64 pos; SInt64 lpos; OSErr result = FSGetForkPosition(reinterpret_cast<intptr_t>(_fileRef), &lpos); if(result != noErr) throw Iex::IoExc("Error calling FSGetForkPosition()."); pos = lpos; return pos; #else Imf::Int64 pos; LARGE_INTEGER lpos, zero; zero.QuadPart = 0; BOOL result = SetFilePointerEx(_fileRef, zero, &lpos, FILE_CURRENT); if(!result) throw Iex::IoExc("Error calling SetFilePointerEx()."); pos = lpos.QuadPart; return pos; #endif }
AudioFileManager *new_AudioFileManager(AudioFilePlayer *inParent, SInt16 inForkRefNum, SInt64 inFileLength, UInt32 inChunkSize) { AudioFileManager *afm; if (sReaderThread == NULL) { sReaderThread = new_FileReaderThread(); if (sReaderThread == NULL) return NULL; } afm = (AudioFileManager *) SDL_malloc(sizeof (AudioFileManager)); if (afm == NULL) return NULL; SDL_memset(afm, '\0', sizeof (*afm)); #define SET_AUDIOFILEMANAGER_METHOD(m) afm->m = AudioFileManager_##m SET_AUDIOFILEMANAGER_METHOD(Disconnect); SET_AUDIOFILEMANAGER_METHOD(DoConnect); SET_AUDIOFILEMANAGER_METHOD(Read); SET_AUDIOFILEMANAGER_METHOD(GetFileBuffer); SET_AUDIOFILEMANAGER_METHOD(GetParent); SET_AUDIOFILEMANAGER_METHOD(SetPosition); SET_AUDIOFILEMANAGER_METHOD(GetByteCounter); SET_AUDIOFILEMANAGER_METHOD(SetEndOfFile); SET_AUDIOFILEMANAGER_METHOD(Render); SET_AUDIOFILEMANAGER_METHOD(GetFileData); SET_AUDIOFILEMANAGER_METHOD(AfterRender); SET_AUDIOFILEMANAGER_METHOD(FileInputProc); #undef SET_AUDIOFILEMANAGER_METHOD afm->mParent = inParent; afm->mForkRefNum = inForkRefNum; afm->mBufferSize = inChunkSize; afm->mBufferOffset = inChunkSize; afm->mChunkSize = inChunkSize; afm->mFileLength = inFileLength; afm->mFileBuffer = (char*) SDL_malloc(afm->mChunkSize * 2); FSGetForkPosition(afm->mForkRefNum, &afm->mAudioDataOffset); assert (afm->mFileBuffer != NULL); return afm; }
XMP_Int64 LFA_Seek ( LFA_FileRef file, XMP_Int64 offset, int mode, bool * okPtr ) { long refNum = (long)file; // ! Use long to avoid size warnings for SInt16 cast. UInt16 posMode; switch ( mode ) { case SEEK_SET : posMode = fsFromStart; break; case SEEK_CUR : posMode = fsFromMark; break; case SEEK_END : posMode = fsFromLEOF; break; default : LFA_Throw ( "LFA_Seek: Invalid seek mode", kLFAErr_InternalFailure ); break; } OSErr err; XMP_Int64 newPos; err = FSSetForkPosition ( refNum, posMode, offset ); if ( err == eofErr ) { // FSSetForkPosition does not implicitly grow the file. Grow then seek to the new EOF. err = FSSetForkSize ( refNum, posMode, offset ); if ( err == noErr ) err = FSSetForkPosition ( refNum, fsFromLEOF, 0 ); } if ( err == noErr ) err = FSGetForkPosition ( refNum, &newPos ); if ( okPtr != 0 ) { *okPtr = (err == noErr); } else { if ( err != noErr ) LFA_Throw ( "LFA_Seek: FSSetForkPosition failure", kLFAErr_ExternalFailure ); } return newPos; } // LFA_Seek
static opus_int64 opusfile_tell_func(void *_stream) { imFileRef fp = static_cast<imFileRef>(_stream); #ifdef PRWIN_ENV LARGE_INTEGER lpos, zero; zero.QuadPart = 0; BOOL result = SetFilePointerEx(fp, zero, &lpos, FILE_CURRENT); return lpos.QuadPart; #else SInt64 lpos; OSErr result = FSGetForkPosition(CAST_REFNUM(fp), &lpos); return lpos; #endif }
static PyObject * rf_tell(rfobject *self, PyObject *args) { long long where; OSErr err; if (self->isclosed) { PyErr_SetString(PyExc_ValueError, "Operation on closed file"); return NULL; } if (!PyArg_ParseTuple(args, "")) return NULL; err = FSGetForkPosition(self->fRefNum, &where); if (err != noErr) { PyMac_Error(err); return NULL; } return PyLong_FromLongLong(where); }
//*** kind of a hack, TOTEST bool LFA_isEof( LFA_FileRef file ) { #if XMP_MacBuild long refNum = (long)file; // ! Use long to avoid size warnings for SInt16 cast. XMP_Int64 position, length; OSErr err = FSGetForkPosition( refNum, &position ); if ( err != noErr ) LFA_Throw ( "LFA_isEOF:FSGetForkPosition failure", kLFAErr_ExternalFailure ); err = FSGetForkSize ( refNum, &length ); if ( err != noErr ) LFA_Throw ( "LFA_isEof: FSGetForkSize failure", kLFAErr_ExternalFailure ); return position==length; #endif #if XMP_WinBuild HANDLE handle = (HANDLE)file; XMP_Int64 filepos = LFA_Tell(file); DWORD lowWord, highWord; lowWord = GetFileSize(handle, &highWord); XMP_Int64 filesize = ( ((XMP_Int64)highWord) << 32 | lowWord ); return filesize == filepos; #endif #if XMP_UNIXBuild || XMP_iOSBuild int descr = (int)file; struct stat info; if (fstat(descr,&info) == -1) LFA_Throw ( "LFA_isEof: fstat failed.", kLFAErr_ExternalFailure ); return LFA_Tell(file) == info.st_size; #endif }
::FLAC__StreamDecoderTellStatus OurDecoder::tell_callback(FLAC__uint64 *absolute_byte_offset) { #ifdef PRWIN_ENV LARGE_INTEGER lpos, zero; zero.QuadPart = 0; BOOL result = SetFilePointerEx(_fp, zero, &lpos, FILE_CURRENT); *absolute_byte_offset = lpos.QuadPart; return (result ? FLAC__STREAM_DECODER_TELL_STATUS_OK : FLAC__STREAM_DECODER_TELL_STATUS_ERROR); #else SInt64 lpos; OSErr result = FSGetForkPosition(CAST_REFNUM(_fp), &lpos); *absolute_byte_offset = lpos; return (result == noErr ? FLAC__STREAM_DECODER_TELL_STATUS_OK : FLAC__STREAM_DECODER_TELL_STATUS_ERROR); #endif }
AP4_Result My_ByteStream::Tell(AP4_Position &position) { #ifdef PRWIN_ENV LARGE_INTEGER lpos, zero; zero.QuadPart = 0; BOOL result = SetFilePointerEx(_fp, zero, &lpos, FILE_CURRENT); position = lpos.QuadPart; return (result ? AP4_SUCCESS : AP4_FAILURE); #else long pos; SInt64 lpos; OSErr result = FSGetForkPosition(CAST_REFNUM(_fp), &lpos); position = lpos; return (result == noErr ? AP4_SUCCESS : AP4_FAILURE); #endif }