diff --git a/src/Events.c b/src/Events.c index a78e756..e9edf12 100644 --- a/src/Events.c +++ b/src/Events.c @@ -91,9 +91,10 @@ MatrixCreateMedia(char *mxc, char *body, char *mime, FileInfo *info) matrix_type = "m.file"; if (mime) { - size_t i; + size_t i, len; mime_type = StrDuplicate(mime); - for (i = 0; i < strlen(mime); i++) + len = strlen(mime); + for (i = 0; i < len; i++) { if (mime_type[i] == '/') { diff --git a/src/Main.c b/src/Main.c index af2496d..2ddd35f 100644 --- a/src/Main.c +++ b/src/Main.c @@ -79,7 +79,7 @@ Main(Array *args, HashMap *env) ); ParseePrintASCII(); Log(LOG_INFO, "======================="); - Log(LOG_INFO, "(C)opyright 2023 LDA"); + Log(LOG_INFO, "(C)opyright 2024 LDA"); Log(LOG_INFO, "(This program is free software, see LICENSE.)"); LogConfigIndent(LogConfigGlobal()); @@ -153,7 +153,6 @@ Main(Array *args, HashMap *env) } } Free(opts); - ParseeSetThreads(xmpp, http); } if (verbose >= PARSEE_VERBOSE_COMICAL) @@ -167,6 +166,7 @@ Main(Array *args, HashMap *env) { goto end; } + ParseeSetThreads(xmpp, http); Log(LOG_NOTICE, "Connecting to XMPP..."); diff --git a/src/Parsee/User.c b/src/Parsee/User.c index 5614ca2..6d6d0be 100644 --- a/src/Parsee/User.c +++ b/src/Parsee/User.c @@ -147,14 +147,15 @@ char * ParseeEncodeJID(const ParseeConfig *c, char *jid, bool trim) { char *ret, *tmp; - size_t i; + size_t i, len; if (!c || !jid) { return NULL; } ret = StrConcat(2, c->namespace_base, "_l_"); - for (i = 0; i < strlen(jid); i++) + len = strlen(jid); + for (i = 0; i < len; i++) { char cpy = jid[i]; char cs[4] = { 0 }; @@ -193,7 +194,7 @@ char * ParseeGetLocal(char *mxid) { char *cpy; - size_t i; + size_t i, len; if (!mxid) { return NULL; @@ -203,12 +204,14 @@ ParseeGetLocal(char *mxid) return StrDuplicate(mxid); } - mxid++; - cpy = Malloc(strlen(mxid) + 1); - memset(cpy, '\0', strlen(mxid) + 1); - memcpy(cpy, mxid, strlen(mxid)); + len = strlen(mxid); - for (i = 0; i < strlen(mxid); i++) + mxid++; + cpy = Malloc(len + 1); + memset(cpy, '\0', len + 1); + memcpy(cpy, mxid, len); + + for (i = 0; i < len; i++) { if (cpy[i] == ':') { @@ -224,15 +227,16 @@ char * ParseeEncodeMXID(char *mxid) { char *ret; - size_t i, j; + size_t i, j, len; if (!mxid) { return NULL; } /* Worst case scenario of 3-bytes the char */ - ret = Malloc(strlen(mxid) * 3 + 1); - for (i = 0, j = 0; i < strlen(mxid); i++) + len = strlen(mxid); + ret = Malloc(len * 3 + 1); + for (i = 0, j = 0; i < len; i++) { char src = mxid[i]; @@ -372,14 +376,15 @@ char * ParseeTrimJID(char *jid) { char *ret; - size_t i; + size_t i, len; if (!jid) { return NULL; } ret = StrDuplicate(jid); - for (i = 0; i < strlen(ret); i++) + len = strlen(ret); + for (i = 0; i < len; i++) { if (ret[i] == '/') { diff --git a/src/XML/Parser.c b/src/XML/Parser.c index 359e637..506e49d 100644 --- a/src/XML/Parser.c +++ b/src/XML/Parser.c @@ -114,14 +114,19 @@ XMLCDecode(Stream *stream, bool autofree, bool html) void XMLEncodeString(Stream *stream, char *data) { - size_t i; + size_t i, len; if (!stream || !data) { return; } - for (i = 0; i < strlen(data); i++) + /* TODO: I should write a "Parsee Best Practice" guideline and make sure + * people understand to NOT constantly recompute lengths parameter on + * these kinds of loops. ArraySize is fine(since its indirection), but + * operations like strlen take time! */ + len = strlen(data); + for (i = 0; i < len; i++) { char c = data[i]; if (c == '<') diff --git a/src/XML/SAX.c b/src/XML/SAX.c index f2eb814..d21113c 100644 --- a/src/XML/SAX.c +++ b/src/XML/SAX.c @@ -295,7 +295,7 @@ static bool XMLookahead(XMLexer *lexer, const char *str, bool skip) { int *stack; - size_t top, i; + size_t top, i, len; ssize_t ntop; bool ret = false; if (!lexer || !str) @@ -304,9 +304,10 @@ XMLookahead(XMLexer *lexer, const char *str, bool skip) } top = 0; - stack = Malloc(strlen(str) * sizeof(*stack)); + len = strlen(str); + stack = Malloc(len * sizeof(*stack)); - for (i = 0; i < strlen(str); i++) + for (i = 0; i < len; i++) { char c = str[i]; int getc = XMLGetc(lexer);