Commit 9df610bb authored by Birte Kristina Friesel's avatar Birte Kristina Friesel
Browse files

XDR: Use unions instead of casts for float/double<->int conversion

parent bb1c3523
Loading
Loading
Loading
Loading
+12 −4
Original line number Diff line number Diff line
@@ -37,14 +37,22 @@ int64_t XDRInput::get_int64()

float XDRInput::get_float()
{
	uint32_t val = get_uint32();
	return *(float*)&val;
	union {
		uint32_t i;
		float f;
	} v;
	v.i = get_uint32();
	return v.f;
}

double XDRInput::get_double()
{
	uint64_t val = get_uint64();
	return *(double*)&val;
	union {
		uint64_t i;
		double d;
	} v;
	v.i = get_uint64();
	return v.d;
}

uint32_t XDRInput::get_opaque_length()
+12 −2
Original line number Diff line number Diff line
@@ -70,13 +70,23 @@ XDRStream & XDRStream::operator<<(int64_t number)

XDRStream & XDRStream::operator<<(float number)
{
	*this << *(uint32_t*)&number;
	union {
		uint32_t i;
		float f;
	} v;
	v.f = number;
	*this << v.i;
	return *this;
}

XDRStream & XDRStream::operator<<(double number)
{
	*this << *(uint64_t*)&number;
	union {
		uint64_t i;
		double d;
	} v;
	v.d = number;
	*this << v.i;
	return *this;
}