From da7e57f4cc016c254899c9438de1cbc9871a93bc Mon Sep 17 00:00:00 2001 From: default Date: Sun, 8 Jan 2023 10:39:11 +0100 Subject: [PATCH] Backport from xs. --- xs.h | 28 ++++++++++++++++++++++------ xs_curl.h | 2 +- xs_glob.h | 2 +- xs_version.h | 2 +- 4 files changed, 25 insertions(+), 9 deletions(-) diff --git a/xs.h b/xs.h index b1e2cec..38d3050 100644 --- a/xs.h +++ b/xs.h @@ -128,6 +128,10 @@ void *_xs_realloc(void *ptr, size_t size, const char *file, int line, const char fclose(f); } +#else + (void)file; + (void)line; + (void)func; #endif return ndata; @@ -669,26 +673,38 @@ int xs_list_in(char *list, const char *val) d_char *xs_join(char *list, const char *sep) /* joins a list into a string */ { - d_char *s; + d_char *s = NULL; char *v; int c = 0; - - s = xs_str_new(NULL); + int offset = 0; + int ssz = strlen(sep); while (xs_list_iter(&list, &v)) { /* refuse to join non-string values */ if (xs_type(v) == XSTYPE_STRING) { + int sz; + /* add the separator */ - if (c != 0) - s = xs_str_cat(s, sep); + if (c != 0) { + s = xs_realloc(s, offset + ssz); + memcpy(s + offset, sep, ssz); + offset += ssz; + } /* add the element */ - s = xs_str_cat(s, v); + sz = strlen(v); + s = xs_realloc(s, offset + sz); + memcpy(s + offset, v, sz); + offset += sz; c++; } } + /* null-terminate */ + s = xs_realloc(s, _xs_blk_size(offset + 1)); + s[offset] = '\0'; + return s; } diff --git a/xs_curl.h b/xs_curl.h index 7ecef2d..2b07cad 100644 --- a/xs_curl.h +++ b/xs_curl.h @@ -71,7 +71,7 @@ static int _post_callback(char *buffer, size_t size, int sz = pd->size - pd->offset; /* if it's still bigger than the provided space, trim */ - if (sz > size * nitems) + if (sz > (int) (size * nitems)) sz = size * nitems; memcpy(buffer, pd->data + pd->offset, sz); diff --git a/xs_glob.h b/xs_glob.h index 978c200..a69cba1 100644 --- a/xs_glob.h +++ b/xs_glob.h @@ -21,7 +21,7 @@ d_char *xs_glob_n(const char *spec, int basename, int reverse, int max) if (glob(spec, 0, NULL, &globbuf) == 0) { int n; - if (max > globbuf.gl_pathc) + if (max > (int) globbuf.gl_pathc) max = globbuf.gl_pathc; for (n = 0; n < max; n++) { diff --git a/xs_version.h b/xs_version.h index e400777..682964a 100644 --- a/xs_version.h +++ b/xs_version.h @@ -1 +1 @@ -/* ae969c59232f4907369f10b84796456388fcf109 */ +/* a04f6c8482d42d4d972f5190ecbad5c0509531b4 */