1
1

correct byte order conversions for size_t == 8 bytes

This commit was SVN r6577.
Этот коммит содержится в:
Tim Woodall 2005-07-21 17:45:09 +00:00
родитель a4497238ad
Коммит 7010548c1b

Просмотреть файл

@ -59,15 +59,65 @@ int mca_oob_tcp_init(void);
*/
int mca_oob_tcp_fini(void);
#if SIZEOF_SIZE_T == 8
/*
* Convert a 64 bit value to network byte order.
*/
static inline uint64_t hton64(uint64_t val)
{
union { uint64_t ll;
uint32_t l[2];
} w, r;
/* platform already in network byte order? */
if(htonl(1) == 1L)
return val;
w.ll = val;
r.l[0] = htonl(w.l[1]);
r.l[1] = htonl(w.l[0]);
return r.ll;
}
/*
* Convert a 64 bit value from network to host byte order.
*/
static inline uint64_t ntoh64(uint64_t val)
{
union { uint64_t ll;
uint32_t l[2];
} w, r;
/* platform already in network byte order? */
if(htonl(1) == 1L)
return val;
w.ll = val;
r.l[0] = ntohl(w.l[1]);
r.l[1] = ntohl(w.l[0]);
return r.ll;
}
/**
* Convert process name from host to network byte order.
*
* @param name
*/
#define OMPI_PROCESS_NAME_HTON(n) \
n.cellid = hton64(n.cellid); \
n.jobid = hton64(n.jobid); \
n.vpid = hton64(n.vpid);
/**
* Convert process name from network to host byte order.
*
* @param name
*/
#define OMPI_PROCESS_NAME_NTOH(n) \
n.cellid = ntohl(n.cellid); \
n.jobid = ntohl(n.jobid); \
n.vpid = ntohl(n.vpid);
n.cellid = ntoh64(n.cellid); \
n.jobid = ntoh64(n.jobid); \
n.vpid = ntoh64(n.vpid);
#else
/**
* Convert process name from host to network byte order.
@ -79,6 +129,16 @@ int mca_oob_tcp_fini(void);
n.jobid = htonl(n.jobid); \
n.vpid = htonl(n.vpid);
/**
* Convert process name from network to host byte order.
*
* @param name
*/
#define OMPI_PROCESS_NAME_HTON(n) \
n.cellid = ntohl(n.cellid); \
n.jobid = ntohl(n.jobid); \
n.vpid = ntohl(n.vpid);
#endif
/**
* Compare two process names for equality.