"Fossies" - the Fresh Open Source Software Archive

Member "libextractor-1.11/src/common/le_architecture.h" (30 Jan 2021, 3377 Bytes) of package /linux/privat/libextractor-1.11.tar.gz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file. For more information about "le_architecture.h" see the Fossies "Dox" file reference documentation.

    1 /*
    2      This file is part of libextractor.
    3      Copyright (C) 2002, 2003, 2004, 2009, 2012 Vidyut Samanta and Christian Grothoff
    4 
    5      libextractor is free software; you can redistribute it and/or modify
    6      it under the terms of the GNU General Public License as published
    7      by the Free Software Foundation; either version 3, or (at your
    8      option) any later version.
    9 
   10      libextractor is distributed in the hope that it will be useful, but
   11      WITHOUT ANY WARRANTY; without even the implied warranty of
   12      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   13      General Public License for more details.
   14 
   15      You should have received a copy of the GNU General Public License
   16      along with libextractor; see the file COPYING.  If not, write to the
   17      Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
   18      Boston, MA 02110-1301, USA.
   19  */
   20 /**
   21  * @file common/le_architecture.h
   22  * @brief support routines and defines to deal with architecture-specific issues
   23  */
   24 #ifndef LE_ARCHITECTURE_H
   25 #define LE_ARCHITECTURE_H
   26 
   27 #if WINDOWS
   28 #include <sys/param.h>          /* #define BYTE_ORDER */
   29 #endif
   30 
   31 /* This is copied directly from GNUnet headers */
   32 
   33 #ifndef __BYTE_ORDER
   34 #ifdef _BYTE_ORDER
   35 #define __BYTE_ORDER _BYTE_ORDER
   36 #else
   37 #ifdef BYTE_ORDER
   38 #define __BYTE_ORDER BYTE_ORDER
   39 #endif
   40 #endif
   41 #endif
   42 #ifndef __BIG_ENDIAN
   43 #ifdef _BIG_ENDIAN
   44 #define __BIG_ENDIAN _BIG_ENDIAN
   45 #else
   46 #ifdef BIG_ENDIAN
   47 #define __BIG_ENDIAN BIG_ENDIAN
   48 #endif
   49 #endif
   50 #endif
   51 #ifndef __LITTLE_ENDIAN
   52 #ifdef _LITTLE_ENDIAN
   53 #define __LITTLE_ENDIAN _LITTLE_ENDIAN
   54 #else
   55 #ifdef LITTLE_ENDIAN
   56 #define __LITTLE_ENDIAN LITTLE_ENDIAN
   57 #endif
   58 #endif
   59 #endif
   60 
   61 /**
   62  * Endian operations
   63  */
   64 
   65 #if __BYTE_ORDER == __LITTLE_ENDIAN
   66 #define LE_htobe16(x) __bswap_16 (x)
   67 #define LE_htole16(x) (x)
   68 #define LE_be16toh(x) __bswap_16 (x)
   69 #define LE_le16toh(x) (x)
   70 
   71 #define LE_htobe32(x) __bswap_32 (x)
   72 #define LE_htole32(x) (x)
   73 #define LE_be32toh(x) __bswap_32 (x)
   74 #define LE_le32toh(x) (x)
   75 
   76 #define LE_htobe64(x) __bswap_64 (x)
   77 #define LE_htole64(x) (x)
   78 #define LE_be64toh(x) __bswap_64 (x)
   79 #define LE_le64toh(x) (x)
   80 #endif
   81 #if __BYTE_ORDER == __BIG_ENDIAN
   82 #define LE_htobe16(x) (x)
   83 #define LE_htole16(x) __bswap_16 (x)
   84 #define LE_be16toh(x) (x)
   85 #define LE_le16toh(x) __bswap_16 (x)
   86 
   87 #define LE_htobe32(x) (x)
   88 #define LE_htole32(x) __bswap_32 (x)
   89 #define LE_be32toh(x) (x)
   90 #define LE_le32toh(x) __bswap_32 (x)
   91 
   92 #define LE_htobe64(x) (x)
   93 #define LE_htole64(x) __bswap_64 (x)
   94 #define LE_be64toh(x) (x)
   95 #define LE_le64toh(x) __bswap_64 (x)
   96 #endif
   97 
   98 
   99 /**
  100  * gcc-ism to get packed structs.
  101  */
  102 #define LE_PACKED __attribute__((packed))
  103 
  104 
  105 #if MINGW
  106 #if __GNUC__ > 3
  107 /**
  108  * gcc 4.x-ism to pack structures even on W32 (to be used before structs)
  109  */
  110 #define LE_NETWORK_STRUCT_BEGIN \
  111   _Pragma ("pack(push)") \
  112   _Pragma ("pack(1)")
  113 
  114 /**
  115  * gcc 4.x-ism to pack structures even on W32 (to be used after structs)
  116  */
  117 #define LE_NETWORK_STRUCT_END _Pragma ("pack(pop)")
  118 #else
  119 #error gcc 4.x or higher required on W32 systems
  120 #endif
  121 #else
  122 /**
  123  * Good luck, LE_PACKED should suffice, but this won't work on W32
  124  */
  125 #define LE_NETWORK_STRUCT_BEGIN
  126 
  127 /**
  128  * Good luck, LE_PACKED should suffice, but this won't work on W32
  129  */
  130 #define LE_NETWORK_STRUCT_END
  131 #endif
  132 
  133 
  134 #endif