Huw Davies : riched20: Avoid an unnecessary string duplication.

Alexandre Julliard julliard at winehq.org
Tue Jan 22 14:52:23 CST 2013


Module: wine
Branch: master
Commit: 7a27ffb28ccadb611e623bf0e7c20595a48ee7dc
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=7a27ffb28ccadb611e623bf0e7c20595a48ee7dc

Author: Huw Davies <huw at codeweavers.com>
Date:   Tue Jan 22 14:04:08 2013 +0000

riched20: Avoid an unnecessary string duplication.

---

 dlls/riched20/caret.c |   25 ++++++++-----------------
 dlls/riched20/undo.c  |    2 +-
 2 files changed, 9 insertions(+), 18 deletions(-)

diff --git a/dlls/riched20/caret.c b/dlls/riched20/caret.c
index 7decff2..490f39c 100644
--- a/dlls/riched20/caret.c
+++ b/dlls/riched20/caret.c
@@ -361,6 +361,7 @@ BOOL ME_InternalDeleteText(ME_TextEditor *editor, ME_Cursor *start,
     else
     {
       ME_Cursor cursor;
+      ME_UndoItem *undo;
       int nCharsToDelete = min(nChars, c.nOffset);
       int i;
 
@@ -378,25 +379,15 @@ BOOL ME_InternalDeleteText(ME_TextEditor *editor, ME_Cursor *start,
         nCharsToDelete, nChars, c.nOffset,
         debugstr_w(run->strText->szData), run->strText->nLen);
 
-      if (!c.nOffset && run->strText->nLen == nCharsToDelete)
+      undo = ME_AddUndoItem(editor, diUndoInsertRun, c.pRun);
+      if (undo)
       {
-        /* undo = reinsert whole run */
-        /* nOfs is a character offset (from the start of the document
-           to the current (deleted) run */
-        ME_UndoItem *pUndo = ME_AddUndoItem(editor, diUndoInsertRun, c.pRun);
-        if (pUndo)
-          pUndo->di.member.run.nCharOfs = nOfs+nChars;
-      }
-      else
-      {
-        /* undo = reinsert partial run */
-        ME_UndoItem *pUndo = ME_AddUndoItem(editor, diUndoInsertRun, c.pRun);
-        if (pUndo) {
-          ME_DestroyString(pUndo->di.member.run.strText);
-          pUndo->di.member.run.nCharOfs = nOfs+nChars;
-          pUndo->di.member.run.strText = ME_MakeStringN(run->strText->szData+c.nOffset, nCharsToDelete);
-        }
+          /* nOfs is a character offset (from the start of the document
+             to the current (deleted) run */
+          undo->di.member.run.nCharOfs = nOfs + nChars;
+          undo->di.member.run.strText = ME_MakeStringN(run->strText->szData + c.nOffset, nCharsToDelete);
       }
+
       TRACE("Post deletion string: %s (%d)\n", debugstr_w(run->strText->szData), run->strText->nLen);
       TRACE("Shift value: %d\n", shift);
       ME_StrDeleteV(run->strText, c.nOffset, nCharsToDelete);
diff --git a/dlls/riched20/undo.c b/dlls/riched20/undo.c
index a101cc1..af27238 100644
--- a/dlls/riched20/undo.c
+++ b/dlls/riched20/undo.c
@@ -73,7 +73,7 @@ ME_UndoItem *ME_AddUndoItem(ME_TextEditor *editor, ME_DIType type, const ME_Disp
     case diUndoInsertRun:
       assert(pdi);
       pItem->member.run = pdi->member.run;
-      pItem->member.run.strText = ME_StrDup(pItem->member.run.strText);
+      pItem->member.run.strText = NULL;
       ME_AddRefStyle(pItem->member.run.style);
       if (pdi->member.run.ole_obj)
       {




More information about the wine-cvs mailing list