github.com/guiltylotus/go-ethereum@v1.9.7/crypto/secp256k1/libsecp256k1/src/util.h (about)

     1  /**********************************************************************
     2   * Copyright (c) 2013, 2014 Pieter Wuille                             *
     3   * Distributed under the MIT software license, see the accompanying   *
     4   * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
     5   **********************************************************************/
     6  
     7  #ifndef _SECP256K1_UTIL_H_
     8  #define _SECP256K1_UTIL_H_
     9  
    10  #if defined HAVE_CONFIG_H
    11  #include "libsecp256k1-config.h"
    12  #endif
    13  
    14  #include <stdlib.h>
    15  #include <stdint.h>
    16  #include <stdio.h>
    17  
    18  typedef struct {
    19      void (*fn)(const char *text, void* data);
    20      const void* data;
    21  } secp256k1_callback;
    22  
    23  static SECP256K1_INLINE void secp256k1_callback_call(const secp256k1_callback * const cb, const char * const text) {
    24      cb->fn(text, (void*)cb->data);
    25  }
    26  
    27  #ifdef DETERMINISTIC
    28  #define TEST_FAILURE(msg) do { \
    29      fprintf(stderr, "%s\n", msg); \
    30      abort(); \
    31  } while(0);
    32  #else
    33  #define TEST_FAILURE(msg) do { \
    34      fprintf(stderr, "%s:%d: %s\n", __FILE__, __LINE__, msg); \
    35      abort(); \
    36  } while(0)
    37  #endif
    38  
    39  #ifdef HAVE_BUILTIN_EXPECT
    40  #define EXPECT(x,c) __builtin_expect((x),(c))
    41  #else
    42  #define EXPECT(x,c) (x)
    43  #endif
    44  
    45  #ifdef DETERMINISTIC
    46  #define CHECK(cond) do { \
    47      if (EXPECT(!(cond), 0)) { \
    48          TEST_FAILURE("test condition failed"); \
    49      } \
    50  } while(0)
    51  #else
    52  #define CHECK(cond) do { \
    53      if (EXPECT(!(cond), 0)) { \
    54          TEST_FAILURE("test condition failed: " #cond); \
    55      } \
    56  } while(0)
    57  #endif
    58  
    59  /* Like assert(), but when VERIFY is defined, and side-effect safe. */
    60  #if defined(COVERAGE)
    61  #define VERIFY_CHECK(check)
    62  #define VERIFY_SETUP(stmt)
    63  #elif defined(VERIFY)
    64  #define VERIFY_CHECK CHECK
    65  #define VERIFY_SETUP(stmt) do { stmt; } while(0)
    66  #else
    67  #define VERIFY_CHECK(cond) do { (void)(cond); } while(0)
    68  #define VERIFY_SETUP(stmt)
    69  #endif
    70  
    71  static SECP256K1_INLINE void *checked_malloc(const secp256k1_callback* cb, size_t size) {
    72      void *ret = malloc(size);
    73      if (ret == NULL) {
    74          secp256k1_callback_call(cb, "Out of memory");
    75      }
    76      return ret;
    77  }
    78  
    79  /* Macro for restrict, when available and not in a VERIFY build. */
    80  #if defined(SECP256K1_BUILD) && defined(VERIFY)
    81  # define SECP256K1_RESTRICT
    82  #else
    83  # if (!defined(__STDC_VERSION__) || (__STDC_VERSION__ < 199901L) )
    84  #  if SECP256K1_GNUC_PREREQ(3,0)
    85  #   define SECP256K1_RESTRICT __restrict__
    86  #  elif (defined(_MSC_VER) && _MSC_VER >= 1400)
    87  #   define SECP256K1_RESTRICT __restrict
    88  #  else
    89  #   define SECP256K1_RESTRICT
    90  #  endif
    91  # else
    92  #  define SECP256K1_RESTRICT restrict
    93  # endif
    94  #endif
    95  
    96  #if defined(_WIN32)
    97  # define I64FORMAT "I64d"
    98  # define I64uFORMAT "I64u"
    99  #else
   100  # define I64FORMAT "lld"
   101  # define I64uFORMAT "llu"
   102  #endif
   103  
   104  #if defined(HAVE___INT128)
   105  # if defined(__GNUC__)
   106  #  define SECP256K1_GNUC_EXT __extension__
   107  # else
   108  #  define SECP256K1_GNUC_EXT
   109  # endif
   110  SECP256K1_GNUC_EXT typedef unsigned __int128 uint128_t;
   111  #endif
   112  
   113  #endif