From bfd8f297e6af00841d93e807e3e33e5a6e6e226e Mon Sep 17 00:00:00 2001
From: Daniel Friesel <daniel.friesel@uos.de>
Date: Fri, 28 Jun 2019 07:46:40 +0200
Subject: [PATCH] XDR: Add notes about undefined behaviour

---
 src/os/object/xdrinput.cc  | 4 ++++
 src/os/object/xdrstream.cc | 4 ++++
 2 files changed, 8 insertions(+)

diff --git a/src/os/object/xdrinput.cc b/src/os/object/xdrinput.cc
index 612244e..e722fdd 100644
--- a/src/os/object/xdrinput.cc
+++ b/src/os/object/xdrinput.cc
@@ -41,6 +41,8 @@ float XDRInput::get_float()
 		uint32_t i;
 		float f;
 	} v;
+	// Setting one member of a struct and then reading another is undefined
+	// behaviour, but works as intended in nearly any (embedded) compiler
 	v.i = get_uint32();
 	return v.f;
 }
@@ -51,6 +53,8 @@ double XDRInput::get_double()
 		uint64_t i;
 		double d;
 	} v;
+	// Setting one member of a struct and then reading another is undefined
+	// behaviour, but works as intended in nearly any (embedded) compiler
 	v.i = get_uint64();
 	return v.d;
 }
diff --git a/src/os/object/xdrstream.cc b/src/os/object/xdrstream.cc
index ad708be..f0c9365 100644
--- a/src/os/object/xdrstream.cc
+++ b/src/os/object/xdrstream.cc
@@ -74,6 +74,8 @@ XDRStream & XDRStream::operator<<(float number)
 		uint32_t i;
 		float f;
 	} v;
+	// Setting one member of a struct and then reading another is undefined
+	// behaviour, but works as intended in nearly any (embedded) compiler
 	v.f = number;
 	*this << v.i;
 	return *this;
@@ -85,6 +87,8 @@ XDRStream & XDRStream::operator<<(double number)
 		uint64_t i;
 		double d;
 	} v;
+	// Setting one member of a struct and then reading another is undefined
+	// behaviour, but works as intended in nearly any (embedded) compiler
 	v.d = number;
 	*this << v.i;
 	return *this;
-- 
GitLab