MT#55283 avoid duplication of buf-alloc'd strings

Do a quick test to see if a string is already allocated from the memory
arena. If it is, don't duplicate it, just return the original
allocation.

Change-Id: Ia74442c15eef6dc7f3fabd3975ec11e4130eca21
rfuchs/test
Richard Fuchs 1 year ago
parent 695f05fe91
commit 027c389397

@ -314,6 +314,7 @@ typedef bencode_buffer_t call_buffer_t;
#define call_buffer_alloc bencode_buffer_alloc
#define call_buffer_init bencode_buffer_init
#define call_buffer_free bencode_buffer_free
#define call_buffer_contains bencode_buffer_contains
@ -864,11 +865,16 @@ INLINE void *call_malloc(size_t l) {
ret = call_buffer_alloc(&call_memory_arena->buffer, l);
return ret;
}
INLINE bool call_contains(const void *p) {
return call_buffer_contains(&call_memory_arena->buffer, p);
}
INLINE char *call_strdup_len(const char *s, size_t len) {
char *r;
if (!s)
return NULL;
if (call_contains(s))
return (char *) s;
r = call_malloc(len + 1);
memcpy(r, s, len);
r[len] = 0;
@ -897,6 +903,8 @@ INLINE str call_str_cpy_c(const char *in) {
return call_str_cpy_len(in, in ? strlen(in) : 0);
}
INLINE str *call_str_dup(const str *in) {
if (call_contains(in))
return (str *) in;
str *out;
out = call_malloc(sizeof(*out));
*out = call_str_cpy_len(in->s, in->len);

Loading…
Cancel
Save