* and address <b>addr</b> or <b>addr32h</b>.
*
* The <b>nickname</b> and <b>addr</b> fields are optional and may be set to
- * NULL. The <b>addr32h</b> field is optional and may be set to
- * <b>addr32h</b>.
+ * NULL. The <b>addr32h</b> field is optional and may be set to 0.
*
* Return a pointer to the front of <b>buf</b>.
*/
uint32_t addr32h)
{
char *cp;
+
+ if (!buf)
+ return "<NULL BUFFER>";
+
buf[0] = '$';
base16_encode(buf+1, HEX_DIGEST_LEN+1, id_digest, DIGEST_LEN);
cp = buf+1+HEX_DIGEST_LEN;
const char *
router_get_description(char *buf, const routerinfo_t *ri)
{
+ if (!ri)
+ return "<null>";
return format_node_description(buf,
ri->cache_info.identity_digest,
ri->is_named,
const char *
routerstatus_get_description(char *buf, const routerstatus_t *rs)
{
+ if (!rs)
+ return "<null>";
return format_node_description(buf,
rs->identity_digest,
rs->is_named,
const char *
extend_info_get_description(char *buf, const extend_info_t *ei)
{
+ if (!ei)
+ return "<null>";
return format_node_description(buf,
ei->identity_digest,
0,
int is_legal_nickname_or_hexdigest(const char *s);
int is_legal_hexdigest(const char *s);
+/**
+ * Longest allowed output of format_node_description, plus 1 character for
+ * NUL. This allows space for:
+ * "$FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF~xxxxxxxxxxxxxxxxxxx at"
+ * " [ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255]"
+ * plus a terminating NUL.
+ */
#define NODE_DESC_BUF_LEN (MAX_VERBOSE_NICKNAME_LEN+4+TOR_ADDR_BUF_LEN)
const char *format_node_description(char *buf,
const char *id_digest,