fpc/rtl/unix/sysunix.inc
Jonas Maebe 598d2feeb6 + rtldefs.inc file for every target that contains defines shared by multiple
RTL units. Comes with a FPCRTL_FILESYSTEM_UTF8 define that can be
    activated for targets whose single byte filesystem interface enforces
    UTF-8; included in inc/systemh.inc and unix/cwstring.pp until now
  + DefaultFileSystemCodePage variable that holds the code page used for
    communicating with the OS single byte file system APIs, and for the
    strings returned by those same APIs. Initialized with
   o the result of GetACP in the system unit of Windows platforms, except for
     WinCE which uses UTF-8 since its file system OS API calls already use
     the UTF-16 versions
   o CP_UTF8 on Unix platforms with FPCRTL_FILESYSTEM_UTF8 defined, and with
     DefaultSystemCodePage on other Unix platforms
   o DefaultSystemCodePage on Java/Android JVM targets
  + DefaultRTLFileSystemCodePage variable that holds the code page used to
    encode strings returned by RTL routines that return filenames obtained
    from OS API calls. By default the same as DefaultFileSystemCodePage on
    all platforms. Separate from DefaultFileSystemCodePage for clarity on
    platforms that may use either utf-16 or single byte OS API calls to
    send/receive file names (such as most Windows platforms)
  + new scpFileSystemSingleByte enum that can be passed to
    GetStandardCodePage() to get the default code page for OS single byte file
    system APIs, with implementations for Unix and Windows
  + SetMultiByteFileSystemCodePage() procedure to override the value of
    DefaultFileSystemCodePage

  In principle, in the long run unchanged programs only using generic
  ansistrings and unicodestrings should (mostly) behave the same as in
  FPC 2.6.0 as far as RTL-level file system APIs are concerned if
  they set DefaultFileSystemCodePage and DefaultRTLFileSystemCodePage
  to DefaultSystemCodePage at the start of their execution

git-svn-id: branches/cpstrrtl@22466 -
2012-09-27 07:54:06 +00:00

55 lines
1.5 KiB
PHP

{
This file is part of the Free Pascal Run time library.
Copyright (c) 2001 by the Free Pascal development team
This file contains the OS independent routines of the system unit
for unix styled systems
See the File COPYING.FPC, included in this distribution,
for details about the copyright.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
**********************************************************************}
{$I system.inc}
{$i winiconv.inc}
function get_locale_charset: AnsiString;
var
p: SizeInt;
begin
// Get one of non-empty environment variables in the next order:
// LC_ALL, LC_CTYPE, LANG. Default is 'ASCII'.
Result:=FpGetEnv('LC_ALL');
if Result='' then
Result:=FpGetEnv('LC_CTYPE');
if Result='' then
Result:=FpGetEnv('LANG');
if Result='' then
Result:='ASCII'
else begin
// clean up, for example en_US.UTF-8 => UTF-8
p:=Pos('.',Result);
if p>0 then Delete(Result,1,p);
p:=Pos('@',Result);
if p>0 then Delete(Result,p,length(Result)-p+1);
end;
end;
procedure InitUnixStrings;
begin
DefaultSystemCodepage:=iconv2win(get_locale_charset);
{$ifdef FPCRTL_FILESYSTEM_UTF8}
DefaultFileSystemCodePage:=CP_UTF8;
{$else}
DefaultFileSystemCodePage:=DefaultSystemCodepage;
{$endif}
DefaultRTLFileSystemCodePage:=DefaultFileSystemCodePage;
initunicodestringmanager;
end;