From 97517acbaee0871f593c27c4a8821b609e4fd44c Mon Sep 17 00:00:00 2001
From: Dmitriy Gerasimov <naeper@demlabs.net>
Date: Wed, 22 May 2019 17:01:58 +0700
Subject: [PATCH] [+] Macros for scanf and printf calls. New node address
 representation like 0123::4567::89ab::cdef [*] Some fixes in ledger

---
 dap_chain_common.h | 18 ++++++++++++++++++
 dap_chain_ledger.c |  6 +++---
 2 files changed, 21 insertions(+), 3 deletions(-)

diff --git a/dap_chain_common.h b/dap_chain_common.h
index c6935d4..2b91016 100755
--- a/dap_chain_common.h
+++ b/dap_chain_common.h
@@ -63,6 +63,24 @@ typedef union dap_chain_node_addr{
     uint8_t raw[sizeof(uint64_t)];  // Access to selected octects
 } DAP_ALIGN_PACKED dap_chain_node_addr_t;
 
+#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
+#define NODE_ADDR_FP_STR      "%04hX::%04hX::%04hX::%04hX"
+#define NODE_ADDR_FP_ARGS(a)  a->words[2],a->words[3],a->words[0],a->words[1]
+#define NODE_ADDR_FPS_ARGS(a)  &a->words[2],&a->words[3],&a->words[0],&a->words[1]
+#define NODE_ADDR_FP_ARGS_S(a)  a.words[2],a.words[3],a.words[0],a.words[1]
+#define NODE_ADDR_FPS_ARGS_S(a)  &a.words[2],&a.words[3],&a.words[0],&a.words[1]
+#else
+#define NODE_ADDR_FP_STR      "%04hX::%04hX::%04hX::%04hX"
+#define NODE_ADDR_FP_ARGS(a)  a->words[3],a->words[2],a->words[1],a->words[0]
+#define NODE_ADDR_FPS_ARGS(a)  &a->words[3],&a->words[2],&a->words[1],&a->words[0]
+#define NODE_ADDR_FP_ARGS_S(a)  a.words[3],a.words[2],a.words[1],a.words[0]
+#define NODE_ADDR_FPS_ARGS_S(a)  &a.words[3],&a.words[2],&a.words[1],&a.words[0]
+
+#endif
+
+inline static int dap_chain_node_addr_from_str( dap_chain_node_addr_t * a_addr, const char * a_addr_str){
+    return (int) sscanf(a_addr_str,NODE_ADDR_FP_STR,NODE_ADDR_FPS_ARGS(a_addr) )-4;
+}
 /**
   *
   *
diff --git a/dap_chain_ledger.c b/dap_chain_ledger.c
index 710a2cc..3c18424 100755
--- a/dap_chain_ledger.c
+++ b/dap_chain_ledger.c
@@ -1020,7 +1020,7 @@ uint64_t dap_chain_ledger_tx_cache_get_out_cond_value(dap_ledger_t *a_ledger, da
 {
     uint64_t l_ret_value = 0;
 
-    const dap_chain_datum_tx_t *l_tx_tmp;
+    dap_chain_datum_tx_t *l_tx_tmp;
     dap_chain_hash_fast_t l_tx_first_hash = { 0 }; // start hash
     //memcpy(&l_tx_first_hash, 0, sizeof(dap_chain_hash_fast_t));
     /* size_t l_pub_key_size = a_key_from->pub_key_data_size;
@@ -1032,8 +1032,8 @@ uint64_t dap_chain_ledger_tx_cache_get_out_cond_value(dap_ledger_t *a_ledger, da
 
         // Get out_cond item from transaction
         if(l_tx_tmp) {
-            const dap_chain_tx_out_cond_t *l_tx_out_cond = (const dap_chain_tx_out_cond_t*) dap_chain_datum_tx_item_get(
-                    (dap_chain_datum_tx_t*) l_tx_tmp, NULL, TX_ITEM_TYPE_OUT_COND, NULL);
+           dap_chain_tx_out_cond_t *l_tx_out_cond  =(dap_chain_tx_out_cond_t *)dap_chain_datum_tx_item_get(
+                     l_tx_tmp, NULL, TX_ITEM_TYPE_OUT_COND, NULL);
 
             // TODO check relations a_addr with cond_data and public key
 
-- 
GitLab