|
|
|
@ -8439,7 +8439,9 @@ static char *cmd_homepage(__maybe_unused PGconn *conn, char *cmd, char *id,
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// TODO: handle orphans
|
|
|
|
|
K_RLOCK(blocks_free); |
|
|
|
|
b_item = last_in_ktree(blocks_root, ctx); |
|
|
|
|
K_RUNLOCK(blocks_free); |
|
|
|
|
if (b_item) { |
|
|
|
|
tvs_to_buf(&(DATA_BLOCKS(b_item)->createdate), reply, sizeof(reply)); |
|
|
|
|
snprintf(tmp, sizeof(tmp), "lastblock=%s%cconfirmed=%s%c", |
|
|
|
@ -8666,8 +8668,10 @@ static char *cmd_pplns(__maybe_unused PGconn *conn, char *cmd, char *id,
|
|
|
|
|
blocks.height = height + 1; |
|
|
|
|
blocks.blockhash[0] = '\0'; |
|
|
|
|
look.data = (void *)(&blocks); |
|
|
|
|
K_RLOCK(blocks_free); |
|
|
|
|
b_item = find_before_in_ktree(blocks_root, &look, cmp_blocks, ctx); |
|
|
|
|
if (!b_item) { |
|
|
|
|
K_RUNLOCK(blocks_free); |
|
|
|
|
snprintf(reply, siz, "ERR.no block height %d", height); |
|
|
|
|
return strdup(reply); |
|
|
|
|
} |
|
|
|
@ -8676,6 +8680,7 @@ static char *cmd_pplns(__maybe_unused PGconn *conn, char *cmd, char *id,
|
|
|
|
|
break; |
|
|
|
|
b_item = prev_in_ktree(ctx); |
|
|
|
|
} |
|
|
|
|
K_RUNLOCK(blocks_free); |
|
|
|
|
if (!b_item || DATA_BLOCKS(b_item)->height != height) { |
|
|
|
|
snprintf(reply, siz, "ERR.unconfirmed block %d", height); |
|
|
|
|
return strdup(reply); |
|
|
|
|