1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- #include "libbb.h"
- unsigned FAST_FUNC count_strstr(const char *str, const char *sub)
- {
- size_t sub_len = strlen(sub);
- unsigned count = 0;
- while ((str = strstr(str, sub)) != NULL) {
- count++;
- str += sub_len;
- }
- return count;
- }
- char* FAST_FUNC xmalloc_substitute_string(const char *src, int count, const char *sub, const char *repl)
- {
- char *buf, *dst, *end;
- size_t sub_len = strlen(sub);
- size_t repl_len = strlen(repl);
-
- buf = dst = xmalloc(strlen(src) + count * ((int)repl_len - (int)sub_len) + 1);
-
- while ((end = strstr(src, sub)) != NULL) {
- dst = mempcpy(dst, src, end - src);
- dst = mempcpy(dst, repl, repl_len);
-
- src = end + sub_len;
- }
- strcpy(dst, src);
-
- return buf;
- }
|