Index: patches/changeset_30255.patch |
=================================================================== |
--- patches/changeset_30255.patch (revision 0) |
+++ patches/changeset_30255.patch (revision 0) |
@@ -0,0 +1,22 @@ |
+Index: /icu/trunk/source/common/rbbi.cpp |
+=================================================================== |
+--- /icu/trunk/source/common/rbbi.cpp (revision 30203) |
++++ /icu/trunk/source/common/rbbi.cpp (revision 30255) |
+@@ -1566,17 +1566,6 @@ |
+ // |
+ // Clone the source BI into the caller-supplied buffer. |
+- // TODO: using an overloaded operator new to directly initialize the |
+- // copy in the user's buffer would be better, but it doesn't seem |
+- // to get along with namespaces. Investigate why. |
+ // |
+- // The memcpy is only safe with an empty (default constructed) |
+- // break iterator. Use on others can screw up reference counts |
+- // to data. memcpy-ing objects is not really a good idea... |
+- // |
+- RuleBasedBreakIterator localIter; // Empty break iterator, source for memcpy |
+- RuleBasedBreakIterator *clone = (RuleBasedBreakIterator *)buf; |
+- uprv_memcpy(clone, &localIter, sizeof(RuleBasedBreakIterator)); // init C++ gorp, BreakIterator base class part |
+- clone->init(); // Init RuleBasedBreakIterator part, (user default constructor) |
+- *clone = *this; // clone = the real BI we want. |
++ RuleBasedBreakIterator *clone = new(buf) RuleBasedBreakIterator(*this); |
+ clone->fBufferClone = TRUE; // Flag to prevent deleting storage on close (From C code) |