sal/rtl/string.cxx  |   14 +-------------
 sal/rtl/strtmpl.hxx |    2 +-
 sal/rtl/ustring.cxx |   38 ++------------------------------------
 3 files changed, 4 insertions(+), 50 deletions(-)

New commits:
commit 01645b021c3609f86b8ebca100f54006f467573f
Author:     Mike Kaganski <mike.kagan...@collabora.com>
AuthorDate: Thu Feb 17 08:50:12 2022 +0100
Commit:     Mike Kaganski <mike.kagan...@collabora.com>
CommitDate: Thu Feb 17 21:19:25 2022 +0100

    Deduplicate some code
    
    Change-Id: Ib05624739cce31b08fc409f238d447ed8d99bad9
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/130016
    Tested-by: Jenkins
    Reviewed-by: Mike Kaganski <mike.kagan...@collabora.com>

diff --git a/sal/rtl/string.cxx b/sal/rtl/string.cxx
index a2020561a7c7..3c8c01e98b52 100644
--- a/sal/rtl/string.cxx
+++ b/sal/rtl/string.cxx
@@ -339,19 +339,7 @@ void rtl_string_newReplaceFirst(
         if (str->length - fromLength > SAL_MAX_INT32 - toLength) {
             std::abort();
         }
-        sal_Int32 n = str->length - fromLength + toLength;
-        rtl_string_acquire(str); // in case *newStr == str
-        rtl_string_new_WithLength(newStr, n);
-        if (n != 0) {
-            (*newStr)->length = n;
-            assert(i >= 0 && i < str->length);
-            memcpy((*newStr)->buffer, str->buffer, i);
-            memcpy((*newStr)->buffer + i, to, toLength);
-            memcpy(
-                (*newStr)->buffer + i + toLength, str->buffer + i + fromLength,
-                str->length - i - fromLength);
-        }
-        rtl_string_release(str);
+        rtl::str::newReplaceStrAt(newStr, str, i, fromLength, to, toLength);
     }
     *index = i;
 }
diff --git a/sal/rtl/strtmpl.hxx b/sal/rtl/strtmpl.hxx
index 4f04cc404ee5..51dd4d0e191b 100644
--- a/sal/rtl/strtmpl.hxx
+++ b/sal/rtl/strtmpl.hxx
@@ -1481,7 +1481,7 @@ void newReplaceStrAt                                ( 
IMPL_RTL_STRINGDATA** ppTh
     assert(nIndex >= 0 && nIndex <= pStr->length);
     assert(nCount >= 0);
     assert(nCount <= pStr->length - nIndex);
-    assert(pNewSubStr);
+    assert(pNewSubStr != nullptr || nNewSubStrLen == 0);
     assert(nNewSubStrLen >= 0);
     /* Append? */
     if ( nIndex >= pStr->length )
diff --git a/sal/rtl/ustring.cxx b/sal/rtl/ustring.cxx
index 70048db58f6e..5a4f16b88fcb 100644
--- a/sal/rtl/ustring.cxx
+++ b/sal/rtl/ustring.cxx
@@ -1213,24 +1213,7 @@ void rtl_uString_newReplaceFirstAsciiLUtf16L(
             rtl_uString_release(*newStr);
             *newStr = nullptr;
         } else {
-            sal_Int32 n = str->length - fromLength + toLength;
-            rtl_uString_acquire(str); // in case *newStr == str
-            rtl_uString_new_WithLength(newStr, n);
-            if (n != 0 && /*TODO:*/ *newStr != nullptr) {
-                (*newStr)->length = n;
-                assert(i >= 0 && i < str->length);
-                memcpy(
-                    (*newStr)->buffer, str->buffer, i * sizeof (sal_Unicode));
-                if (toLength != 0) {
-                    memcpy(
-                        (*newStr)->buffer + i, to, toLength * sizeof 
(sal_Unicode));
-                }
-                memcpy(
-                    (*newStr)->buffer + i + toLength,
-                    str->buffer + i + fromLength,
-                    (str->length - i - fromLength) * sizeof (sal_Unicode));
-            }
-            rtl_uString_release(str);
+            rtl::str::newReplaceStrAt(newStr, str, i, fromLength, to, 
toLength);
         }
     }
     *index = i;
@@ -1306,24 +1289,7 @@ void rtl_uString_newReplaceFirstUtf16LUtf16L(
             rtl_uString_release(*newStr);
             *newStr = nullptr;
         } else {
-            sal_Int32 n = str->length - fromLength + toLength;
-            rtl_uString_acquire(str); // in case *newStr == str
-            rtl_uString_new_WithLength(newStr, n);
-            if (n != 0 && /*TODO:*/ *newStr != nullptr) {
-                (*newStr)->length = n;
-                assert(i >= 0 && i < str->length);
-                memcpy(
-                    (*newStr)->buffer, str->buffer, i * sizeof (sal_Unicode));
-                if (toLength != 0) {
-                    memcpy(
-                        (*newStr)->buffer + i, to, toLength * sizeof 
(sal_Unicode));
-                }
-                memcpy(
-                    (*newStr)->buffer + i + toLength,
-                    str->buffer + i + fromLength,
-                    (str->length - i - fromLength) * sizeof (sal_Unicode));
-            }
-            rtl_uString_release(str);
+            rtl::str::newReplaceStrAt(newStr, str, i, fromLength, to, 
toLength);
         }
     }
     *index = i;

Reply via email to