* src/type1/t1driver.c (t1_ps_get_font_value): Clean up.

This handles negative values better, avoiding many casts.
This commit is contained in:
Werner Lemberg 2015-02-18 08:51:22 +01:00
parent d3240c56e5
commit 6a0ded7641
2 changed files with 21 additions and 14 deletions

View File

@ -1,3 +1,8 @@
2015-02-18 Werner Lemberg <wl@gnu.org>
* src/type1/t1driver.c (t1_ps_get_font_value): Clean up.
This handles negative values better, avoiding many casts.
2015-02-17 Werner Lemberg <wl@gnu.org>
[base] Fix Savannah bug #44284.

View File

@ -176,9 +176,11 @@
PS_Dict_Keys key,
FT_UInt idx,
void *value,
FT_Long value_len )
FT_Long value_len_ )
{
FT_Long retval = -1;
FT_ULong retval = 0; /* always >= 1 if valid */
FT_ULong value_len = value_len_ < 0 ? 0 : (FT_ULong)value_len_;
T1_Face t1face = (T1_Face)face;
T1_Font type1 = &t1face->type1;
@ -225,7 +227,7 @@
if ( idx < sizeof ( type1->font_bbox ) /
sizeof ( type1->font_bbox.xMin ) )
{
FT_Fixed val = 0;
FT_Fixed val = 0;
retval = sizeof ( val );
@ -258,7 +260,7 @@
break;
case PS_DICT_FONT_NAME:
retval = (FT_Long)( ft_strlen( type1->font_name ) + 1 );
retval = ft_strlen( type1->font_name ) + 1;
if ( value && value_len >= retval )
ft_memcpy( value, (void *)( type1->font_name ), retval );
break;
@ -278,7 +280,7 @@
case PS_DICT_CHAR_STRING_KEY:
if ( idx < (FT_UInt)type1->num_glyphs )
{
retval = (FT_Long)( ft_strlen( type1->glyph_names[idx] ) + 1 );
retval = ft_strlen( type1->glyph_names[idx] ) + 1;
if ( value && value_len >= retval )
{
ft_memcpy( value, (void *)( type1->glyph_names[idx] ), retval );
@ -290,7 +292,7 @@
case PS_DICT_CHAR_STRING:
if ( idx < (FT_UInt)type1->num_glyphs )
{
retval = (FT_Long)( type1->charstrings_len[idx] + 1 );
retval = type1->charstrings_len[idx] + 1;
if ( value && value_len >= retval )
{
ft_memcpy( value, (void *)( type1->charstrings[idx] ),
@ -310,7 +312,7 @@
if ( type1->encoding_type == T1_ENCODING_TYPE_ARRAY &&
idx < (FT_UInt)type1->encoding.num_chars )
{
retval = (FT_Long)( ft_strlen( type1->encoding.char_name[idx] ) + 1 );
retval = ft_strlen( type1->encoding.char_name[idx] ) + 1;
if ( value && value_len >= retval )
{
ft_memcpy( value, (void *)( type1->encoding.char_name[idx] ),
@ -329,7 +331,7 @@
case PS_DICT_SUBR:
if ( idx < (FT_UInt)type1->num_subrs )
{
retval = (FT_Long)( type1->subrs_len[idx] + 1 );
retval = type1->subrs_len[idx] + 1;
if ( value && value_len >= retval )
{
ft_memcpy( value, (void *)( type1->subrs[idx] ), retval - 1 );
@ -523,31 +525,31 @@
break;
case PS_DICT_VERSION:
retval = (FT_Long)( ft_strlen( type1->font_info.version ) + 1 );
retval = ft_strlen( type1->font_info.version ) + 1;
if ( value && value_len >= retval )
ft_memcpy( value, (void *)( type1->font_info.version ), retval );
break;
case PS_DICT_NOTICE:
retval = (FT_Long)( ft_strlen( type1->font_info.notice ) + 1 );
retval = ft_strlen( type1->font_info.notice ) + 1;
if ( value && value_len >= retval )
ft_memcpy( value, (void *)( type1->font_info.notice ), retval );
break;
case PS_DICT_FULL_NAME:
retval = (FT_Long)( ft_strlen( type1->font_info.full_name ) + 1 );
retval = ft_strlen( type1->font_info.full_name ) + 1;
if ( value && value_len >= retval )
ft_memcpy( value, (void *)( type1->font_info.full_name ), retval );
break;
case PS_DICT_FAMILY_NAME:
retval = (FT_Long)( ft_strlen( type1->font_info.family_name ) + 1 );
retval = ft_strlen( type1->font_info.family_name ) + 1;
if ( value && value_len >= retval )
ft_memcpy( value, (void *)( type1->font_info.family_name ), retval );
break;
case PS_DICT_WEIGHT:
retval = (FT_Long)( ft_strlen( type1->font_info.weight ) + 1 );
retval = ft_strlen( type1->font_info.weight ) + 1;
if ( value && value_len >= retval )
ft_memcpy( value, (void *)( type1->font_info.weight ), retval );
break;
@ -559,7 +561,7 @@
break;
}
return retval;
return retval == 0 ? -1 : (FT_Long)retval;
}