aboutsummaryrefslogtreecommitdiffstats
path: root/wsutil
diff options
context:
space:
mode:
authorJoão Valverde <j@v6e.pt>2022-12-14 19:38:45 +0000
committerJoão Valverde <j@v6e.pt>2022-12-15 11:08:41 +0000
commit1f3452983937d3cb557741cf7f236000be34c41c (patch)
tree32082df28218eebbecb46d613a08a91550b78e5b /wsutil
parent963dba2d60cb10b5fe7537de623d09ffb773afc0 (diff)
wmem: Optimize some strbuf functions
The changes in commit 32f88ad22c allow removing some checks that could speed up the code.
Diffstat (limited to 'wsutil')
-rw-r--r--wsutil/wmem/wmem_strbuf.c76
1 files changed, 33 insertions, 43 deletions
diff --git a/wsutil/wmem/wmem_strbuf.c b/wsutil/wmem/wmem_strbuf.c
index 6f4666dba6..8111f01d00 100644
--- a/wsutil/wmem/wmem_strbuf.c
+++ b/wsutil/wmem/wmem_strbuf.c
@@ -128,12 +128,12 @@ wmem_strbuf_append(wmem_strbuf_t *strbuf, const gchar *str)
}
append_len = strlen(str);
-
wmem_strbuf_grow(strbuf, append_len);
- (void) g_strlcpy(&strbuf->str[strbuf->len], str, WMEM_STRBUF_RAW_ROOM(strbuf));
-
- strbuf->len = MIN(strbuf->len + append_len, strbuf->alloc_size - 1);
+ ASSERT(WMEM_STRBUF_RAW_ROOM(strbuf) >= append_len + 1);
+ memcpy(&strbuf->str[strbuf->len], str, append_len);
+ strbuf->len += append_len;
+ strbuf->str[strbuf->len] = '\0';
}
void
@@ -212,11 +212,9 @@ wmem_strbuf_append_c(wmem_strbuf_t *strbuf, const gchar c)
{
wmem_strbuf_grow(strbuf, 1);
- if (WMEM_STRBUF_ROOM(strbuf) >= 1) {
- strbuf->str[strbuf->len] = c;
- strbuf->len++;
- strbuf->str[strbuf->len] = '\0';
- }
+ strbuf->str[strbuf->len] = c;
+ strbuf->len++;
+ strbuf->str[strbuf->len] = '\0';
}
void
@@ -229,11 +227,9 @@ wmem_strbuf_append_unichar(wmem_strbuf_t *strbuf, const gunichar c)
wmem_strbuf_grow(strbuf, charlen);
- if (WMEM_STRBUF_ROOM(strbuf) >= charlen) {
- memcpy(&strbuf->str[strbuf->len], buf, charlen);
- strbuf->len += charlen;
- strbuf->str[strbuf->len] = '\0';
- }
+ memcpy(&strbuf->str[strbuf->len], buf, charlen);
+ strbuf->len += charlen;
+ strbuf->str[strbuf->len] = '\0';
}
void
@@ -256,13 +252,11 @@ wmem_strbuf_append_hex(wmem_strbuf_t *strbuf, uint8_t ch)
{
wmem_strbuf_grow(strbuf, HEX_CODELEN * 1);
- if (WMEM_STRBUF_ROOM(strbuf) >= HEX_CODELEN * 1) {
- strbuf->str[strbuf->len++] = '\\';
- strbuf->str[strbuf->len++] = 'x';
- strbuf->str[strbuf->len++] = hex[(ch >> 4) & 0xF];
- strbuf->str[strbuf->len++] = hex[(ch >> 0) & 0xF];
- strbuf->str[strbuf->len] = '\0';
- }
+ strbuf->str[strbuf->len++] = '\\';
+ strbuf->str[strbuf->len++] = 'x';
+ strbuf->str[strbuf->len++] = hex[(ch >> 4) & 0xF];
+ strbuf->str[strbuf->len++] = hex[(ch >> 0) & 0xF];
+ strbuf->str[strbuf->len] = '\0';
}
#define BMP_CODELEN 6
@@ -272,15 +266,13 @@ void append_hex_bmp(wmem_strbuf_t *strbuf, gunichar ch)
{
wmem_strbuf_grow(strbuf, BMP_CODELEN * 1);
- if (WMEM_STRBUF_ROOM(strbuf) >= BMP_CODELEN * 1) {
- strbuf->str[strbuf->len++] = '\\';
- strbuf->str[strbuf->len++] = 'u';
- strbuf->str[strbuf->len++] = hex[(ch >> 12) & 0xF];
- strbuf->str[strbuf->len++] = hex[(ch >> 8) & 0xF];
- strbuf->str[strbuf->len++] = hex[(ch >> 4) & 0xF];
- strbuf->str[strbuf->len++] = hex[(ch >> 0) & 0xF];
- strbuf->str[strbuf->len] = '\0';
- }
+ strbuf->str[strbuf->len++] = '\\';
+ strbuf->str[strbuf->len++] = 'u';
+ strbuf->str[strbuf->len++] = hex[(ch >> 12) & 0xF];
+ strbuf->str[strbuf->len++] = hex[(ch >> 8) & 0xF];
+ strbuf->str[strbuf->len++] = hex[(ch >> 4) & 0xF];
+ strbuf->str[strbuf->len++] = hex[(ch >> 0) & 0xF];
+ strbuf->str[strbuf->len] = '\0';
}
#define ANY_CODELEN 10
@@ -290,19 +282,17 @@ void append_hex_any(wmem_strbuf_t *strbuf, gunichar ch)
{
wmem_strbuf_grow(strbuf, ANY_CODELEN * 1);
- if (WMEM_STRBUF_ROOM(strbuf) >= ANY_CODELEN * 1) {
- strbuf->str[strbuf->len++] = '\\';
- strbuf->str[strbuf->len++] = 'U';
- strbuf->str[strbuf->len++] = hex[(ch >> 28) & 0xF];
- strbuf->str[strbuf->len++] = hex[(ch >> 24) & 0xF];
- strbuf->str[strbuf->len++] = hex[(ch >> 20) & 0xF];
- strbuf->str[strbuf->len++] = hex[(ch >> 16) & 0xF];
- strbuf->str[strbuf->len++] = hex[(ch >> 12) & 0xF];
- strbuf->str[strbuf->len++] = hex[(ch >> 8) & 0xF];
- strbuf->str[strbuf->len++] = hex[(ch >> 4) & 0xF];
- strbuf->str[strbuf->len++] = hex[(ch >> 0) & 0xF];
- strbuf->str[strbuf->len] = '\0';
- }
+ strbuf->str[strbuf->len++] = '\\';
+ strbuf->str[strbuf->len++] = 'U';
+ strbuf->str[strbuf->len++] = hex[(ch >> 28) & 0xF];
+ strbuf->str[strbuf->len++] = hex[(ch >> 24) & 0xF];
+ strbuf->str[strbuf->len++] = hex[(ch >> 20) & 0xF];
+ strbuf->str[strbuf->len++] = hex[(ch >> 16) & 0xF];
+ strbuf->str[strbuf->len++] = hex[(ch >> 12) & 0xF];
+ strbuf->str[strbuf->len++] = hex[(ch >> 8) & 0xF];
+ strbuf->str[strbuf->len++] = hex[(ch >> 4) & 0xF];
+ strbuf->str[strbuf->len++] = hex[(ch >> 0) & 0xF];
+ strbuf->str[strbuf->len] = '\0';
}
size_t