marshall.h
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:3k
- /* -*- c++ -*-
- marshall.h
- $Id: marshall.h,v 1.4 1999/04/30 00:59:43 haldar Exp $
- safely marshall and unmarshall 2 and 4 byte quantities into
- possibly unaligned feilds
- NOTE: unlike the normal version of marshall, we marshall the bytes
- in *HOST*BYTE*ORDER* and *not* network byte order. we do this since
- all the other quanities in the packets will be in host byte order, and
- we want consistency.
- */
- #ifndef _cmu_marshall_h_
- #define _cmu_marshall_h_
- /*#ifdef sparc */
- /*#define GET4BYTE(x) ( (*(((unsigned char *)(x)) ) << 24)
- | (*(((unsigned char *)(x))+1) << 16)
- | (*(((unsigned char *)(x))+2) << 8)
- | (*(((unsigned char *)(x))+3) ))
- */
- /* #define GET2BYTE(x) ( (*(((unsigned char *)(x)) ) << 8)
- | (*(((unsigned char *)(x))+1) ))
- */
- /* let x,y be ptrs to ints, copy *x into *y */
- /* #define STORE4BYTE(x,y) (((unsigned char *)y)[0] = ((unsigned char *)x)[0] ,
- ((unsigned char *)y)[1] = ((unsigned char *)x)[1] ,
- ((unsigned char *)y)[2] = ((unsigned char *)x)[2] ,
- ((unsigned char *)y)[3] = ((unsigned char *)x)[3] )
- */
- /* #define STORE2BYTE(x,y) (((unsigned char *)y)[0] = ((unsigned char *)x)[0] ,
- ((unsigned char *)y)[1] = ((unsigned char *)x)[1] )
- */
- /*#else
-
- #include <sys/types.h>
-
- #define GET4BYTE(x) *((u_int32_t*) (x))
-
- #define GET2BYTE(x) *((u_int16_t*) (x)) */
-
- /* let x,y be ptrs to ints, copy *x into *y */
- /*#define STORE4BYTE(x,y) (*((u_int32_t*) (x)) = *y)
-
- #define STORE2BYTE(x,y) (*((u_int16_t*) (x)) = *y)
-
- #endif */
- /* changing STORE4BYTE and STORE2BYTE functions as they break in
- freeBSD; the old cmu version of STORE4BYTE used arrays to set the
- value:
- #define STORE4BYTE(x,y) (((unsigned char *)y)[0] = ((unsigned char *)x)[0] ,
- ((unsigned char *)y)[1] = ((unsigned char *)x)[1] ,
- ((unsigned char *)y)[2] = ((unsigned char *)x)[2] ,
- ((unsigned char *)y)[3] = ((unsigned char *)x)[3] )
- which doesn;t work on freeBSD (with gcc version 2.7.2.1).
- the newer versions are tested to work in sunos/solaris/freeBSD
- --Padma, 04/99 */
- #define STORE4BYTE(x,y) ((*((unsigned char *)y)) = ((*x) >> 24) & 255 ,
- (*((unsigned char *)y+1)) = ((*x) >> 16) & 255 ,
- (*((unsigned char *)y+2)) = ((*x) >> 8) & 255 ,
- (*((unsigned char *)y+3)) = (*x) & 255 )
-
- #define STORE2BYTE(x,y) ((*((unsigned char *)y)) = ((*x) >> 8) & 255 ,
- (*((unsigned char *)y+1)) = (*x) & 255 )
-
- #define GET2BYTE(x) (((*(unsigned char *)(x)) << 8) |
- (*(((unsigned char *)(x))+1)))
-
- #define GET4BYTE(x) (((*(unsigned char *)(x)) << 24) |
- (*(((unsigned char *)(x))+1) << 16) |
- (*(((unsigned char *)(x))+2) << 8) |
- (*(((unsigned char *)(x))+3)))
-
- #endif /* _cmu_marshall_h_ */