Procházet zdrojové kódy

* don't do anything in SetCodePage() if the requested code page is the same
as the current one, even if there are multiple references to the string

git-svn-id: trunk@31488 -

Jonas Maebe před 10 roky
rodič
revize
2b551d0241
1 změnil soubory, kde provedl 7 přidání a 1 odebrání
  1. 7 1
      rtl/inc/astrings.inc

+ 7 - 1
rtl/inc/astrings.inc

@@ -1529,14 +1529,20 @@ procedure InternalSetCodePage(var s : RawByteString; CodePage : TSystemCodePage;
   extra exception frames }
 procedure SetCodePage(var s : RawByteString; CodePage : TSystemCodePage; Convert : Boolean = True);
   var
+    OrgCodePage,
     TranslatedCodePage,
     TranslatedCurrentCodePage: TSystemCodePage;
   begin
     if (S='') then
       exit;
+    { if the codepage are identical, we don't have to do anything (even if the
+      string has multiple references) }
+    OrgCodePage:=PAnsiRec(pointer(S)-AnsiFirstOff)^.CodePage;
+    if OrgCodePage=CodePage then
+      exit;
     { if we're just replacing a placeholder code page with its actual value or
       vice versa, we don't have to perform any conversion }
-    TranslatedCurrentCodePage:=TranslatePlaceholderCP(PAnsiRec(pointer(S)-AnsiFirstOff)^.CodePage);
+    TranslatedCurrentCodePage:=TranslatePlaceholderCP(OrgCodePage);
     TranslatedCodePage:=TranslatePlaceholderCP(CodePage);
     Convert:=Convert and
       (TranslatedCurrentCodePage<>TranslatedCodePage);