diff --git a/libmpdemux/ebml.c b/libmpdemux/ebml.c index 56664a2ded..952a3894a5 100644 --- a/libmpdemux/ebml.c +++ b/libmpdemux/ebml.c @@ -175,30 +175,26 @@ ebml_read_float (stream_t *s, uint64_t *length) { case 4: { - uint32_t i; - float *f; - i = stream_read_dword (s); - f = (float *) (void *) &i; - value = *f; + union {uint32_t i; float f;} u; + u.i = stream_read_dword (s); + value = u.f; break; } case 8: { - uint64_t i; - double *d; - i = stream_read_qword (s); - d = (double *) (void *) &i; - value = *d; + union {uint64_t i; double d;} u; + u.i = stream_read_qword (s); + value = u.d; break; } case 10: { - uint8_t data[10]; - if (stream_read (s, data, 10) != 10) + union {uint8_t data[10]; long double ld;} u; + if (stream_read (s, u.data, 10) != 10) return EBML_FLOAT_INVALID; - value = * (long double *) data; + value = u.ld; break; }