summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--encode.c6
-rw-r--r--encode_test.c3
2 files changed, 7 insertions, 2 deletions
diff --git a/encode.c b/encode.c
index 687dbfe..acf24b7 100644
--- a/encode.c
+++ b/encode.c
@@ -80,7 +80,11 @@ int gob_encode_boolean(char *buf, size_t buf_size, int b) {
}
int gob_encode_double(char *buf, size_t buf_size, double d) {
- return gob_encode_unsigned_long_long(buf, buf_size, flip_unsigned_long_long(*(unsigned long long*)&d));
+ unsigned long long ull = 0;
+ memcpy((char*)&ull, &d, sizeof(double));
+ unsigned long long rev_ull = flip_unsigned_long_long(ull);
+
+ return gob_encode_unsigned_long_long(buf, buf_size, rev_ull);
}
int gob_encode_string(char *buf, size_t buf_size, const char *s) {
diff --git a/encode_test.c b/encode_test.c
index 6b70a81..dea53d7 100644
--- a/encode_test.c
+++ b/encode_test.c
@@ -74,7 +74,8 @@ void test_flip_unsigned_long_long(){
void test_gob_encode_double() {
char buf[1024];
- int num_bytes = gob_encode_double(buf, 1024, 17.0);
+ double doubleval = 17;
+ int num_bytes = gob_encode_double(buf, 1024, doubleval);
CU_ASSERT_EQUAL(3, num_bytes);
CU_ASSERT_EQUAL((char)0xFE, buf[0]);
CU_ASSERT_EQUAL((char)0x31, buf[1]);