From a396827602bfd4380f75c33ab22f9158d2839cbe Mon Sep 17 00:00:00 2001 From: deuce <> Date: Fri, 4 Dec 2015 09:23:18 +0000 Subject: [PATCH] Don't use strlen() every time you append to an "infinite line length paragraph"... track the length instead. Speeds up word_wrap() with huge messages that don't have many paragraphs. --- src/sbbs3/wordwrap.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/sbbs3/wordwrap.c b/src/sbbs3/wordwrap.c index 62f4c8e5cb..f096f928e0 100644 --- a/src/sbbs3/wordwrap.c +++ b/src/sbbs3/wordwrap.c @@ -272,6 +272,7 @@ struct paragraph { struct prefix prefix; char *text; size_t alloc_size; + size_t len; }; /* @@ -296,18 +297,18 @@ static void free_paragraphs(struct paragraph *paragraph, int count) */ static BOOL paragraph_append(struct paragraph *paragraph, const char *bytes, size_t count) { - size_t len = strlen(paragraph->text); char *new_text; - while (len + count + 1 > paragraph->alloc_size) { + while (paragraph->len + count + 1 > paragraph->alloc_size) { new_text = realloc(paragraph->text, paragraph->alloc_size * 2); if (new_text == NULL) return FALSE; paragraph->text = new_text; paragraph->alloc_size *= 2; } - memcpy(paragraph->text + len, bytes, count); - paragraph->text[len+count] = 0; + memcpy(paragraph->text + paragraph->len, bytes, count); + paragraph->text[paragraph->len+count] = 0; + paragraph->len += count; return TRUE; } @@ -342,6 +343,7 @@ static struct paragraph *word_unwrap(char *inbuf, int oldlen, BOOL handle_quotes } ret = newret; ret[paragraph].text = (char *)malloc(oldlen+1); + ret[paragraph].len = 0; ret[paragraph].prefix.bytes = NULL; if (ret[paragraph].text == NULL) { free_paragraphs(ret, paragraph+1); -- GitLab