提交 3ded6fd5 编写于 作者: T Thomas G. Lockhart

Fix code to do the right thing with mixed-endian clients and servers.

上级 bf3bcb6a
...@@ -10,10 +10,11 @@ ...@@ -10,10 +10,11 @@
/* --------------------------------------------------------------------- */ /* --------------------------------------------------------------------- */
/* Is the other way around than system ntoh/hton, so we roll our own /* These definitions for ntoh/hton are the other way around from the
here */ * default system definitions, so we roll our own here.
*/
#ifndef BYTE_ORDER
#ifndef BYTE_ORDER
#error BYTE_ORDER must be defined as LITTLE_ENDIAN, BIG_ENDIAN or PDP_ENDIAN #error BYTE_ORDER must be defined as LITTLE_ENDIAN, BIG_ENDIAN or PDP_ENDIAN
#endif #endif
...@@ -24,11 +25,13 @@ ...@@ -24,11 +25,13 @@
# define hton_l(n) n # define hton_l(n) n
#else /* BYTE_ORDER != LITTLE_ENDIAN */ #else /* BYTE_ORDER != LITTLE_ENDIAN */
# if BYTE_ORDER == BIG_ENDIAN # if BYTE_ORDER == BIG_ENDIAN
# define ntoh_s(n) (u_short)(((u_char *) &n)[0] << 8 | ((u_char *) &n)[1]) # define ntoh_s(n) (u_short)(((u_char *)&n)[1] << 8 \
# define ntoh_l(n) (u_long)(((u_char *)&n)[0] << 24 | \ | ((u_char *)&n)[0])
((u_char *)&n)[1] << 16 | \ # define ntoh_l(n) (u_long) (((u_char *)&n)[3] << 24 \
((u_char *)&n)[2] << 8 | ((u_char *)&n)[3]) | ((u_char *)&n)[2] << 16 \
# define hton_s(n) (u_short)(((u_char *) &n)[2] << 8 | ((u_char *) &n)[3]) | ((u_char *)&n)[1] << 8 \
| ((u_char *)&n)[0])
# define hton_s(n) (ntoh_s(n))
# define hton_l(n) (ntoh_l(n)) # define hton_l(n) (ntoh_l(n))
# else /* BYTE_ORDER != BIG_ENDIAN */ # else /* BYTE_ORDER != BIG_ENDIAN */
# if BYTE_ORDER == PDP_ENDIAN # if BYTE_ORDER == PDP_ENDIAN
...@@ -43,9 +46,10 @@ ...@@ -43,9 +46,10 @@
int pqPutShort(int integer, FILE *f) int pqPutShort(int integer, FILE *f)
{ {
int retval = 0; int retval = 0;
u_short n; u_short n,s;
n = hton_s(integer); s = integer;
n = hton_s(s);
if(fwrite(&n, sizeof(u_short), 1, f) != 1) if(fwrite(&n, sizeof(u_short), 1, f) != 1)
retval = EOF; retval = EOF;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册