Re: Endian portability #defines in GLIB
- From: Tim Janik <timj gtk org>
- To: Manish Singh <yosh gimp org>
- cc: Gtk+ Developers <gtk-devel-list redhat com>
- Subject: Re: Endian portability #defines in GLIB
- Date: Mon, 19 Oct 1998 18:15:10 +0200 (CEST)
On Sun, 18 Oct 1998, Manish Singh wrote:
> This was a feature requested by someone on irc, and I think it's good idea.
> 
> Simply put:
> 
> #ifdef WORDS_BIGENDIAN
> #define G_BIG_ENDIAN
> #else
> #define G_LITTLE_ENDIAN
> #endif
> 
> in glib.h. WORDS_BIGENDIAN is derived from the built-in autoconf test.
> 
> Just a small, simple addition to enhance glib as a portability lib.
this should probably go along with some conversion macros, i.e.
seomthing like (from bytesex.h, endian.h and byteorder.h)
#define G_LITTLE_ENDIAN 1234
#define G_BIG_ENDIAN    4321
#define G_PDP_ENDIAN    3412
#if defined(__i386__) || defined(__alpha__) \
        || (defined(__mips__) && (defined(MIPSEL) || defined (__MIPSEL__)))
# define G_BYTE_ORDER   1234
#elif defined(__mc68000__) || defined (__sparc__) || defined (__PPC__) \
        || (defined(__mips__) && (defined(MIPSEB) || defined (__MIPSEB__)))
# define G_BYTE_ORDER   4321
#else /* need some PDP specific defines */
# error architecture not supported by GLib
#endif
#define	GULONG_SWAP_LE_BE(long_val)	(((gulong) \
    (((gulong) (long_val)) & 0x000000ffU) << 24) | \
    (((gulong) (long_val)) & 0x0000ff00U) <<  8) | \
    (((gulong) (long_val)) & 0x00ff0000U) >>  8) | \
    (((gulong) (long_val)) & 0xff000000U) >> 24)))
#define	GULONG_SWAP_LE_PDP(long_val)	(((gulong) \
    (((gulong) (long_val)) & 0x0000ffffU) << 16) | \
    (((gulong) (long_val)) & 0xffff0000U) >> 16)))
#define	GULONG_SWAP_BE_PDP(long_val)	(((gulong) \
    (((gulong) (long_val)) & 0x000000ffU) << 8) | \
    (((gulong) (long_val)) & 0x0000ff00U) >> 8) | \
    (((gulong) (long_val)) & 0x00ff0000U) << 8) | \
    (((gulong) (long_val)) & 0xff000000U) >> 8)))
#if	G_BYTE_ORDER == G_LITTLE_ENDIAN
#  define GLONG_TO_LE(long_val) 	((glong) (long_val))
#  define GULONG_TO_LE(long_val) 	((gulong) (long_val))
#  define GLONG_TO_BE(long_val) 	((glong) GULONG_SWAP_LE_BE (long_val))
#  define GULONG_TO_BE(long_val) 	(GULONG_SWAP_LE_BE (long_val))
#  define GLONG_FROM_LE(long_val) 	((glong) (long_val))
#  define GULONG_FROM_LE(long_val) 	((gulong) (long_val))
#  define GLONG_FROM_BE(long_val) 	((glong) GULONG_SWAP_LE_BE (long_val))
#  define GULONG_FROM_BE(long_val) 	(GULONG_SWAP_LE_BE (long_val))
#elif	G_BYTE_ORDER == G_BIG_ENDIAN
#  define GLONG_TO_LE(long_val) 	((glong) GULONG_SWAP_LE_BE (long_val))
#  define GULONG_TO_LE(long_val) 	(GULONG_SWAP_LE_BE (long_val))
#  define GLONG_TO_BE(long_val) 	((glong) (long_val))
#  define GULONG_TO_BE(long_val) 	((gulong) (long_val))
#  define GLONG_FROM_LE(long_val) 	((glong) GULONG_SWAP_LE_BE (long_val))
#  define GULONG_FROM_LE(long_val) 	(GULONG_SWAP_LE_BE (long_val))
#  define GLONG_FROM_BE(long_val) 	((glong) (long_val))
#  define GULONG_FROM_BE(long_val) 	((gulong) (long_val))
#else
/* PDP stuff */
#endif
> 
> -Yosh
> 
---
ciaoTJ
[
Date Prev][
Date Next]   [
Thread Prev][
Thread Next]   
[
Thread Index]
[
Date Index]
[
Author Index]