Raven Core
3.0.0
P2P Digital Currency
src
secp256k1
src
util.h
Go to the documentation of this file.
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
/* SECP256K1_UTIL_H */
libsecp256k1-config.h
secp256k1_callback::fn
void(* fn)(const char *text, void *data)
Definition:
util.h:19
SECP256K1_INLINE
#define SECP256K1_INLINE
Definition:
secp256k1.h:110
secp256k1_callback::data
const void * data
Definition:
util.h:20
secp256k1_callback
Definition:
util.h:18
Generated on Mon Jul 29 2019 02:32:21 for Raven Core by
1.8.13