summaryrefslogtreecommitdiff
path: root/include/freetype/fttypes.h
diff options
context:
space:
mode:
authorWerner Lemberg <wl@gnu.org>2021-11-13 08:53:19 +0100
committerWerner Lemberg <wl@gnu.org>2021-11-18 19:28:07 +0000
commit9079c5d91aa87bcae223fc933b9c0ebf346b7d64 (patch)
treef9d6107a8a02d44c7c134c3b3fc8ef2e9987575c /include/freetype/fttypes.h
parent238245cd66e10025316463998a1fa20c15a065a8 (diff)
downloadfreetype2-9079c5d91aa87bcae223fc933b9c0ebf346b7d64.tar.gz
Provide C++ versions for public macros with casts.
Many FreeType clients use C++. However `g++ -Wold-style-cast` warns for macros with C-style casts even for system header files; this also affects directories included with `-isystem`. While this could be seen as a problem with g++, the problem is more a philosophical one: Over the time, C and C++ diverged more and more, and some features of C are no longer the 'right' solution in C++. * include/freetype/config/public-macros.h (FT_STATIC_CAST, FT_REINTERPRET_CAST): New macros. * include/freetype/freetype.h (FT_ENC_TAG, FT_LOAD_TARGET_, FT_LOAD_TARGET_MODE): Use `FT_STATIC_CAST`. Correctly handle negative 'signed char' input. * include/freetype/ftimage.h (FT_IMAGE_TAG): Ditto. * include/freetype/fttypes.h (FT_MAKE_TAG, FT_BOOL): Ditto. * include/freetype/ftmodapi.h (FT_FACE_DRIVER_NAME): Use `FT_REINTERPRET_CAST`. * src/smooth/ftgrays.c (FT_STATIC_CAST)[STANDALONE_]: New macro. [!STANDALONE]: Include `FT_CONFIG_CONFIG_H`. Fixes #1116.
Diffstat (limited to 'include/freetype/fttypes.h')
-rw-r--r--include/freetype/fttypes.h14
1 files changed, 7 insertions, 7 deletions
diff --git a/include/freetype/fttypes.h b/include/freetype/fttypes.h
index 37f73538d..3b233580f 100644
--- a/include/freetype/fttypes.h
+++ b/include/freetype/fttypes.h
@@ -485,12 +485,12 @@ FT_BEGIN_HEADER
* The produced values **must** be 32-bit integers. Don't redefine this
* macro.
*/
-#define FT_MAKE_TAG( _x1, _x2, _x3, _x4 ) \
- (FT_Tag) \
- ( ( (FT_ULong)_x1 << 24 ) | \
- ( (FT_ULong)_x2 << 16 ) | \
- ( (FT_ULong)_x3 << 8 ) | \
- (FT_ULong)_x4 )
+#define FT_MAKE_TAG( _x1, _x2, _x3, _x4 ) \
+ FT_STATIC_CAST( FT_Tag ) \
+ ( ( FT_STATIC_CAST( FT_Byte )( _x1 ) << 24 ) | \
+ ( FT_STATIC_CAST( FT_Byte )( _x2 ) << 16 ) | \
+ ( FT_STATIC_CAST( FT_Byte )( _x3 ) << 8 ) | \
+ FT_STATIC_CAST( FT_Byte )( _x4 ) )
/*************************************************************************/
@@ -588,7 +588,7 @@ FT_BEGIN_HEADER
#define FT_IS_EMPTY( list ) ( (list).head == 0 )
-#define FT_BOOL( x ) ( (FT_Bool)( (x) != 0 ) )
+#define FT_BOOL( x ) FT_STATIC_CAST( FT_Bool )( (x) != 0 )
/* concatenate C tokens */
#define FT_ERR_XCAT( x, y ) x ## y