diff options
| author | 2023-08-14 09:03:05 +0200 | |
|---|---|---|
| committer | 2023-08-14 09:03:05 +0200 | |
| commit | a1d083ff27f78ce41a24b132adde2a8fb406a222 (patch) | |
| tree | f49a12d24b360ddd105aea23bda22ff0bd2dd419 | |
| parent | Ignore 'Add' activities ASAP. (diff) | |
| download | penes-snac2-a1d083ff27f78ce41a24b132adde2a8fb406a222.tar.gz penes-snac2-a1d083ff27f78ce41a24b132adde2a8fb406a222.tar.xz penes-snac2-a1d083ff27f78ce41a24b132adde2a8fb406a222.zip | |
Backport from xs.
| -rw-r--r-- | xs.h | 10 | ||||
| -rw-r--r-- | xs_version.h | 2 |
2 files changed, 7 insertions, 5 deletions
| @@ -449,16 +449,18 @@ xs_str *xs_replace_in(xs_str *str, const char *sfrom, const char *sto, int times | |||
| 449 | 449 | ||
| 450 | int sfsz = strlen(sfrom); | 450 | int sfsz = strlen(sfrom); |
| 451 | int stsz = strlen(sto); | 451 | int stsz = strlen(sto); |
| 452 | int diff = stsz - sfsz; | ||
| 452 | char *ss; | 453 | char *ss; |
| 453 | int offset = 0; | 454 | int offset = 0; |
| 454 | 455 | ||
| 455 | while (times > 0 && (ss = strstr(str + offset, sfrom)) != NULL) { | 456 | while (times > 0 && (ss = strstr(str + offset, sfrom)) != NULL) { |
| 456 | int n_offset = ss - str; | 457 | int n_offset = ss - str; |
| 457 | 458 | ||
| 458 | if (sfsz != stsz) { | 459 | if (diff < 0) |
| 459 | str = xs_collapse(str, n_offset, sfsz); | 460 | str = xs_collapse(str, n_offset, -diff); |
| 460 | str = xs_expand(str, n_offset, stsz); | 461 | else |
| 461 | } | 462 | if (diff > 0) |
| 463 | str = xs_expand(str, n_offset, diff); | ||
| 462 | 464 | ||
| 463 | memcpy(str + n_offset, sto, stsz); | 465 | memcpy(str + n_offset, sto, stsz); |
| 464 | 466 | ||
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 */ | ||