[HB] Fix more casts

This commit is contained in:
Behdad Esfahbod 2009-08-19 18:16:50 -04:00
parent 9d2e02db74
commit 8b53461304

View File

@ -65,7 +65,7 @@ template <typename Type>
struct Null struct Null
{ {
ASSERT_STATIC (sizeof (Type) <= sizeof (NullPool)); ASSERT_STATIC (sizeof (Type) <= sizeof (NullPool));
static inline const Type &get () { return *(const Type*)NullPool; } static inline const Type &get () { return CONST_CAST (Type, *NullPool, 0); }
}; };
/* Specializaiton for arbitrary-content arbitrary-sized Null objects. */ /* Specializaiton for arbitrary-content arbitrary-sized Null objects. */
@ -74,7 +74,7 @@ static const char _Null##Type[size] = data; \
template <> \ template <> \
struct Null <Type> \ struct Null <Type> \
{ \ { \
static inline const Type &get () { return *(const Type*)_Null##Type; } \ static inline const Type &get () { return CONST_CAST (Type, *_Null##Type, 0); } \
} }
/* Accessor macro. */ /* Accessor macro. */
@ -92,14 +92,14 @@ struct Null <Type> \
static inline const Type& get_for_data (const char *data) \ static inline const Type& get_for_data (const char *data) \
{ \ { \
if (HB_UNLIKELY (data == NULL)) return Null(Type); \ if (HB_UNLIKELY (data == NULL)) return Null(Type); \
return *(const Type*)data; \ return CONST_CAST (Type, *data, 0); \
} }
/* Like get_for_data(), but checks major version first. */ /* Like get_for_data(), but checks major version first. */
#define STATIC_DEFINE_GET_FOR_DATA_CHECK_MAJOR_VERSION(Type, MajorMin, MajorMax) \ #define STATIC_DEFINE_GET_FOR_DATA_CHECK_MAJOR_VERSION(Type, MajorMin, MajorMax) \
static inline const Type& get_for_data (const char *data) \ static inline const Type& get_for_data (const char *data) \
{ \ { \
if (HB_UNLIKELY (data == NULL)) return Null(Type); \ if (HB_UNLIKELY (data == NULL)) return Null(Type); \
const Type& t = *(const Type*)data; \ const Type& t = CONST_CAST (Type, *data, 0); \
if (HB_UNLIKELY (t.version.major < MajorMin || t.version.major > MajorMax)) return Null(Type); \ if (HB_UNLIKELY (t.version.major < MajorMin || t.version.major > MajorMax)) return Null(Type); \
return t; \ return t; \
} }
@ -283,7 +283,7 @@ struct Sanitizer
fprintf (stderr, "Sanitizer %p passed first round with %d edits; going a second round %s\n", fprintf (stderr, "Sanitizer %p passed first round with %d edits; going a second round %s\n",
blob, context.edit_count, __PRETTY_FUNCTION__); blob, context.edit_count, __PRETTY_FUNCTION__);
#endif #endif
/* sanitize again to ensure not toe-stepping */ /* sanitize again to ensure no toe-stepping */
context.edit_count = 0; context.edit_count = 0;
sane = t->sanitize (SANITIZE_ARG_INIT); sane = t->sanitize (SANITIZE_ARG_INIT);
if (context.edit_count) { if (context.edit_count) {