From d2aee5bdde7ca64fc4bb8553d98cc7d2ac92c5e5 Mon Sep 17 00:00:00 2001 From: Cyrille Bagard Date: Thu, 15 Dec 2016 22:59:08 +0100 Subject: Fixed a bug when replacing strings. --- ChangeLog | 5 +++++ src/common/extstr.c | 24 ++++++++++++++---------- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/ChangeLog b/ChangeLog index faa863e..e0658ed 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,10 @@ 16-12-15 Cyrille Bagard + * src/common/extstr.c: + Fix a bug when replacing strings. + +16-12-15 Cyrille Bagard + * src/arch/arm/v7/helpers.c: * src/arch/arm/v7/helpers.h: Remove dead code and a compilation warning. diff --git a/src/common/extstr.c b/src/common/extstr.c index 0b37606..2e69e3f 100644 --- a/src/common/extstr.c +++ b/src/common/extstr.c @@ -189,21 +189,25 @@ char *strrpl(char *haystack, const char *needle1, const char *needle2) { index = found - haystack; - if (len1 != len2) + if (len2 > len1) { - if (len2 > len1) - inlen += len2 - len1; - - else - inlen -= len1 - len2; + inlen += (len2 - len1); haystack = (char *)realloc(haystack, inlen * sizeof(char *)); found = haystack + index; - if (len2 > len1) - memmove(found + len2, found + len1, inlen - len1 - (found - haystack)); - else - memmove(found + len1, found + len2, inlen - len1 - (found - haystack)); + memmove(found + len1, found + len2, inlen - index + len2); + + } + + else if (len2 < len1) + { + memmove(found + len2, found + len1, inlen - index - len1); + + inlen -= (len1 - len2); + + haystack = (char *)realloc(haystack, inlen * sizeof(char *)); + found = haystack + index; } -- cgit v0.11.2-87-g4458