LCOV - code coverage report
Current view: top level - src/compat - endian.h (source / functions) Hit Total Coverage
Test: total_coverage.info Lines: 20 20 100.0 %
Date: 2020-09-26 01:30:44 Functions: 10 10 100.0 %

          Line data    Source code
       1             : // Copyright (c) 2014-2018 The Bitcoin Core developers
       2             : // Distributed under the MIT software license, see the accompanying
       3             : // file COPYING or http://www.opensource.org/licenses/mit-license.php.
       4             : 
       5             : #ifndef BITCOIN_COMPAT_ENDIAN_H
       6             : #define BITCOIN_COMPAT_ENDIAN_H
       7             : 
       8             : #if defined(HAVE_CONFIG_H)
       9             : #include <config/bitcoin-config.h>
      10             : #endif
      11             : 
      12             : #include <compat/byteswap.h>
      13             : 
      14             : #include <stdint.h>
      15             : 
      16             : #if defined(HAVE_ENDIAN_H)
      17             : #include <endian.h>
      18             : #elif defined(HAVE_SYS_ENDIAN_H)
      19             : #include <sys/endian.h>
      20             : #endif
      21             : 
      22             : #ifndef HAVE_CONFIG_H
      23             : // While not technically a supported configuration, defaulting to defining these
      24             : // DECLs when we were compiled without autotools makes it easier for other build
      25             : // systems to build things like libbitcoinconsensus for strange targets.
      26             : #ifdef htobe16
      27             : #define HAVE_DECL_HTOBE16 1
      28             : #endif
      29             : #ifdef htole16
      30             : #define HAVE_DECL_HTOLE16 1
      31             : #endif
      32             : #ifdef be16toh
      33             : #define HAVE_DECL_BE16TOH 1
      34             : #endif
      35             : #ifdef le16toh
      36             : #define HAVE_DECL_LE16TOH 1
      37             : #endif
      38             : 
      39             : #ifdef htobe32
      40             : #define HAVE_DECL_HTOBE32 1
      41             : #endif
      42             : #ifdef htole32
      43             : #define HAVE_DECL_HTOLE32 1
      44             : #endif
      45             : #ifdef be32toh
      46             : #define HAVE_DECL_BE32TOH 1
      47             : #endif
      48             : #ifdef le32toh
      49             : #define HAVE_DECL_LE32TOH 1
      50             : #endif
      51             : 
      52             : #ifdef htobe64
      53             : #define HAVE_DECL_HTOBE64 1
      54             : #endif
      55             : #ifdef htole64
      56             : #define HAVE_DECL_HTOLE64 1
      57             : #endif
      58             : #ifdef be64toh
      59             : #define HAVE_DECL_BE64TOH 1
      60             : #endif
      61             : #ifdef le64toh
      62             : #define HAVE_DECL_LE64TOH 1
      63             : #endif
      64             : 
      65             : #endif // HAVE_CONFIG_H
      66             : 
      67             : #if defined(WORDS_BIGENDIAN)
      68             : 
      69             : #if HAVE_DECL_HTOBE16 == 0
      70             : inline uint16_t htobe16(uint16_t host_16bits)
      71             : {
      72             :     return host_16bits;
      73             : }
      74             : #endif // HAVE_DECL_HTOBE16
      75             : 
      76             : #if HAVE_DECL_HTOLE16 == 0
      77             : inline uint16_t htole16(uint16_t host_16bits)
      78             : {
      79             :     return bswap_16(host_16bits);
      80             : }
      81             : #endif // HAVE_DECL_HTOLE16
      82             : 
      83             : #if HAVE_DECL_BE16TOH == 0
      84             : inline uint16_t be16toh(uint16_t big_endian_16bits)
      85             : {
      86             :     return big_endian_16bits;
      87             : }
      88             : #endif // HAVE_DECL_BE16TOH
      89             : 
      90             : #if HAVE_DECL_LE16TOH == 0
      91             : inline uint16_t le16toh(uint16_t little_endian_16bits)
      92             : {
      93             :     return bswap_16(little_endian_16bits);
      94             : }
      95             : #endif // HAVE_DECL_LE16TOH
      96             : 
      97             : #if HAVE_DECL_HTOBE32 == 0
      98             : inline uint32_t htobe32(uint32_t host_32bits)
      99             : {
     100             :     return host_32bits;
     101             : }
     102             : #endif // HAVE_DECL_HTOBE32
     103             : 
     104             : #if HAVE_DECL_HTOLE32 == 0
     105             : inline uint32_t htole32(uint32_t host_32bits)
     106             : {
     107             :     return bswap_32(host_32bits);
     108             : }
     109             : #endif // HAVE_DECL_HTOLE32
     110             : 
     111             : #if HAVE_DECL_BE32TOH == 0
     112             : inline uint32_t be32toh(uint32_t big_endian_32bits)
     113             : {
     114             :     return big_endian_32bits;
     115             : }
     116             : #endif // HAVE_DECL_BE32TOH
     117             : 
     118             : #if HAVE_DECL_LE32TOH == 0
     119             : inline uint32_t le32toh(uint32_t little_endian_32bits)
     120             : {
     121             :     return bswap_32(little_endian_32bits);
     122             : }
     123             : #endif // HAVE_DECL_LE32TOH
     124             : 
     125             : #if HAVE_DECL_HTOBE64 == 0
     126             : inline uint64_t htobe64(uint64_t host_64bits)
     127             : {
     128             :     return host_64bits;
     129             : }
     130             : #endif // HAVE_DECL_HTOBE64
     131             : 
     132             : #if HAVE_DECL_HTOLE64 == 0
     133             : inline uint64_t htole64(uint64_t host_64bits)
     134             : {
     135             :     return bswap_64(host_64bits);
     136             : }
     137             : #endif // HAVE_DECL_HTOLE64
     138             : 
     139             : #if HAVE_DECL_BE64TOH == 0
     140             : inline uint64_t be64toh(uint64_t big_endian_64bits)
     141             : {
     142             :     return big_endian_64bits;
     143             : }
     144             : #endif // HAVE_DECL_BE64TOH
     145             : 
     146             : #if HAVE_DECL_LE64TOH == 0
     147             : inline uint64_t le64toh(uint64_t little_endian_64bits)
     148             : {
     149             :     return bswap_64(little_endian_64bits);
     150             : }
     151             : #endif // HAVE_DECL_LE64TOH
     152             : 
     153             : #else // WORDS_BIGENDIAN
     154             : 
     155             : #if HAVE_DECL_HTOBE16 == 0
     156             : inline uint16_t htobe16(uint16_t host_16bits)
     157             : {
     158             :     return bswap_16(host_16bits);
     159             : }
     160             : #endif // HAVE_DECL_HTOBE16
     161             : 
     162             : #if HAVE_DECL_HTOLE16 == 0
     163     2904140 : inline uint16_t htole16(uint16_t host_16bits)
     164             : {
     165     2904140 :     return host_16bits;
     166             : }
     167             : #endif // HAVE_DECL_HTOLE16
     168             : 
     169             : #if HAVE_DECL_BE16TOH == 0
     170             : inline uint16_t be16toh(uint16_t big_endian_16bits)
     171             : {
     172             :     return bswap_16(big_endian_16bits);
     173             : }
     174             : #endif // HAVE_DECL_BE16TOH
     175             : 
     176             : #if HAVE_DECL_LE16TOH == 0
     177      904255 : inline uint16_t le16toh(uint16_t little_endian_16bits)
     178             : {
     179      904255 :     return little_endian_16bits;
     180             : }
     181             : #endif // HAVE_DECL_LE16TOH
     182             : 
     183             : #if HAVE_DECL_HTOBE32 == 0
     184   181901453 : inline uint32_t htobe32(uint32_t host_32bits)
     185             : {
     186   181901453 :     return bswap_32(host_32bits);
     187             : }
     188             : #endif // HAVE_DECL_HTOBE32
     189             : 
     190             : #if HAVE_DECL_HTOLE32 == 0
     191   156592642 : inline uint32_t htole32(uint32_t host_32bits)
     192             : {
     193   156592642 :     return host_32bits;
     194             : }
     195             : #endif // HAVE_DECL_HTOLE32
     196             : 
     197             : #if HAVE_DECL_BE32TOH == 0
     198    20928462 : inline uint32_t be32toh(uint32_t big_endian_32bits)
     199             : {
     200    20928462 :     return bswap_32(big_endian_32bits);
     201             : }
     202             : #endif // HAVE_DECL_BE32TOH
     203             : 
     204             : #if HAVE_DECL_LE32TOH == 0
     205   159751648 : inline uint32_t le32toh(uint32_t little_endian_32bits)
     206             : {
     207   159751648 :     return little_endian_32bits;
     208             : }
     209             : #endif // HAVE_DECL_LE32TOH
     210             : 
     211             : #if HAVE_DECL_HTOBE64 == 0
     212   264569314 : inline uint64_t htobe64(uint64_t host_64bits)
     213             : {
     214   264569314 :     return bswap_64(host_64bits);
     215             : }
     216             : #endif // HAVE_DECL_HTOBE64
     217             : 
     218             : #if HAVE_DECL_HTOLE64 == 0
     219    50906666 : inline uint64_t htole64(uint64_t host_64bits)
     220             : {
     221    50906666 :     return host_64bits;
     222             : }
     223             : #endif // HAVE_DECL_HTOLE64
     224             : 
     225             : #if HAVE_DECL_BE64TOH == 0
     226   446711279 : inline uint64_t be64toh(uint64_t big_endian_64bits)
     227             : {
     228   446711279 :     return bswap_64(big_endian_64bits);
     229             : }
     230             : #endif // HAVE_DECL_BE64TOH
     231             : 
     232             : #if HAVE_DECL_LE64TOH == 0
     233    31381580 : inline uint64_t le64toh(uint64_t little_endian_64bits)
     234             : {
     235    31381580 :     return little_endian_64bits;
     236             : }
     237             : #endif // HAVE_DECL_LE64TOH
     238             : 
     239             : #endif // WORDS_BIGENDIAN
     240             : 
     241             : #endif // BITCOIN_COMPAT_ENDIAN_H

Generated by: LCOV version 1.15