+ introduced PtrInt and PtrUInt

* made strscan 64 bit safe
This commit is contained in:
florian 2003-12-29 19:24:12 +00:00
parent 65cc0f990f
commit 021652683a
3 changed files with 75 additions and 13 deletions

View File

@ -43,11 +43,9 @@
function strpos(str1,str2 : pchar) : pchar; function strpos(str1,str2 : pchar) : pchar;
var var
p : pchar; p : pchar;
lstr2 : longint; lstr2 : SizeInt;
begin begin
strpos:=nil; strpos:=nil;
p:=strscan(str1,str2^); p:=strscan(str1,str2^);
@ -61,14 +59,18 @@
strpos:=p; strpos:=p;
exit; exit;
end; end;
inc(longint(p)); inc(p);
p:=strscan(p,str2^); p:=strscan(p,str2^);
end; end;
end; end;
{ {
$Log$ $Log$
Revision 1.3 2002-09-07 15:07:46 peter Revision 1.4 2003-12-29 19:24:12 florian
+ introduced PtrInt and PtrUInt
* made strscan 64 bit safe
Revision 1.3 2002/09/07 15:07:46 peter
* old logs removed and tabs fixed * old logs removed and tabs fixed
} }

View File

@ -177,12 +177,16 @@ Type
StrLenInt = Int64; StrLenInt = Int64;
SizeInt = Int64; SizeInt = Int64;
SizeUInt = QWord; SizeUInt = QWord;
PtrInt = Int64;
PtrUInt = QWord;
{$endif CPU64} {$endif CPU64}
{$ifdef CPU32} {$ifdef CPU32}
StrLenInt = Longint; StrLenInt = Longint;
SizeInt = Longint; SizeInt = Longint;
SizeUInt = DWord; SizeUInt = DWord;
PtrInt = Longint;
PtrUInt = DWord;
{$endif CPU32} {$endif CPU32}
{ Zero - terminated strings } { Zero - terminated strings }
@ -531,12 +535,12 @@ procedure WideCharToStrVar(S : PWideChar;var Dest : AnsiString);
Type Type
TWide2AnsiMove=procedure(source:pwidechar;dest:pchar;len:longint); TWide2AnsiMove=procedure(source:pwidechar;dest:pchar;len:longint);
TAnsi2WideMove=procedure(source:pchar;dest:pwidechar;len:longint); TAnsi2WideMove=procedure(source:pchar;dest:pwidechar;len:longint);
TWideStringManager = record TWideStringManager = record
Wide2AnsiMove : TWide2AnsiMove; Wide2AnsiMove : TWide2AnsiMove;
Ansi2WideMove : TAnsi2WideMove; Ansi2WideMove : TAnsi2WideMove;
end; end;
Procedure GetWideStringManager (Var Manager : TWideStringManager); Procedure GetWideStringManager (Var Manager : TWideStringManager);
Procedure SetWideStringManager (Const New : TWideStringManager); Procedure SetWideStringManager (Const New : TWideStringManager);
Procedure SetWideStringManager (Const New : TWideStringManager; Var Old: TWideStringManager); Procedure SetWideStringManager (Const New : TWideStringManager; Var Old: TWideStringManager);
@ -713,7 +717,11 @@ const
{ {
$Log$ $Log$
Revision 1.80 2003-11-29 17:27:05 michael Revision 1.81 2003-12-29 19:24:12 florian
+ introduced PtrInt and PtrUInt
* made strscan 64 bit safe
Revision 1.80 2003/11/29 17:27:05 michael
+ Added overloaded version of SetWideStringManager without old parameter + Added overloaded version of SetWideStringManager without old parameter
Revision 1.79 2003/11/28 20:36:13 michael Revision 1.79 2003/11/28 20:36:13 michael
@ -858,4 +866,4 @@ const
instead of direct comparisons of low/high values of orddefs because instead of direct comparisons of low/high values of orddefs because
qword is a special case qword is a special case
} }

View File

@ -42,6 +42,7 @@ asm
.LDone: .LDone:
end; end;
function FpSysCall(sysnr,param1:TSysParam):TSysResult; assembler;[public,alias:'FPC_SYSCALL1']; function FpSysCall(sysnr,param1:TSysParam):TSysResult; assembler;[public,alias:'FPC_SYSCALL1'];
{ {
This function puts the registers in place, does the call, and then This function puts the registers in place, does the call, and then
@ -81,6 +82,7 @@ asm
.LDone: .LDone:
end; end;
function FpSysCall(sysnr,param1,param2,param3:TSysParam):TSysResult; assembler;[public,alias:'FPC_SYSCALL3']; function FpSysCall(sysnr,param1,param2,param3:TSysParam):TSysResult; assembler;[public,alias:'FPC_SYSCALL3'];
{ {
This function puts the registers in place, does the call, and then This function puts the registers in place, does the call, and then
@ -107,14 +109,44 @@ function FpSysCall(sysnr,param1,param2,param3,param4:TSysParam):TSysResult; asse
copies back the registers as they are after the SysCall. copies back the registers as they are after the SysCall.
} }
asm asm
stmfd r13!,{r4}
ldr r4,param4
swi #0x900071
cmn r0,#126
bls .LDone
ldr r1,.LErrno
rsb r0,r0,#0
str r0,[r1]
mvn r0,#0
b .LDone
.LErrno:
.word Errno
.LDone:
ldmfd r13!,{r4}
end; end;
function FpSysCall(sysnr,param1,param2,param3,param4,param5:TSysParam):TSysResult; assembler;[public,alias:'FPC_SYSCALL5']; function FpSysCall(sysnr,param1,param2,param3,param4,param5:TSysParam):TSysResult; assembler;[public,alias:'FPC_SYSCALL5'];
{ {
This function puts the registers in place, does the call, and then This function puts the registers in place, does the call, and then
copies back the registers as they are after the SysCall. copies back the registers as they are after the SysCall.
} }
asm asm
stmfd r13!,{r4-r5}
ldr r5,param5
ldr r4,param4
swi #0x900071
cmn r0,#126
bls .LDone
ldr r1,.LErrno
rsb r0,r0,#0
str r0,[r1]
mvn r0,#0
b .LDone
.LErrno:
.word Errno
.LDone:
ldmfd r13!,{r4-r5}
end; end;
@ -124,11 +156,27 @@ function FpSysCall(sysnr,param1,param2,param3,param4,param5,param6:TSysParam):TS
copies back the registers as they are after the SysCall. copies back the registers as they are after the SysCall.
} }
asm asm
stmfd r13!,{r4-r6}
ldr r6,param6
ldr r5,param5
ldr r4,param4
swi #0x900071
cmn r0,#126
bls .LDone
ldr r1,.LErrno
rsb r0,r0,#0
str r0,[r1]
mvn r0,#0
b .LDone
.LErrno:
.word Errno
.LDone:
ldmfd r13!,{r4-r6}
end; end;
// Old style syscall: // Old style syscall:
// Better use ktrace/strace/gdb for debugging. // Better use ktrace/strace/gdb for debugging.
Procedure FpSysCall( callnr:longint;var regs : SysCallregs );assembler; Procedure FpSysCall( callnr:longint;var regs : SysCallregs );assembler;
{ {
This function puts the registers in place, does the call, and then This function puts the registers in place, does the call, and then
@ -193,7 +241,11 @@ end;
{ {
$Log$ $Log$
Revision 1.2 2003-12-03 17:34:12 florian Revision 1.3 2003-12-29 19:24:12 florian
+ introduced PtrInt and PtrUInt
* made strscan 64 bit safe
Revision 1.2 2003/12/03 17:34:12 florian
+ started to implement arm syscalls + started to implement arm syscalls
Revision 1.1 2003/08/28 00:08:29 florian Revision 1.1 2003/08/28 00:08:29 florian