Blame src/microhttpd/mhd_byteorder.h

Packit 875988
/*
Packit 875988
  This file is part of libmicrohttpd
Packit 875988
  Copyright (C) 2015 Karlson2k (Evgeny Grin)
Packit 875988
Packit 875988
  This library is free software; you can redistribute it and/or
Packit 875988
  modify it under the terms of the GNU Lesser General Public
Packit 875988
  License as published by the Free Software Foundation; either
Packit 875988
  version 2.1 of the License, or (at your option) any later version.
Packit 875988
Packit 875988
  This library is distributed in the hope that it will be useful,
Packit 875988
  but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 875988
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit 875988
  Lesser General Public License for more details.
Packit 875988
Packit 875988
  You should have received a copy of the GNU Lesser General Public
Packit 875988
  License along with this library.
Packit 875988
  If not, see <http://www.gnu.org/licenses/>.
Packit 875988
*/
Packit 875988
Packit 875988
/**
Packit 875988
 * @file microhttpd/mhd_byteorder.h
Packit 875988
 * @brief  macro definitions for host byte order
Packit 875988
 * @author Karlson2k (Evgeny Grin)
Packit 875988
 */
Packit 875988
Packit 875988
#ifndef MHD_BYTEORDER_H
Packit 875988
#define MHD_BYTEORDER_H
Packit 875988
Packit 875988
#include "platform.h"
Packit 875988
Packit 875988
#if HAVE_ENDIAN_H
Packit 875988
#include <endian.h>
Packit 875988
#endif
Packit 875988
Packit 875988
#if HAVE_SYS_PARAM_H
Packit 875988
#include <sys/param.h>
Packit 875988
#endif
Packit 875988
Packit 875988
#if HAVE_MACHINE_ENDIAN_H
Packit 875988
#include <machine/endian.h>
Packit 875988
#endif
Packit 875988
Packit 875988
#if HAVE_SYS_ENDIAN_H
Packit 875988
#include <sys/endian.h>
Packit 875988
#endif
Packit 875988
Packit 875988
#if HAVE_SYS_TYPES_H
Packit 875988
#include <sys/types.h>
Packit 875988
#endif
Packit 875988
Packit 875988
#if HAVE_SYS_BYTEORDER_H
Packit 875988
#include <sys/byteorder.h>
Packit 875988
#endif
Packit 875988
Packit 875988
#if HAVE_SYS_MACHINE_H
Packit 875988
#include <sys/machine.h>
Packit 875988
#endif
Packit 875988
Packit 875988
#if HAVE_MACHINE_PARAM_H
Packit 875988
#include <machine/param.h>
Packit 875988
#endif
Packit 875988
Packit 875988
#if HAVE_SYS_ISA_DEFS_H
Packit 875988
#include <sys/isa_defs.h>
Packit 875988
#endif
Packit 875988
Packit 875988
#define _MHD_BIG_ENDIAN 1234
Packit 875988
#define _MHD_LITTLE_ENDIAN 4321
Packit 875988
#define _MHD_PDP_ENDIAN 2143
Packit 875988
Packit 875988
#if defined(__BYTE_ORDER__)
Packit 875988
#if defined(__ORDER_BIG_ENDIAN__) && __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
Packit 875988
#define _MHD_BYTE_ORDER _MHD_BIG_ENDIAN
Packit 875988
#elif defined(__ORDER_LITTLE_ENDIAN__) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
Packit 875988
#define _MHD_BYTE_ORDER _MHD_LITTLE_ENDIAN
Packit 875988
#elif defined(__ORDER_PDP_ENDIAN__) && __BYTE_ORDER__ == __ORDER_PDP_ENDIAN__
Packit 875988
#define _MHD_BYTE_ORDER _MHD_PDP_ENDIAN
Packit 875988
#endif /* __BYTE_ORDER__ == __ORDER_PDP_ENDIAN__ */
Packit 875988
#elif defined(__BYTE_ORDER)
Packit 875988
#if defined(__BIG_ENDIAN) && __BYTE_ORDER == __BIG_ENDIAN
Packit 875988
#define _MHD_BYTE_ORDER _MHD_BIG_ENDIAN
Packit 875988
#elif defined(__LITTLE_ENDIAN) && __BYTE_ORDER == __LITTLE_ENDIAN
Packit 875988
#define _MHD_BYTE_ORDER _MHD_LITTLE_ENDIAN
Packit 875988
#elif defined(__PDP_ENDIAN) && __BYTE_ORDER == __PDP_ENDIAN
Packit 875988
#define _MHD_BYTE_ORDER _MHD_PDP_ENDIAN
Packit 875988
#endif /* __BYTE_ORDER == __PDP_ENDIAN */
Packit 875988
#elif defined (BYTE_ORDER)
Packit 875988
#if defined(BIG_ENDIAN) && BYTE_ORDER == BIG_ENDIAN
Packit 875988
#define _MHD_BYTE_ORDER _MHD_BIG_ENDIAN
Packit 875988
#elif defined(LITTLE_ENDIAN) && BYTE_ORDER == LITTLE_ENDIAN
Packit 875988
#define _MHD_BYTE_ORDER _MHD_LITTLE_ENDIAN
Packit 875988
#elif defined(PDP_ENDIAN) && BYTE_ORDER == PDP_ENDIAN
Packit 875988
#define _MHD_BYTE_ORDER _MHD_PDP_ENDIAN
Packit 875988
#endif /* __BYTE_ORDER == _PDP_ENDIAN */
Packit 875988
#elif defined (_BYTE_ORDER)
Packit 875988
#if defined(_BIG_ENDIAN) && _BYTE_ORDER == _BIG_ENDIAN
Packit 875988
#define _MHD_BYTE_ORDER _MHD_BIG_ENDIAN
Packit 875988
#elif defined(_LITTLE_ENDIAN) && _BYTE_ORDER == _LITTLE_ENDIAN
Packit 875988
#define _MHD_BYTE_ORDER _MHD_LITTLE_ENDIAN
Packit 875988
#elif defined(_PDP_ENDIAN) && _BYTE_ORDER == _PDP_ENDIAN
Packit 875988
#define _MHD_BYTE_ORDER _MHD_PDP_ENDIAN
Packit 875988
#endif /* _BYTE_ORDER == _PDP_ENDIAN */
Packit 875988
#endif /* _BYTE_ORDER */
Packit 875988
Packit 875988
#ifndef _MHD_BYTE_ORDER
Packit 875988
/* Byte order specification didn't detected in system headers */
Packit 875988
/* Try some guessing */
Packit 875988
Packit 875988
#if   (defined(__BIG_ENDIAN__) && !defined(__LITTLE_ENDIAN__)) || \
Packit 875988
      (defined(_BIG_ENDIAN) && !defined(_LITTLE_ENDIAN))
Packit 875988
/* Seems that we are on big endian platform */
Packit 875988
#define _MHD_BYTE_ORDER _MHD_BIG_ENDIAN
Packit 875988
#elif (defined(__LITTLE_ENDIAN__) && !defined(__BIG_ENDIAN__)) || \
Packit 875988
      (defined(_LITTLE_ENDIAN) && !defined(_BIG_ENDIAN))
Packit 875988
/* Seems that we are on little endian platform */
Packit 875988
#define _MHD_BYTE_ORDER _MHD_LITTLE_ENDIAN
Packit 875988
#elif defined(__amd64__) || defined(__amd64) || defined(__x86_64__) || defined(__x86_64) || \
Packit 875988
      defined(_M_X64) || defined(_M_AMD64) || defined(i386) || defined(__i386) || \
Packit 875988
      defined(__i386__) || defined(__i486__) || defined(__i586__) || defined(__i686__) || \
Packit 875988
      defined(_M_IX86) || defined(_X86_) || defined (__THW_INTEL__)
Packit 875988
/* x86 family is little endian */
Packit 875988
#define _MHD_BYTE_ORDER _MHD_LITTLE_ENDIAN
Packit 875988
#elif defined(__ARMEB__) || defined(__THUMBEB__) ||  defined(__AARCH64EB__) || \
Packit 875988
      defined(_MIPSEB) || defined(__MIPSEB) || defined(__MIPSEB__)
Packit 875988
/* Looks like we are on ARM/MIPS in big endian mode */
Packit 875988
#define _MHD_BYTE_ORDER _MHD_BIG_ENDIAN
Packit 875988
#elif defined(__ARMEL__) || defined(__THUMBEL__) || defined(__AARCH64EL__) || \
Packit 875988
      defined(_MIPSEL) || defined(__MIPSEL) || defined(__MIPSEL__)
Packit 875988
/* Looks like we are on ARM/MIPS in little endian mode */
Packit 875988
#define _MHD_BYTE_ORDER _MHD_LITTLE_ENDIAN
Packit 875988
#elif defined(__m68k__) || defined(M68000) || defined(__hppa__) || defined(__hppa) || \
Packit 875988
      defined(__HPPA__) || defined(__370__) || defined(__THW_370__) || \
Packit 875988
      defined(__s390__) || defined(__s390x__) || defined(__SYSC_ZARCH__)
Packit 875988
/* Looks like we are on big endian platform */
Packit 875988
#define _MHD_BYTE_ORDER _MHD_BIG_ENDIAN
Packit 875988
#elif defined(__ia64__) || defined(_IA64) || defined(__IA64__) || defined(__ia64) || \
Packit 875988
      defined(_M_IA64) || defined(__itanium__) || defined(__bfin__) || \
Packit 875988
      defined(__BFIN__) || defined(bfin) || defined(BFIN)
Packit 875988
/* Looks like we are on little endian platform */
Packit 875988
#define _MHD_BYTE_ORDER _MHD_LITTLE_ENDIAN
Packit 875988
#elif defined(_WIN32)
Packit 875988
/* W32 is always little endian on all platforms */
Packit 875988
#define _MHD_BYTE_ORDER _MHD_LITTLE_ENDIAN
Packit 875988
#elif defined(WORDS_BIGENDIAN)
Packit 875988
/* Use byte order detected by configure */
Packit 875988
#define _MHD_BYTE_ORDER _MHD_BIG_ENDIAN
Packit 875988
#endif /* _WIN32 */
Packit 875988
Packit 875988
#endif /* !_MHD_BYTE_ORDER */
Packit 875988
Packit 875988
#ifdef _MHD_BYTE_ORDER
Packit 875988
/* Some safety checks */
Packit 875988
#if defined(WORDS_BIGENDIAN) && _MHD_BYTE_ORDER != _MHD_BIG_ENDIAN
Packit 875988
#error Configure detected big endian byte order but headers specify different byte order
Packit 875988
#elif !defined(WORDS_BIGENDIAN) && _MHD_BYTE_ORDER == _MHD_BIG_ENDIAN
Packit 875988
#error Configure did not detect big endian byte order but headers specify big endian byte order
Packit 875988
#endif /* !WORDS_BIGENDIAN && _MHD_BYTE_ORDER == _MHD_BIG_ENDIAN */
Packit 875988
#endif /* _MHD_BYTE_ORDER */
Packit 875988
Packit 875988
#endif /* !MHD_BYTEORDER_H */