mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-07 06:28:55 +02:00
* revert r47631: cwstring: open iconv with the transliterate flag instead of setting it later with iconvctl because it may be unavailable
git-svn-id: trunk@47633 -
This commit is contained in:
parent
c47d6d7af0
commit
6854f171d1
@ -208,6 +208,8 @@ function iconv_close(__cd:iconv_t):cint;cdecl;external libiconvname name 'libico
|
||||
const
|
||||
iconvctlname='libiconvctl';
|
||||
{$endif}
|
||||
var
|
||||
iconvctl:function(__cd:iconv_t; __request:cint; __argument:pointer):cint;cdecl;
|
||||
|
||||
procedure fpc_rangeerror; [external name 'FPC_RANGEERROR'];
|
||||
|
||||
@ -240,13 +242,19 @@ begin
|
||||
else
|
||||
{ default to UTF-8 on Unix platforms }
|
||||
iconvname:='UTF-8';
|
||||
iconv_wide2ansi:=iconv_open(pchar(iconvname+'//TRANSLIT'),unicode_encoding2);
|
||||
iconv_wide2ansi:=iconv_open(pchar(iconvname),unicode_encoding2);
|
||||
iconv_ansi2wide:=iconv_open(unicode_encoding2,pchar(iconvname));
|
||||
{$else}
|
||||
{ Unix locale settings are ignored on iPhoneOS/iPhoneSimulator }
|
||||
iconv_wide2ansi:=iconv_open('UTF-8//TRANSLIT',unicode_encoding2);
|
||||
iconv_wide2ansi:=iconv_open('UTF-8',unicode_encoding2);
|
||||
iconv_ansi2wide:=iconv_open(unicode_encoding2,'UTF-8');
|
||||
{$endif}
|
||||
if assigned(iconvctl) and
|
||||
(iconv_wide2ansi<>iconv_t(-1)) then
|
||||
begin
|
||||
transliterate:=1;
|
||||
iconvctl(iconv_wide2ansi,ICONV_SET_TRANSLITERATE,@transliterate);
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
@ -294,7 +302,7 @@ function open_iconv_for_cps(cp: TSystemCodePage; const otherencoding: pchar; cp_
|
||||
if cp_is_from then
|
||||
open_iconv_for_cps:=iconv_open(otherencoding,pchar(UnixCpMap[iconvindex].name))
|
||||
else
|
||||
open_iconv_for_cps:=iconv_open(pchar(UnixCpMap[iconvindex].name+'//TRANSLIT'),otherencoding);
|
||||
open_iconv_for_cps:=iconv_open(pchar(UnixCpMap[iconvindex].name),otherencoding);
|
||||
inc(iconvindex);
|
||||
until (open_iconv_for_cps<>iconv_t(-1)) or
|
||||
(iconvindex>high(UnixCpMap)) or
|
||||
@ -318,6 +326,7 @@ procedure Wide2AnsiMove(source:pwidechar; var dest:RawByteString; cp:TSystemCode
|
||||
mynil : pchar;
|
||||
my0 : size_t;
|
||||
err : longint;
|
||||
transliterate: cint;
|
||||
free_iconv: boolean;
|
||||
{$ifdef aix}
|
||||
intermediate: rawbytestring;
|
||||
@ -348,6 +357,12 @@ procedure Wide2AnsiMove(source:pwidechar; var dest:RawByteString; cp:TSystemCode
|
||||
else
|
||||
begin
|
||||
use_iconv:=open_iconv_for_cps(cp,unicode_encoding2,false);
|
||||
if (use_iconv<>iconv_t(-1)) and
|
||||
assigned(iconvctl) then
|
||||
begin
|
||||
transliterate:=1;
|
||||
iconvctl(use_iconv,ICONV_SET_TRANSLITERATE,@transliterate);
|
||||
end;
|
||||
free_iconv:=true;
|
||||
end;
|
||||
{ unsupported encoding -> default move }
|
||||
@ -1123,10 +1138,12 @@ initialization
|
||||
{ (some OSes do this automatically, but e.g. Darwin and Solaris don't) }
|
||||
setlocale(LC_ALL,'');
|
||||
|
||||
{ load iconv library }
|
||||
{ load iconvctl function }
|
||||
iconvlib:=LoadLibrary(libprefix+libiconvname+'.'+SharedSuffix);
|
||||
if iconvlib=0 then
|
||||
iconvlib:=LoadLibrary(libprefix+libiconvname+'.'+SharedSuffix+'.6');
|
||||
if iconvlib<>0 then
|
||||
pointer(iconvctl):=GetProcAddress(iconvlib,iconvctlname);
|
||||
|
||||
{ set the DefaultSystemCodePage }
|
||||
DefaultSystemCodePage:=GetStandardCodePage(scpAnsi);
|
||||
|
Loading…
Reference in New Issue
Block a user