From a1d083ff27f78ce41a24b132adde2a8fb406a222 Mon Sep 17 00:00:00 2001 From: default Date: Mon, 14 Aug 2023 09:03:05 +0200 Subject: [PATCH] Backport from xs. --- xs.h | 10 ++++++---- xs_version.h | 2 +- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/xs.h b/xs.h index 1f714b6..ff86500 100644 --- a/xs.h +++ b/xs.h @@ -449,16 +449,18 @@ xs_str *xs_replace_in(xs_str *str, const char *sfrom, const char *sto, int times int sfsz = strlen(sfrom); int stsz = strlen(sto); + int diff = stsz - sfsz; char *ss; int offset = 0; while (times > 0 && (ss = strstr(str + offset, sfrom)) != NULL) { int n_offset = ss - str; - if (sfsz != stsz) { - str = xs_collapse(str, n_offset, sfsz); - str = xs_expand(str, n_offset, stsz); - } + if (diff < 0) + str = xs_collapse(str, n_offset, -diff); + else + if (diff > 0) + str = xs_expand(str, n_offset, diff); memcpy(str + n_offset, sto, stsz); diff --git a/xs_version.h b/xs_version.h index d4753e2..73c6f47 100644 --- a/xs_version.h +++ b/xs_version.h @@ -1 +1 @@ -/* 0efaa0cfce82c0f8f7bde81359a2c55a41928af3 */ +/* 5b007ed034f8598be964d72f5becf24b379a7dd8 */