mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-07 01:48:00 +02:00
* use some more string routines from libc if FPC_USE_LIBC is used
This commit is contained in:
parent
b411a7da94
commit
dedf697f3a
@ -17,6 +17,7 @@
|
||||
|
||||
{$ASMMODE ATT}
|
||||
|
||||
{$ifndef FPC_UNIT_HAS_STRCOPY}
|
||||
{$define FPC_UNIT_HAS_STRCOPY}
|
||||
function strcopy(dest,source : pchar) : pchar;assembler;
|
||||
var
|
||||
@ -92,8 +93,10 @@ asm
|
||||
movl saveedi,%edi
|
||||
movl saveesi,%esi
|
||||
end;
|
||||
{$endif FPC_UNIT_HAS_STRCOPY}
|
||||
|
||||
|
||||
{$ifndef FPC_UNIT_HAS_STRECOPY}
|
||||
{$define FPC_UNIT_HAS_STRECOPY}
|
||||
function strecopy(dest,source : pchar) : pchar;assembler;
|
||||
var
|
||||
@ -124,8 +127,10 @@ asm
|
||||
movl saveedi,%edi
|
||||
movl saveesi,%esi
|
||||
end;
|
||||
{$endif FPC_UNIT_HAS_STRECOPY}
|
||||
|
||||
|
||||
{$ifndef FPC_UNIT_HAS_STRLCOPY}
|
||||
{$define FPC_UNIT_HAS_STRLCOPY}
|
||||
function strlcopy(dest,source : pchar;maxlen : longint) : pchar;assembler;
|
||||
var
|
||||
@ -155,13 +160,17 @@ asm
|
||||
movl saveedi,%edi
|
||||
movl saveesi,%esi
|
||||
end;
|
||||
{$endif FPC_UNIT_HAS_STRLCOPY}
|
||||
|
||||
|
||||
{$ifndef FPC_UNIT_HAS_STRLEN}
|
||||
{$define FPC_UNIT_HAS_STRLEN}
|
||||
function strlen(p : pchar) : longint;assembler;
|
||||
{$i strlen.inc}
|
||||
{$endif FPC_UNIT_HAS_STRLEN}
|
||||
|
||||
|
||||
{$ifndef FPC_UNIT_HAS_STREND}
|
||||
{$define FPC_UNIT_HAS_STREND}
|
||||
function strend(p : pchar) : pchar;assembler;
|
||||
var
|
||||
@ -182,9 +191,11 @@ asm
|
||||
.LStrEndNil:
|
||||
movl saveedi,%edi
|
||||
end;
|
||||
{$endif FPC_UNIT_HAS_STREND}
|
||||
|
||||
|
||||
|
||||
{$ifndef FPC_UNIT_HAS_STREND}
|
||||
{$define FPC_UNIT_HAS_STRCOMP}
|
||||
function strcomp(str1,str2 : pchar) : longint;assembler;
|
||||
var
|
||||
@ -218,9 +229,11 @@ asm
|
||||
movl saveedi,%edi
|
||||
movl saveesi,%esi
|
||||
end;
|
||||
{$endif FPC_UNIT_HAS_STREND}
|
||||
|
||||
|
||||
|
||||
{$ifndef FPC_UNIT_HAS_STRLCOMP}
|
||||
{$define FPC_UNIT_HAS_STRLCOMP}
|
||||
function strlcomp(str1,str2 : pchar;l : longint) : longint;assembler;
|
||||
var
|
||||
@ -263,9 +276,11 @@ asm
|
||||
movl saveedi,%edi
|
||||
movl saveesi,%esi
|
||||
end;
|
||||
{$endif FPC_UNIT_HAS_STRLCOMP}
|
||||
|
||||
|
||||
|
||||
{$ifndef FPC_UNIT_HAS_STRICOMP}
|
||||
{$define FPC_UNIT_HAS_STRICOMP}
|
||||
function stricomp(str1,str2 : pchar) : longint;assembler;
|
||||
var
|
||||
@ -315,9 +330,11 @@ asm
|
||||
movl saveedi,%edi
|
||||
movl saveesi,%esi
|
||||
end;
|
||||
{$endif FPC_UNIT_HAS_STRICOMP}
|
||||
|
||||
|
||||
|
||||
{$ifndef FPC_UNIT_HAS_STRLICOMP}
|
||||
{$define FPC_UNIT_HAS_STRLICOMP}
|
||||
function strlicomp(str1,str2 : pchar;l : longint) : longint;assembler;
|
||||
var
|
||||
@ -376,9 +393,11 @@ asm
|
||||
movl saveedi,%edi
|
||||
movl saveesi,%esi
|
||||
end;
|
||||
{$endif FPC_UNIT_HAS_STRLICOMP}
|
||||
|
||||
|
||||
|
||||
{$ifndef FPC_UNIT_HAS_STRSCAN}
|
||||
{$define FPC_UNIT_HAS_STRSCAN}
|
||||
function strscan(p : pchar;c : char) : pchar;assembler;
|
||||
var
|
||||
@ -504,8 +523,10 @@ asm
|
||||
movl saveedi,%edi
|
||||
movl saveesi,%esi
|
||||
end;
|
||||
{$endif FPC_UNIT_HAS_STRSCAN}
|
||||
|
||||
|
||||
{$ifndef FPC_UNIT_HAS_STRRSCAN}
|
||||
{$define FPC_UNIT_HAS_STRRSCAN}
|
||||
function strrscan(p : pchar;c : char) : pchar;assembler;
|
||||
var
|
||||
@ -538,8 +559,10 @@ asm
|
||||
.LSTRRSCAN:
|
||||
movl saveedi,%edi
|
||||
end;
|
||||
{$endif FPC_UNIT_HAS_STRRSCAN}
|
||||
|
||||
|
||||
{$ifndef FPC_UNIT_HAS_STRUPPER}
|
||||
{$define FPC_UNIT_HAS_STRUPPER}
|
||||
function strupper(p : pchar) : pchar;assembler;
|
||||
var
|
||||
@ -571,8 +594,10 @@ asm
|
||||
movl saveedi,%edi
|
||||
movl saveesi,%esi
|
||||
end;
|
||||
{$endif FPC_UNIT_HAS_STRUPPER}
|
||||
|
||||
|
||||
{$ifndef FPC_UNIT_HAS_STRLOWER}
|
||||
{$define FPC_UNIT_HAS_STRLOWER}
|
||||
function strlower(p : pchar) : pchar;assembler;
|
||||
var
|
||||
@ -604,10 +629,14 @@ asm
|
||||
movl saveedi,%edi
|
||||
movl saveesi,%esi
|
||||
end;
|
||||
{$endif FPC_UNIT_HAS_STRLOWER}
|
||||
|
||||
{
|
||||
$Log$
|
||||
Revision 1.13 2003-12-19 09:28:00 michael
|
||||
Revision 1.14 2004-05-01 15:26:33 jonas
|
||||
* use some more string routines from libc if FPC_USE_LIBC is used
|
||||
|
||||
Revision 1.13 2003/12/19 09:28:00 michael
|
||||
+ Patch from Peter to fix strlcomp
|
||||
|
||||
Revision 1.12 2003/12/17 21:56:33 peter
|
||||
|
@ -16,10 +16,13 @@
|
||||
**********************************************************************}
|
||||
|
||||
|
||||
{$ifndef FPC_UNIT_HAS_STRPAS}
|
||||
{$define FPC_UNIT_HAS_STRPAS}
|
||||
function strpas(p : pchar) : string; assembler;
|
||||
{$i strpas.inc}
|
||||
{$endif FPC_UNIT_HAS_STRPAS}
|
||||
|
||||
{$ifndef FPC_UNIT_HAS_STRPCOPY}
|
||||
{$define FPC_UNIT_HAS_STRPCOPY}
|
||||
function strpcopy(d : pchar;const s : string) : pchar;assembler;
|
||||
var
|
||||
@ -46,10 +49,14 @@ asm
|
||||
movl saveedi,%edi
|
||||
movl saveesi,%esi
|
||||
end;
|
||||
{$endif FPC_UNIT_HAS_STRPCOPY}
|
||||
|
||||
{
|
||||
$Log$
|
||||
Revision 1.11 2003-11-19 16:58:44 peter
|
||||
Revision 1.12 2004-05-01 15:26:33 jonas
|
||||
* use some more string routines from libc if FPC_USE_LIBC is used
|
||||
|
||||
Revision 1.11 2003/11/19 16:58:44 peter
|
||||
* make strpas assembler function
|
||||
|
||||
Revision 1.10 2003/11/11 21:08:17 peter
|
||||
|
@ -124,7 +124,7 @@ end;
|
||||
{$define FPC_SYSTEM_HAS_COMPARECHAR0}
|
||||
function strncmp_comparechar0(Const buf1,buf2;len:cardinal):longint; cdecl; external 'c' name 'strncmp';
|
||||
|
||||
function CompareChar0(Const buf1,buf2;len:longint):longint;
|
||||
function CompareChar0(Const buf1,buf2;len:longint):longint;{$ifdef SYSTEMINLINE}inline;{$endif}
|
||||
begin
|
||||
if len <= 0 then
|
||||
exit(0);
|
||||
@ -134,9 +134,26 @@ end;
|
||||
{$endif not FPC_SYSTEM_HAS_COMPARECHAR0}
|
||||
|
||||
|
||||
|
||||
{$ifndef FPC_SYSTEM_HAS_FPC_PCHAR_LENGTH}
|
||||
{$define FPC_SYSTEM_HAS_FPC_PCHAR_LENGTH}
|
||||
|
||||
function libc_pchar_length(p:pchar):cardinal; cdecl; external 'c' name 'strlen';
|
||||
|
||||
function fpc_pchar_length(p:pchar):longint;[public,alias:'FPC_PCHAR_LENGTH']; {$ifdef hascompilerproc} compilerproc; {$endif} {$ifdef SYSTEMINLINE}inline;{$endif}
|
||||
begin
|
||||
fpc_pchar_length:=libc_pchar_length(p);
|
||||
end;
|
||||
|
||||
{$endif ndef FPC_SYSTEM_HAS_FPC_PCHAR_LENGTH}
|
||||
|
||||
|
||||
{
|
||||
$Log$
|
||||
Revision 1.1 2004-01-11 11:10:07 jonas
|
||||
Revision 1.2 2004-05-01 15:26:33 jonas
|
||||
* use some more string routines from libc if FPC_USE_LIBC is used
|
||||
|
||||
Revision 1.1 2004/01/11 11:10:07 jonas
|
||||
+ cgeneric.inc: implementations of rtl routines based on libc
|
||||
* system.inc: include cgeneric.inc before powerpc.inc/i386.inc/... if
|
||||
FPC_USE_LIBC is defined
|
||||
|
149
rtl/inc/cgenstr.inc
Normal file
149
rtl/inc/cgenstr.inc
Normal file
@ -0,0 +1,149 @@
|
||||
{
|
||||
$Id$
|
||||
This file is part of the Free Pascal run time library.
|
||||
Copyright (c) 1999-2000 by Carl-Eric Codere,
|
||||
member of the Free Pascal development team.
|
||||
|
||||
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.
|
||||
|
||||
**********************************************************************}
|
||||
|
||||
{ we have to call the libc routines, because simply declaring our routines }
|
||||
{ as cdecl and external in libc cause problems because the calling }
|
||||
{ convention the interface is different }
|
||||
|
||||
{$ifndef FPC_UNIT_HAS_STRLEN}
|
||||
{$define FPC_UNIT_HAS_STRLEN}
|
||||
function libc_strlen(const p: pchar): cardinal; cdecl; external 'c' name 'strlen';
|
||||
|
||||
function strlen(P : pchar) : longint;
|
||||
begin
|
||||
strlen := libc_strlen(p);
|
||||
end;
|
||||
{$endif FPC_UNIT_HAS_STRLEN}
|
||||
|
||||
|
||||
{$ifndef FPC_UNIT_HAS_STREND}
|
||||
{$define FPC_UNIT_HAS_STREND}
|
||||
|
||||
function StrEnd(P: PChar): PChar;{$ifdef SYSTEMINLINE}inline;{$endif}
|
||||
begin
|
||||
strend := p+strlen(p);
|
||||
end;
|
||||
{$endif FPC_UNIT_HAS_STREND}
|
||||
|
||||
|
||||
{$ifndef FPC_UNIT_HAS_STRCOPY}
|
||||
{$define FPC_UNIT_HAS_STRCOPY}
|
||||
function libc_strcpy(dest: pchar; const src: pchar): pchar; cdecl; external 'c' name 'strcpy';
|
||||
|
||||
Function StrCopy(Dest, Source:PChar): PChar;{$ifdef SYSTEMINLINE}inline;{$endif}
|
||||
Begin
|
||||
StrCopy := libc_strcpy(dest,source);
|
||||
end;
|
||||
{$endif FPC_UNIT_HAS_STRCOPY}
|
||||
|
||||
|
||||
{$ifndef FPC_UNIT_HAS_STRSCAN}
|
||||
{$define FPC_UNIT_HAS_STRSCAN}
|
||||
function libc_strchr(const p: pchar; c: longint): pchar; cdecl; external 'c' name 'strchr';
|
||||
|
||||
function StrScan(P: PChar; C: Char): PChar;{$ifdef SYSTEMINLINE}inline;{$endif}
|
||||
Begin
|
||||
StrScan := libc_strchr(p,longint(c));
|
||||
end;
|
||||
{$endif FPC_UNIT_HAS_STRSCAN}
|
||||
|
||||
|
||||
{$ifndef FPC_UNIT_HAS_STRRSCAN}
|
||||
{$define FPC_UNIT_HAS_STRRSCAN}
|
||||
function libc_strrchr(const p: pchar; c: longint): pchar; cdecl; external 'c' name 'strrchr';
|
||||
|
||||
function StrRScan(P: PChar; C: Char): PChar;{$ifdef SYSTEMINLINE}inline;{$endif}
|
||||
Begin
|
||||
StrRScan := libc_strrchr(p,longint(c));
|
||||
end;
|
||||
{$endif FPC_UNIT_HAS_STRRSCAN}
|
||||
|
||||
(*
|
||||
{$ifndef FPC_UNIT_HAS_STRECOPY}
|
||||
{$define FPC_UNIT_HAS_STRECOPY}
|
||||
function libc_stpcpy(dest: pchar; const src: pchar): pchar; cdecl; external 'c' name 'stpcpy';
|
||||
|
||||
Function StrECopy(Dest, Source: PChar): PChar;{$ifdef SYSTEMINLINE}inline;{$endif}
|
||||
Begin
|
||||
StrECopy := libc_stpcpy(dest,source);
|
||||
end;
|
||||
{$endif FPC_UNIT_HAS_STRECOPY}
|
||||
*)
|
||||
|
||||
(*
|
||||
{$ifndef FPC_UNIT_HAS_STRLCOPY}
|
||||
{$define FPC_UNIT_HAS_STRLCOPY}
|
||||
|
||||
function libc_strlcpy(dest: pchar; const src: pchar; maxlen: StrLenInt): StrLenInt; cdecl; external 'c' name 'strlcpy';
|
||||
|
||||
Function StrLCopy(Dest,Source: PChar; MaxLen: StrLenInt): PChar;{$ifdef SYSTEMINLINE}inline;{$endif}
|
||||
Begin
|
||||
libc_strlcpy(dest,source,maxlen);
|
||||
StrLCopy := Dest;
|
||||
end;
|
||||
{$endif FPC_UNIT_HAS_STRLCOPY}
|
||||
*)
|
||||
|
||||
{$ifndef FPC_UNIT_HAS_STRCOMP}
|
||||
{$define FPC_UNIT_HAS_STRCOMP}
|
||||
function libc_strcmp(const str1,str2: pchar): longint; cdecl; external 'c' name 'strcmp';
|
||||
|
||||
function StrComp(Str1, Str2 : PChar): StrLenInt;{$ifdef SYSTEMINLINE}inline;{$endif}
|
||||
Begin
|
||||
strcomp := libc_strcmp(str1,str2);
|
||||
end;
|
||||
{$endif FPC_UNIT_HAS_STRCOMP}
|
||||
|
||||
|
||||
{$ifndef FPC_UNIT_HAS_STRICOMP}
|
||||
{$define FPC_UNIT_HAS_STRICOMP}
|
||||
function libc_strcasecmp(const str1,str2: pchar): longint; cdecl; external 'c' name 'strcasecmp';
|
||||
|
||||
function StrIComp(Str1, Str2 : PChar): StrLenInt;{$ifdef SYSTEMINLINE}inline;{$endif}
|
||||
Begin
|
||||
stricomp := libc_strcasecmp(str1,str2);
|
||||
end;
|
||||
{$endif FPC_UNIT_HAS_STRICOMP}
|
||||
|
||||
|
||||
{$ifndef FPC_UNIT_HAS_STRLCOMP}
|
||||
{$define FPC_UNIT_HAS_STRLCOMP}
|
||||
function libc_strncmp(const str1,str2: pchar; l: Cardinal): longint; cdecl; external 'c' name 'strncmp';
|
||||
|
||||
function StrLComp(Str1, Str2 : PChar; L: StrLenInt): StrLenInt;{$ifdef SYSTEMINLINE}inline;{$endif}
|
||||
Begin
|
||||
strlcomp := libc_strncmp(str1,str2,l);
|
||||
end;
|
||||
{$endif FPC_UNIT_HAS_STRLCOMP}
|
||||
|
||||
|
||||
{$ifndef FPC_UNIT_HAS_STRLICOMP}
|
||||
{$define FPC_UNIT_HAS_STRLICOMP}
|
||||
function libc_strncasecmp(const str1,str2: pchar; l: Cardinal): longint; cdecl; external 'c' name 'strncasecmp';
|
||||
|
||||
function StrLIComp(Str1, Str2 : PChar; L: StrLenInt): StrLenInt;{$ifdef SYSTEMINLINE}inline;{$endif}
|
||||
Begin
|
||||
strlicomp := libc_strncasecmp(str1,str2,l);
|
||||
end;
|
||||
{$endif FPC_UNIT_HAS_STRLICOMP}
|
||||
|
||||
|
||||
{
|
||||
$Log$
|
||||
Revision 1.1 2004-05-01 15:26:33 jonas
|
||||
* use some more string routines from libc if FPC_USE_LIBC is used
|
||||
|
||||
|
||||
}
|
@ -652,8 +652,11 @@ end;
|
||||
{ also add a strpas alias for internal use in the system unit (JM) }
|
||||
function strpas(p:pchar):shortstring; [external name 'FPC_PCHAR_TO_SHORTSTR'];
|
||||
|
||||
{ also add a strlen alias for internal use in the system unit (JM) }
|
||||
{$ifndef FPC_UNIT_HAS_STRLEN}
|
||||
|
||||
{ if strlen is not yet defined, we need a forward declaration here }
|
||||
function strlen(p:pchar):longint; [external name 'FPC_PCHAR_LENGTH'];
|
||||
{$endif FPC_UNIT_HAS_STRLEN}
|
||||
|
||||
{$ifndef FPC_SYSTEM_HAS_FPC_CHARARRAY_TO_SHORTSTR}
|
||||
|
||||
@ -1158,7 +1161,10 @@ end;
|
||||
|
||||
{
|
||||
$Log$
|
||||
Revision 1.73 2004-04-29 19:50:13 peter
|
||||
Revision 1.74 2004-05-01 15:26:33 jonas
|
||||
* use some more string routines from libc if FPC_USE_LIBC is used
|
||||
|
||||
Revision 1.73 2004/04/29 19:50:13 peter
|
||||
* x86-64 fixes
|
||||
|
||||
Revision 1.72 2004/04/28 21:01:29 florian
|
||||
|
@ -93,6 +93,10 @@ interface
|
||||
|
||||
implementation
|
||||
|
||||
{$ifdef FPC_USE_LIBC}
|
||||
{$i cgenstr.inc}
|
||||
{$endif FPC_USE_LIBC}
|
||||
|
||||
{ Read Processor dependent part, shared with sysutils unit }
|
||||
{$i strings.inc }
|
||||
|
||||
@ -144,7 +148,10 @@ end.
|
||||
|
||||
{
|
||||
$Log$
|
||||
Revision 1.6 2004-02-18 22:00:59 peter
|
||||
Revision 1.7 2004-05-01 15:26:33 jonas
|
||||
* use some more string routines from libc if FPC_USE_LIBC is used
|
||||
|
||||
Revision 1.6 2004/02/18 22:00:59 peter
|
||||
* use strlenint instead of longint
|
||||
|
||||
Revision 1.5 2003/07/07 20:22:05 peter
|
||||
|
@ -84,6 +84,7 @@ Procedure Rewrite(var f : TypedFile); [INTERNPROC: In_Rewrite_TypedFile];
|
||||
{$ifdef FPC_USE_LIBC}
|
||||
{ prefer libc implementations over our own, as they're most likely faster }
|
||||
{$i cgeneric.inc}
|
||||
{$i cgenstr.inc}
|
||||
{$endif FPC_USE_LIBC}
|
||||
|
||||
{$ifdef cpui386}
|
||||
@ -881,7 +882,10 @@ end;
|
||||
|
||||
{
|
||||
$Log$
|
||||
Revision 1.56 2004-04-22 19:43:43 peter
|
||||
Revision 1.57 2004-05-01 15:26:33 jonas
|
||||
* use some more string routines from libc if FPC_USE_LIBC is used
|
||||
|
||||
Revision 1.56 2004/04/22 19:43:43 peter
|
||||
* fix 64bit address printing
|
||||
|
||||
Revision 1.55 2004/04/22 17:10:38 peter
|
||||
|
Loading…
Reference in New Issue
Block a user