"Fossies" - the Fresh Open Source Software Archive

Member "cryptsetup-2.4.3/lib/bitops.h" (14 Jan 2016, 3294 Bytes) of package /linux/misc/cryptsetup-2.4.3.tar.xz:


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 "bitops.h" see the Fossies "Dox" file reference documentation.

    1 /*
    2  * No copyright is claimed.  This code is in the public domain; do with
    3  * it what you wish.
    4  *
    5  * Written by Karel Zak <kzak@redhat.com>
    6  */
    7 #ifndef BITOPS_H
    8 #define BITOPS_H
    9 
   10 #include <stdint.h>
   11 #include <sys/param.h>
   12 
   13 #if defined(HAVE_BYTESWAP_H)
   14 # include <byteswap.h>
   15 #endif
   16 
   17 #if defined(HAVE_ENDIAN_H)
   18 #  include <endian.h>
   19 #elif defined(HAVE_SYS_ENDIAN_H)    /* BSDs have them here */
   20 #  include <sys/endian.h>
   21 #endif
   22 
   23 #if defined(__OpenBSD__)
   24 # include <sys/types.h>
   25 # define be16toh(x) betoh16(x)
   26 # define be32toh(x) betoh32(x)
   27 # define be64toh(x) betoh64(x)
   28 #endif
   29 
   30 /*
   31  * Fallbacks
   32  */
   33 #ifndef bswap_16
   34 # define bswap_16(x)   ((((x) & 0x00FF) << 8) | \
   35             (((x) & 0xFF00) >> 8))
   36 #endif
   37 
   38 #ifndef bswap_32
   39 # define bswap_32(x)   ((((x) & 0x000000FF) << 24) | \
   40             (((x) & 0x0000FF00) << 8)  | \
   41             (((x) & 0x00FF0000) >> 8)  | \
   42             (((x) & 0xFF000000) >> 24))
   43 #endif
   44 
   45 #ifndef bswap_64
   46 # define bswap_64(x) ((((x) & 0x00000000000000FFULL) << 56) | \
   47                       (((x) & 0x000000000000FF00ULL) << 40) | \
   48                       (((x) & 0x0000000000FF0000ULL) << 24) | \
   49                       (((x) & 0x00000000FF000000ULL) << 8)  | \
   50                       (((x) & 0x000000FF00000000ULL) >> 8)  | \
   51                       (((x) & 0x0000FF0000000000ULL) >> 24) | \
   52                       (((x) & 0x00FF000000000000ULL) >> 40) | \
   53                       (((x) & 0xFF00000000000000ULL) >> 56))
   54 #endif
   55 
   56 #ifndef htobe16
   57 # if !defined(WORDS_BIGENDIAN)
   58 #  define htobe16(x) bswap_16 (x)
   59 #  define htole16(x) (x)
   60 #  define be16toh(x) bswap_16 (x)
   61 #  define le16toh(x) (x)
   62 #  define htobe32(x) bswap_32 (x)
   63 #  define htole32(x) (x)
   64 #  define be32toh(x) bswap_32 (x)
   65 #  define le32toh(x) (x)
   66 #  define htobe64(x) bswap_64 (x)
   67 #  define htole64(x) (x)
   68 #  define be64toh(x) bswap_64 (x)
   69 #  define le64toh(x) (x)
   70 # else
   71 #  define htobe16(x) (x)
   72 #  define htole16(x) bswap_16 (x)
   73 #  define be16toh(x) (x)
   74 #  define le16toh(x) bswap_16 (x)
   75 #  define htobe32(x) (x)
   76 #  define htole32(x) bswap_32 (x)
   77 #  define be32toh(x) (x)
   78 #  define le32toh(x) bswap_32 (x)
   79 #  define htobe64(x) (x)
   80 #  define htole64(x) bswap_64 (x)
   81 #  define be64toh(x) (x)
   82 #  define le64toh(x) bswap_64 (x)
   83 # endif
   84 #endif
   85 
   86 /*
   87  * Byte swab macros (based on linux/byteorder/swab.h)
   88  */
   89 #define swab16(x) bswap_16(x)
   90 #define swab32(x) bswap_32(x)
   91 #define swab64(x) bswap_64(x)
   92 
   93 #define cpu_to_le16(x) ((uint16_t) htole16(x))
   94 #define cpu_to_le32(x) ((uint32_t) htole32(x))
   95 #define cpu_to_le64(x) ((uint64_t) htole64(x))
   96 
   97 #define cpu_to_be16(x) ((uint16_t) htobe16(x))
   98 #define cpu_to_be32(x) ((uint32_t) htobe32(x))
   99 #define cpu_to_be64(x) ((uint64_t) htobe64(x))
  100 
  101 #define le16_to_cpu(x) ((uint16_t) le16toh(x))
  102 #define le32_to_cpu(x) ((uint32_t) le32toh(x))
  103 #define le64_to_cpu(x) ((uint64_t) le64toh(x))
  104 
  105 #define be16_to_cpu(x) ((uint16_t) be16toh(x))
  106 #define be32_to_cpu(x) ((uint32_t) be32toh(x))
  107 #define be64_to_cpu(x) ((uint64_t) be64toh(x))
  108 
  109 /*
  110  * Bit map related macros. Usually provided by libc.
  111  */
  112 #ifndef NBBY
  113 # define NBBY            CHAR_BIT
  114 #endif
  115 
  116 #ifndef setbit
  117 # define setbit(a,i)    ((a)[(i)/NBBY] |= 1<<((i)%NBBY))
  118 # define clrbit(a,i)    ((a)[(i)/NBBY] &= ~(1<<((i)%NBBY)))
  119 # define isset(a,i) ((a)[(i)/NBBY] & (1<<((i)%NBBY)))
  120 # define isclr(a,i) (((a)[(i)/NBBY] & (1<<((i)%NBBY))) == 0)
  121 #endif
  122 
  123 #endif /* BITOPS_H */