diff options
Diffstat (limited to 'xs.h')
| -rw-r--r-- | xs.h | 12 |
1 files changed, 8 insertions, 4 deletions
| @@ -65,8 +65,10 @@ xs_str *xs_str_new(const char *str); | |||
| 65 | xs_str *xs_str_wrap_i(const char *prefix, xs_str *str, const char *suffix); | 65 | xs_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) |
| 68 | xs_str *xs_replace_i(xs_str *str, const char *sfrom, const char *sto); | 68 | xs_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) | ||
| 70 | xs_str *xs_fmt(const char *fmt, ...); | 72 | xs_str *xs_fmt(const char *fmt, ...); |
| 71 | int xs_str_in(const char *haystack, const char *needle); | 73 | int xs_str_in(const char *haystack, const char *needle); |
| 72 | int _xs_startsorends(const char *str, const char *xfix, int ends); | 74 | int _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 | ||
| 419 | xs_str *xs_replace_i(xs_str *str, const char *sfrom, const char *sto) | 421 | xs_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; |