summaryrefslogtreecommitdiff
path: root/xs.h
diff options
context:
space:
mode:
Diffstat (limited to 'xs.h')
-rw-r--r--xs.h12
1 files changed, 8 insertions, 4 deletions
diff --git a/xs.h b/xs.h
index fef91b7..c4c961b 100644
--- a/xs.h
+++ b/xs.h
@@ -65,8 +65,10 @@ xs_str *xs_str_new(const char *str);
65xs_str *xs_str_wrap_i(const char *prefix, xs_str *str, const char *suffix); 65xs_str *xs_str_wrap_i(const char *prefix, xs_str *str, const char *suffix);
66#define xs_str_prepend_i(str, prefix) xs_str_wrap_i(prefix, str, NULL) 66#define xs_str_prepend_i(str, prefix) xs_str_wrap_i(prefix, str, NULL)
67#define xs_str_cat(str, suffix) xs_str_wrap_i(NULL, str, suffix) 67#define xs_str_cat(str, suffix) xs_str_wrap_i(NULL, str, suffix)
68xs_str *xs_replace_i(xs_str *str, const char *sfrom, const char *sto); 68xs_str *xs_replace_in(xs_str *str, const char *sfrom, const char *sto, int times);
69#define xs_replace(str, sfrom, sto) xs_replace_i(xs_dup(str), sfrom, sto) 69#define xs_replace_i(str, sfrom, sto) xs_replace_in(str, sfrom, sto, XS_ALL)
70#define xs_replace(str, sfrom, sto) xs_replace_in(xs_dup(str), sfrom, sto, XS_ALL)
71#define xs_replace_n(str, sfrom, sto, times) xs_replace_in(xs_dup(str), sfrom, sto, times)
70xs_str *xs_fmt(const char *fmt, ...); 72xs_str *xs_fmt(const char *fmt, ...);
71int xs_str_in(const char *haystack, const char *needle); 73int xs_str_in(const char *haystack, const char *needle);
72int _xs_startsorends(const char *str, const char *xfix, int ends); 74int _xs_startsorends(const char *str, const char *xfix, int ends);
@@ -416,7 +418,7 @@ xs_str *xs_str_wrap_i(const char *prefix, xs_str *str, const char *suffix)
416} 418}
417 419
418 420
419xs_str *xs_replace_i(xs_str *str, const char *sfrom, const char *sto) 421xs_str *xs_replace_in(xs_str *str, const char *sfrom, const char *sto, int times)
420/* replaces inline all sfrom with sto */ 422/* replaces inline all sfrom with sto */
421{ 423{
422 XS_ASSERT_TYPE(str, XSTYPE_STRING); 424 XS_ASSERT_TYPE(str, XSTYPE_STRING);
@@ -426,7 +428,7 @@ xs_str *xs_replace_i(xs_str *str, const char *sfrom, const char *sto)
426 char *ss; 428 char *ss;
427 int offset = 0; 429 int offset = 0;
428 430
429 while ((ss = strstr(str + offset, sfrom)) != NULL) { 431 while (times > 0 && (ss = strstr(str + offset, sfrom)) != NULL) {
430 int n_offset = ss - str; 432 int n_offset = ss - str;
431 433
432 str = xs_collapse(str, n_offset, sfsz); 434 str = xs_collapse(str, n_offset, sfsz);
@@ -434,6 +436,8 @@ xs_str *xs_replace_i(xs_str *str, const char *sfrom, const char *sto)
434 memcpy(str + n_offset, sto, stsz); 436 memcpy(str + n_offset, sto, stsz);
435 437
436 offset = n_offset + stsz; 438 offset = n_offset + stsz;
439
440 times--;
437 } 441 }
438 442
439 return str; 443 return str;