[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [ns] Installation problems with NS



shravan vallala wrote:

Yan Yu ([email protected])
posted this a while back, and it was sufficient to fix my copy of ns. 
I believe this goes in my-endian.cc
You'll also probably have a problem with the utils.cc, which can be
fixed by downloading the latest snapshot (I used 20000712 a while back)
and moving over just that file. You'll probably want to use b6 though as
otherwise it is stable.
 -Will


#include "my-endian.h"
/* rotates 2 bytes */
unsigned short swap2(u_2bytes In) {
        u_2bytes Out;
        ((char*)&(Out))[0] = ((char*)&(In))[1];
        ((char*)&(Out))[1] = ((char*)&(In))[0];
        return Out;
}
/* rotates 4 bytes */
u_4bytes rotate4(u_4bytes In) {
        u_4bytes Out;
        ((u_2bytes*)&Out)[0] = swap2(((u_2bytes*)&In)[1]);
        ((u_2bytes*)&Out)[1] = swap2(((u_2bytes*)&In)[0]);
        return Out;
}

/* detects endian-ness
 * Note:   will not work if sizeof(unsigned long)==1
 */

int IsLittleEndian(void) {
        static const unsigned long long_number = 1;
        return *(const unsigned char *)&long_number;
}

/* changes endian-ness */
void ToOtherEndian(TEntry *e) {
        /* unroll this loop if you want to enumerate u_4bytes members of
TEntry_v2 */
        u_4bytes *p;
        for (p = &(e -> head.event_duration); p <= &(e -> url); p++)
                *p = rotate4(*p);
        e -> tail.status = swap2(e -> tail.status);
        
        if (sizeof(method_t) == 2)
                e -> tail.method = (method_t) swap2(e -> tail.method);
        else
        if (sizeof(method_t) == 4)
                e -> tail.method = (method_t) rotate4(e -> tail.method);

        if (sizeof(protocol_t) == 2)
                e -> tail.protocol = (protocol_t) swap2(e ->
tail.protocol);
        else
        if (sizeof(protocol_t) == 4)
                e -> tail.protocol = (protocol_t) rotate4(e ->
tail.protocol);
}