[base] Clean up stream reading.

* src/base/ftstream.c (FT_Stream_ReadUShort, FT_Stream_ReadUOffset,
FT_Stream_ReadULong and their LE variants): Remove unnecessary
initialization and slightly refactor.
(FT_Stream_GetByte, FT_Stream_ReadByte): Rename to return unsigned
value and align with sister functions.

* include/freetype/internal/ftstream.h (FT_Stream_GetByte,
FT_Stream_ReadByte): Update prototypes and caller macros.
This commit is contained in:
Alexei Podtelezhnikov 2021-09-01 22:18:29 -04:00
parent 612925ff22
commit 7482c98f15
2 changed files with 49 additions and 48 deletions

View File

@ -305,8 +305,8 @@ FT_BEGIN_HEADER
#else
#define FT_GET_MACRO( func, type ) ( (type)func( stream ) )
#define FT_GET_CHAR() FT_GET_MACRO( FT_Stream_GetChar, FT_Char )
#define FT_GET_BYTE() FT_GET_MACRO( FT_Stream_GetChar, FT_Byte )
#define FT_GET_CHAR() FT_GET_MACRO( FT_Stream_GetByte, FT_Char )
#define FT_GET_BYTE() FT_GET_MACRO( FT_Stream_GetByte, FT_Byte )
#define FT_GET_SHORT() FT_GET_MACRO( FT_Stream_GetUShort, FT_Short )
#define FT_GET_USHORT() FT_GET_MACRO( FT_Stream_GetUShort, FT_UShort )
#define FT_GET_OFF3() FT_GET_MACRO( FT_Stream_GetUOffset, FT_Long )
@ -333,8 +333,8 @@ FT_BEGIN_HEADER
* `FT_STREAM_POS'. They use the full machinery to check whether a read is
* valid.
*/
#define FT_READ_BYTE( var ) FT_READ_MACRO( FT_Stream_ReadChar, FT_Byte, var )
#define FT_READ_CHAR( var ) FT_READ_MACRO( FT_Stream_ReadChar, FT_Char, var )
#define FT_READ_BYTE( var ) FT_READ_MACRO( FT_Stream_ReadByte, FT_Byte, var )
#define FT_READ_CHAR( var ) FT_READ_MACRO( FT_Stream_ReadByte, FT_Char, var )
#define FT_READ_SHORT( var ) FT_READ_MACRO( FT_Stream_ReadUShort, FT_Short, var )
#define FT_READ_USHORT( var ) FT_READ_MACRO( FT_Stream_ReadUShort, FT_UShort, var )
#define FT_READ_OFF3( var ) FT_READ_MACRO( FT_Stream_ReadUOffset, FT_Long, var )
@ -457,8 +457,8 @@ FT_BEGIN_HEADER
/* read a byte from an entered frame */
FT_BASE( FT_Char )
FT_Stream_GetChar( FT_Stream stream );
FT_BASE( FT_Byte )
FT_Stream_GetByte( FT_Stream stream );
/* read a 16-bit big-endian unsigned integer from an entered frame */
FT_BASE( FT_UShort )
@ -482,8 +482,8 @@ FT_BEGIN_HEADER
/* read a byte from a stream */
FT_BASE( FT_Char )
FT_Stream_ReadChar( FT_Stream stream,
FT_BASE( FT_Byte )
FT_Stream_ReadByte( FT_Stream stream,
FT_Error* error );
/* read a 16-bit big-endian unsigned integer from a stream */

View File

@ -347,17 +347,17 @@
}
FT_BASE_DEF( FT_Char )
FT_Stream_GetChar( FT_Stream stream )
FT_BASE_DEF( FT_Byte )
FT_Stream_GetByte( FT_Stream stream )
{
FT_Char result;
FT_Byte result;
FT_ASSERT( stream && stream->cursor );
result = 0;
if ( stream->cursor < stream->limit )
result = (FT_Char)*stream->cursor++;
result = *stream->cursor++;
return result;
}
@ -455,8 +455,8 @@
}
FT_BASE_DEF( FT_Char )
FT_Stream_ReadChar( FT_Stream stream,
FT_BASE_DEF( FT_Byte )
FT_Stream_ReadByte( FT_Stream stream,
FT_Error* error )
{
FT_Byte result = 0;
@ -464,31 +464,32 @@
FT_ASSERT( stream );
*error = FT_Err_Ok;
if ( stream->read )
if ( stream->pos < stream->size )
{
if ( stream->read( stream, stream->pos, &result, 1L ) != 1L )
goto Fail;
if ( stream->read )
{
if ( stream->read( stream, stream->pos, &result, 1L ) != 1L )
goto Fail;
}
else
result = stream->base[stream->pos];
}
else
{
if ( stream->pos < stream->size )
result = stream->base[stream->pos];
else
goto Fail;
}
goto Fail;
stream->pos++;
return (FT_Char)result;
*error = FT_Err_Ok;
return result;
Fail:
*error = FT_THROW( Invalid_Stream_Operation );
FT_ERROR(( "FT_Stream_ReadChar:"
FT_ERROR(( "FT_Stream_ReadByte:"
" invalid i/o; pos = 0x%lx, size = 0x%lx\n",
stream->pos, stream->size ));
return 0;
return result;
}
@ -497,14 +498,12 @@
FT_Error* error )
{
FT_Byte reads[2];
FT_Byte* p = 0;
FT_Byte* p;
FT_UShort result = 0;
FT_ASSERT( stream );
*error = FT_Err_Ok;
if ( stream->pos + 1 < stream->size )
{
if ( stream->read )
@ -525,6 +524,8 @@
stream->pos += 2;
*error = FT_Err_Ok;
return result;
Fail:
@ -533,7 +534,7 @@
" invalid i/o; pos = 0x%lx, size = 0x%lx\n",
stream->pos, stream->size ));
return 0;
return result;
}
@ -542,14 +543,12 @@
FT_Error* error )
{
FT_Byte reads[2];
FT_Byte* p = 0;
FT_Byte* p;
FT_UShort result = 0;
FT_ASSERT( stream );
*error = FT_Err_Ok;
if ( stream->pos + 1 < stream->size )
{
if ( stream->read )
@ -570,6 +569,8 @@
stream->pos += 2;
*error = FT_Err_Ok;
return result;
Fail:
@ -578,7 +579,7 @@
" invalid i/o; pos = 0x%lx, size = 0x%lx\n",
stream->pos, stream->size ));
return 0;
return result;
}
@ -587,14 +588,12 @@
FT_Error* error )
{
FT_Byte reads[3];
FT_Byte* p = 0;
FT_Byte* p;
FT_ULong result = 0;
FT_ASSERT( stream );
*error = FT_Err_Ok;
if ( stream->pos + 2 < stream->size )
{
if ( stream->read )
@ -615,6 +614,8 @@
stream->pos += 3;
*error = FT_Err_Ok;
return result;
Fail:
@ -623,7 +624,7 @@
" invalid i/o; pos = 0x%lx, size = 0x%lx\n",
stream->pos, stream->size ));
return 0;
return result;
}
@ -632,14 +633,12 @@
FT_Error* error )
{
FT_Byte reads[4];
FT_Byte* p = 0;
FT_Byte* p;
FT_ULong result = 0;
FT_ASSERT( stream );
*error = FT_Err_Ok;
if ( stream->pos + 3 < stream->size )
{
if ( stream->read )
@ -660,6 +659,8 @@
stream->pos += 4;
*error = FT_Err_Ok;
return result;
Fail:
@ -668,7 +669,7 @@
" invalid i/o; pos = 0x%lx, size = 0x%lx\n",
stream->pos, stream->size ));
return 0;
return result;
}
@ -677,14 +678,12 @@
FT_Error* error )
{
FT_Byte reads[4];
FT_Byte* p = 0;
FT_Byte* p;
FT_ULong result = 0;
FT_ASSERT( stream );
*error = FT_Err_Ok;
if ( stream->pos + 3 < stream->size )
{
if ( stream->read )
@ -705,6 +704,8 @@
stream->pos += 4;
*error = FT_Err_Ok;
return result;
Fail:
@ -713,7 +714,7 @@
" invalid i/o; pos = 0x%lx, size = 0x%lx\n",
stream->pos, stream->size ));
return 0;
return result;
}