return NULL;
memset(output, 0, outlen);
- uint32_t outi = 0;
+ uint32_t inpos = 0;
+ uint32_t outpos = 0;
for (uint32_t i = 0; i < len; i++) {
if (strncmp(*src + i, pattern, plen) == 0) {
- memcpy(&output[outi], replace_str, rlen);
+ memcpy(&output[outpos], *src + inpos, i - inpos);
+ outpos += i - inpos;
+ memcpy(&output[outpos], replace_str, rlen);
+ inpos = i + plen;
i += plen - 1;
- outi += rlen;
- } else {
- output[outi++] = (*src)[i];
+ outpos += rlen;
}
}
+ memcpy(&output[outpos], *src + inpos, len - inpos + 1);
free(*src);
*src = NULL;