Mercurial > pidgin
diff libpurple/protocols/msn/directconn.c @ 30120:ef7303c25751
For some reason, this line creates the following warning:
directconn.c:67: warning: dereferencing type-punned pointer will break strict-aliasing rules
I don't understand why it only happens for this line, and not the ones
after it. At least this change stops the warning. If anyone knows how to
properly fix it, or whether it's a bug in GCC or something, please let
me know.
author | Elliott Sales de Andrade <qulogic@pidgin.im> |
---|---|
date | Fri, 28 May 2010 21:26:57 +0000 |
parents | 7f564cf26ea3 |
children | f7e1d5d397b6 |
line wrap: on
line diff
--- a/libpurple/protocols/msn/directconn.c Fri May 28 20:51:29 2010 +0000 +++ b/libpurple/protocols/msn/directconn.c Fri May 28 21:26:57 2010 +0000 @@ -50,6 +50,7 @@ msn_dc_calculate_nonce_hash(MsnDirectConnNonceType type, const guchar nonce[16], gchar nonce_hash[37]) { + guint32 *tmp; guchar digest[20]; if (type == DC_NONCE_SHA1) { @@ -62,9 +63,13 @@ memcpy(digest, nonce, 16); } + /* TODO: Somebody please tell me why this first one causes a warning, + but the others don't! */ + tmp = (guint32 *)&digest[0]; + g_sprintf(nonce_hash, "%08X-%04X-%04X-%04X-%08X%04X", - GUINT32_FROM_LE(*((guint32 *)(digest + 0))), + GUINT32_FROM_LE(*tmp), GUINT16_FROM_LE(*((guint16 *)(digest + 4))), GUINT16_FROM_LE(*((guint16 *)(digest + 6))), GUINT16_FROM_BE(*((guint16 *)(digest + 8))),