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
}
Exemple #2
0
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;
}
Exemple #5
0
	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);
}
Exemple #8
0
//*** 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
}