diff options
author | Havoc Pennington <hp@redhat.com> | 2005-01-01 20:53:42 +0000 |
---|---|---|
committer | Havoc Pennington <hp@redhat.com> | 2005-01-01 20:53:42 +0000 |
commit | e07789e51163e4bf760b04fe48a28e15286b642b (patch) | |
tree | 73c2e2d86dbdffb8012ec5f6e24a6043bb92ce79 /dbus/dbus-sysdeps.h | |
parent | 60a9694974f84855bb41828e049b8390a933827f (diff) |
voc Pennington <hp@redhat.com>
* dbus/dbus-sysdeps.h: add _DBUS_DOUBLES_BITWISE_EQUAL macro,
for a variety of reasons '==' doesn't do this.
Diffstat (limited to 'dbus/dbus-sysdeps.h')
-rw-r--r-- | dbus/dbus-sysdeps.h | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/dbus/dbus-sysdeps.h b/dbus/dbus-sysdeps.h index 5227a697..b0f76e2a 100644 --- a/dbus/dbus-sysdeps.h +++ b/dbus/dbus-sysdeps.h @@ -329,6 +329,21 @@ dbus_bool_t _dbus_user_at_console (const char *username, # endif /* va_list is a pointer */ #endif /* !DBUS_VA_COPY */ +/* On x86 there is an 80-bit FPU, and if you do "a == b" it may have a + * or b in an 80-bit register, thus failing to compare the two 64-bit + * doubles for bitwise equality. + */ +#define _DBUS_BYTE_OF_PRIMITIVE(p, i) \ + (((const char*)&(p))[(i)]) +#define _DBUS_DOUBLES_BITWISE_EQUAL(a, b) \ + (_DBUS_BYTE_OF_PRIMITIVE (a, 0) == _DBUS_BYTE_OF_PRIMITIVE (b, 0) && \ + _DBUS_BYTE_OF_PRIMITIVE (a, 1) == _DBUS_BYTE_OF_PRIMITIVE (b, 1) && \ + _DBUS_BYTE_OF_PRIMITIVE (a, 2) == _DBUS_BYTE_OF_PRIMITIVE (b, 2) && \ + _DBUS_BYTE_OF_PRIMITIVE (a, 3) == _DBUS_BYTE_OF_PRIMITIVE (b, 3) && \ + _DBUS_BYTE_OF_PRIMITIVE (a, 4) == _DBUS_BYTE_OF_PRIMITIVE (b, 4) && \ + _DBUS_BYTE_OF_PRIMITIVE (a, 5) == _DBUS_BYTE_OF_PRIMITIVE (b, 5) && \ + _DBUS_BYTE_OF_PRIMITIVE (a, 6) == _DBUS_BYTE_OF_PRIMITIVE (b, 6) && \ + _DBUS_BYTE_OF_PRIMITIVE (a, 7) == _DBUS_BYTE_OF_PRIMITIVE (b, 7)) DBUS_END_DECLS |