|
From: | Dany Amiouny |
Subject: | Freetype 1.3.1 |
Date: | Mon, 15 May 2000 13:38:22 +0200 |
Hello,
I have recently downloaded version 1.3.1 of the
Freetype library. We are considering including this library in our
products.
First of all, I would like to thank you for this
excellent work which has given us much insight to the internals of
TrueType.
We are in a situation where we need to compile
using TT_CONFIG_OPTION_THREAD_SAFE and memory-mapped files inspired from the
unix version you supply:
I have found that this function will not compile
under this situation:
/*******************************************************************
* * Function : TT_Forget_Frame * * Description : Releases a cached frame after reading. * * Input : None * * Output : SUCCESS on success. FAILURE on error. * ******************************************************************/ EXPORT_FUNC
TT_Error TT_Forget_Frame( FRAME_ARG ) { if ( CUR_Frame.address == NULL ) return TT_Err_Nested_Frame_Access; /* If we were using a duplicate
in case of overflow, free it now */
if ( CUR_Frame.address < (Byte*)CUR_Stream->map->base || CUR_Frame.address >= (Byte*)CUR_Stream->map->base + CUR_Stream->map->size ) FREE( CUR_Frame.address ); ZERO_Frame( files.frame
);
return TT_Err_Ok;
} changing it to :
/*******************************************************************
* * Function : TT_Forget_Frame * * Description : Releases a cached frame after reading. * * Input : None * * Output : SUCCESS on success. FAILURE on error. * * AMYUNI : added STREAM_ARGS as a first parameter * ******************************************************************/ EXPORT_FUNC
TT_Error TT_Forget_Frame( STREAM_ARGS FRAME_ARG ) { if ( CUR_Frame.address == NULL ) return TT_Err_Nested_Frame_Access; /* If we were using a duplicate
in case of overflow, free it now */
if ( CUR_Frame.address < (Byte*)CUR_Stream->map->base || CUR_Frame.address >= (Byte*)CUR_Stream->map->base + CUR_Stream->map->size ) FREE( CUR_Frame.address ); ZERO_Frame( CUR_Frame
);
return TT_Err_Ok;
} solved the problem.
The following function also caused a crash in
our test application:
/*******************************************************************
* * Function : TT_Use_Stream * * Description : Copies or duplicates a given stream. * * Input : org_stream original stream * stream target stream (copy or duplicate) * * Output : Error code. The output stream is set to NULL in * case of Failure. * ******************************************************************/ EXPORT_FUNC
TT_Error TT_Use_Stream( TT_Stream input_stream, TT_Stream* copy ) { TT_Error error; PStream_Rec stream_rec; PStream_Rec copy_rec; stream_rec = STREAM2REC(
input_stream );
if ( ALLOC( copy_rec, sizeof (
TStream_Rec ) ) )
goto Fail; //AMYUNI: copy the
object !!!
MEM_Copy( copy_rec, stream_rec, sizeof( TT_Stream ) ); HANDLE_Set( *copy, copy_rec );
copy_rec->map->refcount++;
copy_rec->pos = 0; return TT_Err_Ok;
Fail:
HANDLE_Set( *copy, NULL ); return error; } The stream object does not seem to be copied
correctly in your implementation.
Please let me know if you find any drawbacks for
the above modifications.
Thanks again,
Dany Amiouny
AMYUNI Consultants
|
[Prev in Thread] | Current Thread | [Next in Thread] |