]> gitweb.hhaalo.de Git - mv_none_space.git/commitdiff
change copy without single char copy
authorBastian Dehn <hhaalo@arcor.de>
Thu, 12 Mar 2026 18:53:10 +0000 (19:53 +0100)
committerBastian Dehn <hhaalo@arcor.de>
Thu, 12 Mar 2026 18:53:10 +0000 (19:53 +0100)
src/rename.c

index fcb23653c87a13c1c7576d32494e0538c95d2edc..da3b2b5a1be62472b7a2a37f4cb45f55584dd22f 100644 (file)
@@ -39,16 +39,19 @@ char* replace(char** src, const char* pattern, const char* replace_str)
                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;