Changeset 12157


Ignore:
Timestamp:
Mar 13, 2011, 8:23:23 PM (11 years ago)
Author:
jordan
Message:

(trunk libT) better implementation of tr_htonll() and tr_ntohll()

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/libtransmission/utils.c

    r12148 r12157  
    16541654
    16551655uint64_t
    1656 tr_ntohll( uint64_t v )
     1656tr_htonll( uint64_t x )
     1657{
     1658#ifdef HAVE_HTONLL
     1659    return htonll( x );
     1660#else
     1661    return (((uint64_t)(htonl((int)((x << 32) >> 32))) << 32) |
     1662                     (unsigned int)htonl(((int)(x >> 32))));
     1663#endif
     1664}
     1665
     1666uint64_t
     1667tr_ntohll( uint64_t x )
    16571668{
    16581669#ifdef HAVE_NTOHLL
    1659     return ntohll( v );
     1670    return ntohll( x );
    16601671#else
    1661     union { unsigned long lv[2]; unsigned long long llv; } u;
    1662     u.lv[0] = ntohl(v >> 32);
    1663     u.lv[1] = ntohl(v & 0xFFFFFFFFULL);
    1664     return u.llv;
    1665 #endif
    1666 }
    1667 
    1668 uint64_t
    1669 tr_htonll( uint64_t v )
    1670 {
    1671 #ifdef HAVE_HTONLL
    1672     return htonll( v );
    1673 #else
    1674     union { unsigned long lv[2]; unsigned long long llv; } u;
    1675     u.lv[0] = htonl(v >> 32);
    1676     u.lv[1] = htonl(v & 0xFFFFFFFFULL);
    1677     return u.llv;
     1672    return (((uint64_t)(ntohl((int)((x << 32) >> 32))) << 32) |
     1673                     (unsigned int)ntohl(((int)(x >> 32))));
    16781674#endif
    16791675}
Note: See TracChangeset for help on using the changeset viewer.