mirror of
https://github.com/aljazceru/lightning.git
synced 2025-12-19 15:14:23 +01:00
utils: add max_unsigned/min_unsigned helpers.
We are usually dealing with unsigned values, so use this. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
This commit is contained in:
committed by
Christian Decker
parent
012dedc3d8
commit
2ab4e5b42b
@@ -12,8 +12,6 @@
|
|||||||
/* To push 0-75 bytes onto stack. */
|
/* To push 0-75 bytes onto stack. */
|
||||||
#define OP_PUSHBYTES(val) (val)
|
#define OP_PUSHBYTES(val) (val)
|
||||||
|
|
||||||
#define max(a, b) ((a) > (b) ? (a) : (b))
|
|
||||||
|
|
||||||
/* Bitcoin's OP_HASH160 is RIPEMD(SHA256()) */
|
/* Bitcoin's OP_HASH160 is RIPEMD(SHA256()) */
|
||||||
static void hash160(struct ripemd160 *redeemhash, const void *mem, size_t len)
|
static void hash160(struct ripemd160 *redeemhash, const void *mem, size_t len)
|
||||||
{
|
{
|
||||||
@@ -556,7 +554,7 @@ u8 *bitcoin_wscript_to_local(const tal_t *ctx, u16 to_self_delay,
|
|||||||
add_op(&script, OP_IF);
|
add_op(&script, OP_IF);
|
||||||
add_push_key(&script, revocation_pubkey);
|
add_push_key(&script, revocation_pubkey);
|
||||||
add_op(&script, OP_ELSE);
|
add_op(&script, OP_ELSE);
|
||||||
add_number(&script, max(lease_remaining, to_self_delay));
|
add_number(&script, max_unsigned(lease_remaining, to_self_delay));
|
||||||
add_op(&script, OP_CHECKSEQUENCEVERIFY);
|
add_op(&script, OP_CHECKSEQUENCEVERIFY);
|
||||||
add_op(&script, OP_DROP);
|
add_op(&script, OP_DROP);
|
||||||
add_push_key(&script, local_delayedkey);
|
add_push_key(&script, local_delayedkey);
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
#ifndef LIGHTNING_COMMON_UTILS_H
|
#ifndef LIGHTNING_COMMON_UTILS_H
|
||||||
#define LIGHTNING_COMMON_UTILS_H
|
#define LIGHTNING_COMMON_UTILS_H
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
#include <ccan/build_assert/build_assert.h>
|
||||||
#include <ccan/crypto/ripemd160/ripemd160.h>
|
#include <ccan/crypto/ripemd160/ripemd160.h>
|
||||||
#include <ccan/crypto/sha256/sha256.h>
|
#include <ccan/crypto/sha256/sha256.h>
|
||||||
#include <ccan/short_types/short_types.h>
|
#include <ccan/short_types/short_types.h>
|
||||||
@@ -12,6 +13,29 @@ extern secp256k1_context *secp256k1_ctx;
|
|||||||
|
|
||||||
extern const struct chainparams *chainparams;
|
extern const struct chainparams *chainparams;
|
||||||
|
|
||||||
|
/* Unsigned min/max macros: BUILD_ASSERT make sure types are unsigned */
|
||||||
|
#if HAVE_TYPEOF
|
||||||
|
#define MUST_BE_UNSIGNED_INT(x) BUILD_ASSERT_OR_ZERO((typeof(x))(-1)>=0)
|
||||||
|
#else
|
||||||
|
#define MUST_BE_UNSIGNED_INT(x) 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define min_unsigned(a, b) \
|
||||||
|
(MUST_BE_UNSIGNED_INT(a) + MUST_BE_UNSIGNED_INT(b) + min_u64((a), (b)))
|
||||||
|
|
||||||
|
#define max_unsigned(a, b) \
|
||||||
|
(MUST_BE_UNSIGNED_INT(a) + MUST_BE_UNSIGNED_INT(b) + max_u64((a), (b)))
|
||||||
|
|
||||||
|
static inline u64 min_u64(u64 a, u64 b)
|
||||||
|
{
|
||||||
|
return a < b ? a : b;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline u64 max_u64(u64 a, u64 b)
|
||||||
|
{
|
||||||
|
return a < b ? b : a;
|
||||||
|
}
|
||||||
|
|
||||||
/* Marker which indicates an (tal) pointer argument is stolen
|
/* Marker which indicates an (tal) pointer argument is stolen
|
||||||
* (i.e. eventually freed) by the function. Unlike TAKEN, which
|
* (i.e. eventually freed) by the function. Unlike TAKEN, which
|
||||||
* indicates it's only stolen if caller says take() */
|
* indicates it's only stolen if caller says take() */
|
||||||
|
|||||||
@@ -23,7 +23,6 @@
|
|||||||
/* stdin == requests */
|
/* stdin == requests */
|
||||||
#define REQ_FD STDIN_FILENO
|
#define REQ_FD STDIN_FILENO
|
||||||
#define HSM_FD 3
|
#define HSM_FD 3
|
||||||
#define max(a, b) ((a) > (b) ? (a) : (b))
|
|
||||||
|
|
||||||
/* Required in various places: keys for commitment transaction. */
|
/* Required in various places: keys for commitment transaction. */
|
||||||
static const struct keyset *keyset;
|
static const struct keyset *keyset;
|
||||||
@@ -2837,7 +2836,7 @@ static void handle_our_unilateral(const struct tx_parts *tx,
|
|||||||
our_unilateral_to_us(&outs, tx,
|
our_unilateral_to_us(&outs, tx,
|
||||||
tx_blockheight,
|
tx_blockheight,
|
||||||
i, amt,
|
i, amt,
|
||||||
max(to_self_delay[LOCAL], csv),
|
max_unsigned(to_self_delay[LOCAL], csv),
|
||||||
script[LOCAL],
|
script[LOCAL],
|
||||||
local_wscript,
|
local_wscript,
|
||||||
is_replay);
|
is_replay);
|
||||||
|
|||||||
Reference in New Issue
Block a user