I made some changes to cwstring (patch appended) in order to be more useful.

In the original state the iconv tables were created before a call to
SetLocale and as such they always transformed Unicode to ANSI. In the
current version a typical program would call SetLocale and then call
SetCWideStringManager to recreate the tables using the new charmap.
--
Geno Roupsky
Index: rtl/unix/cwstring.pp
===================================================================
--- rtl/unix/cwstring.pp	(revision 3088)
+++ rtl/unix/cwstring.pp	(working copy)
@@ -111,6 +111,7 @@
 {$endif}
 
 var
+  is_iconv_open: Boolean = False;
   iconv_ansi2ucs4,
   iconv_ucs42ansi,
   iconv_ansi2wide,
@@ -302,7 +303,32 @@
     result:=strcoll(s1,s2);
   end;
 
+procedure Closeiconv;
+begin
+  if is_iconv_open then
+  begin
+    { close conversion tables }
+    iconv_close(iconv_wide2ansi);
+    iconv_close(iconv_ansi2wide);
+    iconv_close(iconv_ucs42ansi);
+    iconv_close(iconv_ansi2ucs4);
+    is_iconv_open := False;
+  end;
+end;
 
+procedure Openiconv;
+begin
+  if is_iconv_open then
+    Closeiconv;
+
+  { init conversion tables }
+  iconv_wide2ansi:=iconv_open(nl_langinfo(CODESET),unicode_encoding);
+  iconv_ansi2wide:=iconv_open(unicode_encoding,nl_langinfo(CODESET));
+  iconv_ucs42ansi:=iconv_open(nl_langinfo(CODESET),'UCS4');
+  iconv_ansi2ucs4:=iconv_open('UCS4',nl_langinfo(CODESET));
+  is_iconv_open := True;
+end;
+
 Procedure SetCWideStringManager;
 Var
   CWideStringManager : TWideStringManager;
@@ -336,16 +362,15 @@
       }
     end;
   SetWideStringManager(CWideStringManager);
+
+  Openiconv;
 end;
 
 
 initialization
   SetCWideStringManager;
-  { init conversion tables }
-  iconv_wide2ansi:=iconv_open(nl_langinfo(CODESET),unicode_encoding);
-  iconv_ansi2wide:=iconv_open(unicode_encoding,nl_langinfo(CODESET));
-  iconv_ucs42ansi:=iconv_open(nl_langinfo(CODESET),'UCS4');
-  iconv_ansi2ucs4:=iconv_open('UCS4',nl_langinfo(CODESET));
+  
 finalization
-  iconv_close(iconv_ansi2wide);
+  Closeiconv;
+  
 end.





_______________________________________________
fpc-devel maillist  -  [email protected]
http://lists.freepascal.org/mailman/listinfo/fpc-devel

Reply via email to