From b237924585e61532ada774bf9e70eadff00666dc Mon Sep 17 00:00:00 2001 From: Nick Wellnhofer Date: Sat, 18 Jan 2020 23:12:37 +0100 Subject: Use C string instead of chunk for link URL and title Use zero-terminated C strings instead of cmark_chunks without storing the length. This introduces a few additional strlen computations, but overhead should be low. Allows to reduce size of struct cmark_node later. --- src/commonmark.c | 26 ++++++++++---------------- 1 file changed, 10 insertions(+), 16 deletions(-) (limited to 'src/commonmark.c') diff --git a/src/commonmark.c b/src/commonmark.c index b89462b..89aef5b 100644 --- a/src/commonmark.c +++ b/src/commonmark.c @@ -119,24 +119,22 @@ static int shortest_unused_backtick_sequence(const char *code) { } static bool is_autolink(cmark_node *node) { - cmark_chunk *title; - cmark_chunk *url; + const unsigned char *title; + const unsigned char *url; cmark_node *link_text; - char *realurl; - int realurllen; if (node->type != CMARK_NODE_LINK) { return false; } - url = &node->as.link.url; - if (url->len == 0 || scan_scheme(url, 0) == 0) { + url = node->as.link.url; + if (url == NULL || _scan_scheme(url) == 0) { return false; } - title = &node->as.link.title; + title = node->as.link.title; // if it has a title, we can't treat it as an autolink: - if (title->len > 0) { + if (title && title[0]) { return false; } @@ -145,15 +143,11 @@ static bool is_autolink(cmark_node *node) { return false; } cmark_consolidate_text_nodes(link_text); - realurl = (char *)url->data; - realurllen = url->len; - if (strncmp(realurl, "mailto:", 7) == 0) { - realurl += 7; - realurllen -= 7; + if (strcmp((const char *)url, "mailto:") == 0) { + url += 7; } - return (realurllen == link_text->as.literal.len && - strncmp(realurl, (char *)link_text->as.literal.data, - link_text->as.literal.len) == 0); + return strncmp((const char *)url, (char *)link_text->as.literal.data, + link_text->as.literal.len) == 0; } // if node is a block node, returns node. -- cgit v1.2.3