Beispiel #1
0
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);
        }
    }
}
Beispiel #2
0
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];
    }
}