From c8aba2ef8c76a989bd80ed0c39325d0e52753d86 Mon Sep 17 00:00:00 2001 From: Witold Filipczyk Date: Mon, 30 Jan 2023 15:59:43 +0100 Subject: [PATCH] [ecmascript] Avoid strlen --- src/ecmascript/mujs/xhr.cpp | 9 ++++----- src/ecmascript/quickjs/xhr.cpp | 10 ++++------ src/ecmascript/spidermonkey/xhr.cpp | 10 ++++------ 3 files changed, 12 insertions(+), 17 deletions(-) diff --git a/src/ecmascript/mujs/xhr.cpp b/src/ecmascript/mujs/xhr.cpp index 9b5c1d25..c26fcb6e 100644 --- a/src/ecmascript/mujs/xhr.cpp +++ b/src/ecmascript/mujs/xhr.cpp @@ -145,6 +145,7 @@ struct mjs_xhr { int method; int status; int timeout; + size_t responseLength; unsigned short readyState; }; @@ -516,6 +517,7 @@ mjs_xhr_open(js_State *J) xhr->responseHeaders.clear(); mem_free_set(&xhr->response, NULL); mem_free_set(&xhr->responseText, NULL); + xhr->responseLength = 0; if (xhr->readyState != OPENED) { xhr->readyState = OPENED; @@ -782,11 +784,7 @@ write_data(void *ptr, size_t size, size_t nmemb, void *stream) { struct mjs_xhr *xhr = (mjs_xhr *)stream; - size_t length = 0; - - if (xhr->responseText) { - length = strlen(xhr->responseText); - } + size_t length = xhr->responseLength; char *n = (char *)mem_realloc(xhr->responseText, length + size * nmemb + 1); @@ -797,6 +795,7 @@ write_data(void *ptr, size_t size, size_t nmemb, void *stream) } memcpy(xhr->responseText + length, ptr, (size * nmemb)); xhr->responseText[length + size * nmemb] = '\0'; + xhr->responseLength += size * nmemb; return nmemb; } diff --git a/src/ecmascript/quickjs/xhr.cpp b/src/ecmascript/quickjs/xhr.cpp index f930bcf3..c22e17ea 100644 --- a/src/ecmascript/quickjs/xhr.cpp +++ b/src/ecmascript/quickjs/xhr.cpp @@ -230,6 +230,7 @@ typedef struct { int status; char *status_text; char *response_text; + size_t response_length; struct { JSValue url; @@ -1192,6 +1193,7 @@ xhr_open(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *argv) x->events[i] = JS_UNDEFINED; } mem_free_set(&x->response_text, NULL); + x->response_length = 0; } if (x->ready_state < XHR_RSTATE_OPENED) { @@ -1317,12 +1319,7 @@ static size_t write_data(void *ptr, size_t size, size_t nmemb, void *stream) { Xhr *x = (Xhr *)stream; - - size_t length = 0; - - if (x->response_text) { - length = strlen(x->response_text); - } + size_t length = x->response_length; char *n = (char *)mem_realloc(x->response_text, length + size * nmemb + 1); @@ -1333,6 +1330,7 @@ write_data(void *ptr, size_t size, size_t nmemb, void *stream) } memcpy(x->response_text + length, ptr, (size * nmemb)); x->response_text[length + size * nmemb] = '\0'; + x->response_length += size * nmemb; return nmemb; } diff --git a/src/ecmascript/spidermonkey/xhr.cpp b/src/ecmascript/spidermonkey/xhr.cpp index c7daef3b..1f13850d 100644 --- a/src/ecmascript/spidermonkey/xhr.cpp +++ b/src/ecmascript/spidermonkey/xhr.cpp @@ -153,6 +153,7 @@ struct xhr { int status; int timeout; unsigned short readyState; + size_t responseLength; }; static void onload_run(void *data); @@ -678,6 +679,7 @@ xhr_open(JSContext *ctx, unsigned int argc, JS::Value *rval) xhr->responseHeaders.clear(); mem_free_set(&xhr->response, NULL); mem_free_set(&xhr->responseText, NULL); + xhr->responseLength = 0; if (xhr->readyState != OPENED) { xhr->readyState = OPENED; @@ -934,12 +936,7 @@ static size_t write_data(void *ptr, size_t size, size_t nmemb, void *stream) { struct xhr *xhr = (struct xhr *)stream; - - size_t length = 0; - - if (xhr->responseText) { - length = strlen(xhr->responseText); - } + size_t length = xhr->responseLength; char *n = (char *)mem_realloc(xhr->responseText, length + size * nmemb + 1); if (n) { @@ -949,6 +946,7 @@ write_data(void *ptr, size_t size, size_t nmemb, void *stream) } memcpy(xhr->responseText + length, ptr, (size * nmemb)); xhr->responseText[length + size * nmemb] = '\0'; + xhr->responseLength += size * nmemb; return nmemb; }