static void formatPeerInfoInet6(const struct sockaddr_in6 * const sockaddrIn6P, socklen_t const sockaddrLen, const char ** const peerStringP) { if (sockaddrLen < sizeof(*sockaddrIn6P)) xmlrpc_asprintf(peerStringP, "??? getpeername() returned " "the wrong size"); else { /* Gcc on Debian 6 gives a bewildering error message about aliasing if we try to dereference sockaddrIn6P in various ways, regardless of casts to void * or anything else. So we copy the data structure as raw memory contents and then access the copy. 12.02.05. */ struct sockaddr_in6 sockaddr; MEMSCPY(&sockaddr, sockaddrIn6P); { char buffer[256]; const char * rc; rc = inet_ntop(AF_INET6, &sockaddr.sin6_addr, buffer, sizeof(buffer)); /* Punt the supposedly impossible error */ if (rc == NULL) STRSCPY(buffer, "???"); xmlrpc_asprintf(peerStringP, "[%s]:%hu", buffer, sockaddr.sin6_port); } } }
static void floatToPfmSample(float const input, pfmSample * outputP, enum endian const pfmEndianness) { /*---------------------------------------------------------------------------- Type converter -----------------------------------------------------------------------------*/ if (machineEndianness == pfmEndianness) { MEMSCPY(&outputP->bytes, &input); } else { unsigned char reversed[sizeof(pfmSample)]; unsigned int i, j; MEMSCPY(&reversed, &input); for (i = 0, j = sizeof(pfmSample)-1; i < sizeof(pfmSample); ++i, --j) outputP->bytes[i] = reversed[j]; } }