summaryrefslogtreecommitdiff
path: root/rtl
diff options
context:
space:
mode:
Diffstat (limited to 'rtl')
-rw-r--r--rtl/beos/termiosproc.inc2
-rw-r--r--rtl/darwin/aarch64/sighnd.inc4
-rw-r--r--rtl/darwin/arm/sighnd.inc4
-rw-r--r--rtl/darwin/ppcgen/ppchnd.inc4
-rw-r--r--rtl/darwin/termiosproc.inc2
-rw-r--r--rtl/darwin/x86/x86hnd.inc6
-rw-r--r--rtl/haiku/termiosproc.inc2
-rw-r--r--rtl/inc/systemh.inc10
-rw-r--r--rtl/linux/sparcgen/sysnr.inc109
-rw-r--r--rtl/linux/t_linux.h2paschk151
-rw-r--r--rtl/linux/termiosproc.inc2
-rw-r--r--rtl/netbsd/termiosproc.inc2
-rw-r--r--rtl/objpas/classes/classesh.inc151
-rw-r--r--rtl/objpas/classes/streams.inc760
-rw-r--r--rtl/openbsd/t_openbsd.h2paschk63
-rw-r--r--rtl/openbsd/termiosproc.inc2
-rwxr-xr-xrtl/unix/scripts/check_rtl_types.sh213
-rwxr-xr-xrtl/unix/scripts/check_sys.sh71
-rw-r--r--rtl/win/syswin.inc11
-rw-r--r--rtl/win/wininc/ascdef.inc1
-rw-r--r--rtl/win/wininc/ascfun.inc1
-rw-r--r--rtl/win/wininc/defines.inc37
-rw-r--r--rtl/win/wininc/func.inc4
-rw-r--r--rtl/win/wininc/unidef.inc1
-rw-r--r--rtl/win/wininc/unifun.inc1
25 files changed, 1511 insertions, 103 deletions
diff --git a/rtl/beos/termiosproc.inc b/rtl/beos/termiosproc.inc
index a51e295772..3df62de1b8 100644
--- a/rtl/beos/termiosproc.inc
+++ b/rtl/beos/termiosproc.inc
@@ -26,7 +26,7 @@ end;
Function TCSetAttr(fd:cint;OptAct:cint;const tios:TermIOS):cint;
var
- nr:cint;
+ nr:TIOCtlRequest;
begin
case OptAct of
TCSANOW : nr:=TIOCSETA;
diff --git a/rtl/darwin/aarch64/sighnd.inc b/rtl/darwin/aarch64/sighnd.inc
index e9a7d420f9..abd446d52b 100644
--- a/rtl/darwin/aarch64/sighnd.inc
+++ b/rtl/darwin/aarch64/sighnd.inc
@@ -23,8 +23,8 @@ begin
SIGFPE :
begin
Case Info^.si_code Of
- FPE_FLTDIV,
- FPE_INTDIV : Res:=200; { floating point divide by zero }
+ FPE_FLTDIV : Res:=200; { floating point divide by zero }
+ FPE_INTDIV : Res:=208; { integer divide by zero }
FPE_FLTOVF : Res:=205; { floating point overflow }
FPE_FLTUND : Res:=206; { floating point underflow }
FPE_FLTRES, { floating point inexact result }
diff --git a/rtl/darwin/arm/sighnd.inc b/rtl/darwin/arm/sighnd.inc
index 0a30e8ee79..a735c2aed1 100644
--- a/rtl/darwin/arm/sighnd.inc
+++ b/rtl/darwin/arm/sighnd.inc
@@ -24,8 +24,8 @@ begin
SIGFPE :
begin
Case Info^.si_code Of
- FPE_FLTDIV,
- FPE_INTDIV : Res:=200; { floating point divide by zero }
+ FPE_FLTDIV : Res:=208; { floating point divide by zero }
+ FPE_INTDIV : Res:=200; { integer point divide by zero }
FPE_FLTOVF : Res:=205; { floating point overflow }
FPE_FLTUND : Res:=206; { floating point underflow }
FPE_FLTRES, { floating point inexact result }
diff --git a/rtl/darwin/ppcgen/ppchnd.inc b/rtl/darwin/ppcgen/ppchnd.inc
index 7718ae84a5..21459f11e3 100644
--- a/rtl/darwin/ppcgen/ppchnd.inc
+++ b/rtl/darwin/ppcgen/ppchnd.inc
@@ -24,8 +24,8 @@ begin
SIGFPE :
begin
Case Info^.si_code Of
- FPE_FLTDIV,
- FPE_INTDIV : Res:=200; { floating point divide by zero }
+ FPE_FLTDIV : Res:=208; { floating point divide by zero }
+ FPE_INTDIV : Res:=200; { integer divide by zero }
FPE_FLTOVF : Res:=205; { floating point overflow }
FPE_FLTUND : Res:=206; { floating point underflow }
FPE_FLTRES, { floating point inexact result }
diff --git a/rtl/darwin/termiosproc.inc b/rtl/darwin/termiosproc.inc
index 6da3055811..9e1a645c11 100644
--- a/rtl/darwin/termiosproc.inc
+++ b/rtl/darwin/termiosproc.inc
@@ -25,7 +25,7 @@ end;
Function TCSetAttr(fd:cint;OptAct:cint;const tios:TermIOS):cint;
var
- nr:culong;
+ nr:TIOCtlRequest;
begin
case OptAct of
TCSANOW : nr:=TIOCSETA;
diff --git a/rtl/darwin/x86/x86hnd.inc b/rtl/darwin/x86/x86hnd.inc
index a32040dc16..b3f94a50ad 100644
--- a/rtl/darwin/x86/x86hnd.inc
+++ b/rtl/darwin/x86/x86hnd.inc
@@ -25,13 +25,13 @@ begin
SIGFPE :
begin
Case Info^.si_code Of
- FPE_INTDIV, { integer divide by zero -NOTIMP on Mac OS X 10.4.7 }
- FPE_FLTDIV : Res:=200; { floating point divide by zero }
+ FPE_INTDIV : Res:=200; { integer divide by zero -NOTIMP on Mac OS X 10.4.7 }
+ FPE_FLTDIV : Res:=208; { floating point divide by zero }
FPE_FLTOVF : Res:=205; { floating point overflow }
FPE_FLTUND : Res:=206; { floating point underflow }
FPE_FLTRES, { floating point inexact result }
FPE_FLTINV : Res:=207; { invalid floating point operation }
- Else
+ else
begin
{ Assume that if an integer divide was executed, the }
{ error was a divide-by-zero (FPE_INTDIV is not }
diff --git a/rtl/haiku/termiosproc.inc b/rtl/haiku/termiosproc.inc
index a51e295772..41c28f539e 100644
--- a/rtl/haiku/termiosproc.inc
+++ b/rtl/haiku/termiosproc.inc
@@ -26,7 +26,7 @@ end;
Function TCSetAttr(fd:cint;OptAct:cint;const tios:TermIOS):cint;
var
- nr:cint;
+ nr: TIOCtlRequest;
begin
case OptAct of
TCSANOW : nr:=TIOCSETA;
diff --git a/rtl/inc/systemh.inc b/rtl/inc/systemh.inc
index 460b355493..27888c48a4 100644
--- a/rtl/inc/systemh.inc
+++ b/rtl/inc/systemh.inc
@@ -597,8 +597,18 @@ Type
PPCodePointer = ^PCodePointer;
PBoolean = ^Boolean;
+
+{$IFNDEF VER3_0}
+ PBoolean8 = ^Boolean8;
+{$ENDIF VER3_0}
+ PBoolean16 = ^Boolean16;
+ PBoolean32 = ^Boolean32;
+ PBoolean64 = ^Boolean64;
+
+ PByteBool = ^ByteBool;
PWordBool = ^WordBool;
PLongBool = ^LongBool;
+ PQWordBool = ^QWordBool;
PNativeInt = ^NativeInt;
PNativeUInt = ^NativeUint;
diff --git a/rtl/linux/sparcgen/sysnr.inc b/rtl/linux/sparcgen/sysnr.inc
index 0363d70b57..8fb10826c2 100644
--- a/rtl/linux/sparcgen/sysnr.inc
+++ b/rtl/linux/sparcgen/sysnr.inc
@@ -20,6 +20,7 @@
}
Const
+ syscall_nr_restart_syscall = 0 ; // Linux Specific
syscall_nr_exit = 1 ; // Common
syscall_nr_fork = 2 ; // Common
syscall_nr_read = 3 ; // Common
@@ -44,17 +45,21 @@ Const
syscall_nr_capset = 22 ; // Linux Specific
syscall_nr_setuid = 23 ; // Implemented via setreuid in SunOS
syscall_nr_getuid = 24 ; // Common
-// syscall_nr_time alias = 25 ENOSYS under SunOS
+ syscall_nr_vmsplice = 25 ; // ENOSYS under SunOS
syscall_nr_ptrace = 26 ; // Common
syscall_nr_alarm = 27 ; // Implemented via setitimer in SunOS
syscall_nr_sigaltstack = 28 ; // Common
syscall_nr_pause = 29 ; // Is sigblock(0)->sigpause() in SunOS
syscall_nr_utime = 30 ; // Implemented via utimes() under SunOS
+{$ifndef CPUSPARC64}
syscall_nr_lchown32 = 31 ; // Linux sparc32 specific
syscall_nr_fchown32 = 32 ; // Linux sparc32 specific
+{$endif ndef CPUSPARC64}
syscall_nr_access = 33 ; // Common
syscall_nr_nice = 34 ; // Implemented via get/setpriority() in SunOS
+{$ifndef CPUSPARC64}
syscall_nr_chown32 = 35 ; // Linux sparc32 specific
+{$endif ndef CPUSPARC64}
syscall_nr_sync = 36 ; // Common
syscall_nr_kill = 37 ; // Common
syscall_nr_stat = 38 ; // Common
@@ -63,7 +68,9 @@ Const
syscall_nr_dup = 41 ; // Common
syscall_nr_pipe = 42 ; // Common
syscall_nr_times = 43 ; // Implemented via getrusage() in SunOS
+{$ifndef CPUSPARC64}
syscall_nr_getuid32 = 44 ; // Linux sparc32 specific
+{$endif ndef CPUSPARC64}
syscall_nr_umount2 = 45 ; // Linux Specific
syscall_nr_setgid = 46 ; // Implemented via setregid() in SunOS
syscall_nr_getgid = 47 ; // Common
@@ -72,10 +79,14 @@ Const
syscall_nr_getegid = 50 ; // SunOS calls getgid()
syscall_nr_acct = 51 ; // Common
// syscall_nr_memory_ordering= 52 Linux sparc64 specific
+{$ifndef CPUSPARC64}
syscall_nr_getgid32 = 53 ; // Linux sparc32 specific
+{$endif ndef CPUSPARC64}
syscall_nr_ioctl = 54 ; // Common
syscall_nr_reboot = 55 ; // Common
+{$ifndef CPUSPARC64}
syscall_nr_mmap2 = 56 ; // Linux sparc32 Specific
+{$endif ndef CPUSPARC64}
syscall_nr_symlink = 57 ; // Common
syscall_nr_readlink = 58 ; // Common
syscall_nr_execve = 59 ; // Common
@@ -88,32 +99,50 @@ Const
syscall_nr_vfork = 66 ; // Common
syscall_nr_pread64 = 67 ; // Linux Specific
syscall_nr_pwrite64 = 68 ; // Linux Specific
+{$ifndef CPUSPARC64}
syscall_nr_geteuid32 = 69 ; // Linux sparc32, sbrk under SunOS
syscall_nr_getegid32 = 70 ; // Linux sparc32, sstk under SunOS
+{$endif ndef CPUSPARC64}
syscall_nr_mmap = 71 ; // Common
+{$ifndef CPUSPARC64}
syscall_nr_setreuid32 = 72 ; // Linux sparc32, vadvise under SunOS
+{$endif ndef CPUSPARC64}
syscall_nr_munmap = 73 ; // Common
syscall_nr_mprotect = 74 ; // Common
syscall_nr_madvise = 75 ; // Common
syscall_nr_vhangup = 76 ; // Common
+{$ifndef CPUSPARC64}
syscall_nr_truncate64 = 77 ; // Linux sparc32 Specific
+{$endif ndef CPUSPARC64}
syscall_nr_mincore = 78 ; // Common
syscall_nr_getgroups = 79 ; // Common
syscall_nr_setgroups = 80 ; // Common
syscall_nr_getpgrp = 81 ; // Common
+{$ifndef CPUSPARC64}
syscall_nr_setgroups32 = 82 ; // Linux sparc32, setpgrp under SunOS
+{$endif ndef CPUSPARC64}
syscall_nr_setitimer = 83 ; // Common
+{$ifndef CPUSPARC64}
syscall_nr_ftruncate64 = 84 ; // Linux sparc32 Specific
+{$endif ndef CPUSPARC64}
syscall_nr_swapon = 85 ; // Common
syscall_nr_getitimer = 86 ; // Common
+{$ifndef CPUSPARC64}
syscall_nr_setuid32 = 87 ; // Linux sparc32, gethostname under SunOS
+{$endif ndef CPUSPARC64}
syscall_nr_sethostname = 88 ; // Common
+{$ifndef CPUSPARC64}
syscall_nr_setgid32 = 89 ; // Linux sparc32, getdtablesize under SunOS
+{$endif ndef CPUSPARC64}
syscall_nr_dup2 = 90 ; // Common
+{$ifndef CPUSPARC64}
syscall_nr_setfsuid32 = 91 ; // Linux sparc32, getdopt under SunOS
+{$endif ndef CPUSPARC64}
syscall_nr_fcntl = 92 ; // Common
syscall_nr_select = 93 ; // Common
+{$ifndef CPUSPARC64}
syscall_nr_setfsgid32 = 94 ; // Linux sparc32, setdopt under SunOS
+{$endif ndef CPUSPARC64}
syscall_nr_fsync = 95 ; // Common
syscall_nr_setpriority = 96 ; // Common
syscall_nr_socket = 97 ; // Common
@@ -127,14 +156,23 @@ Const
syscall_nr_rt_sigtimedwait = 105 ; // Linux Specific
syscall_nr_rt_sigqueueinfo = 106 ; // Linux Specific
syscall_nr_rt_sigsuspend = 107 ; // Linux Specific
+{$ifndef CPUSPARC64}
syscall_nr_setresuid32 = 108 ; // Linux Specific, sigvec under SunOS
syscall_nr_getresuid32 = 109 ; // Linux Specific, sigblock under SunOS
syscall_nr_setresgid32 = 110 ; // Linux Specific, sigsetmask under SunOS
syscall_nr_getresgid32 = 111 ; // Linux Specific, sigpause under SunOS
syscall_nr_setregid32 = 112 ; // Linux sparc32, sigstack under SunOS
+{$else}
+ syscall_nr_setresuid = 108 ; // Linux Specific, sigvec under SunOS
+ syscall_nr_getresuid = 109 ; // Linux Specific, sigblock under SunOS
+ syscall_nr_setresgid = 110 ; // Linux Specific, sigsetmask under SunOS
+ syscall_nr_getresgid = 111 ; // Linux Specific, sigpause under SunOS
+{$endif}
syscall_nr_recvmsg = 113 ; // Common
syscall_nr_sendmsg = 114 ; // Common
+{$ifndef CPUSPARC64}
syscall_nr_getgroups32 = 115 ; // Linux sparc32, vtrace under SunOS
+{$endif ndef CPUSPARC64}
syscall_nr_gettimeofday = 116 ; // Common
syscall_nr_getrusage = 117 ; // Common
syscall_nr_getsockopt = 118 ; // Common
@@ -159,9 +197,8 @@ Const
syscall_nr_rmdir = 137 ; // Common
syscall_nr_utimes = 138 ; // SunOS Specific
syscall_nr_stat64 = 139 ; // Linux sparc32 Specific
-// syscall_nr_adjtime = 140 SunOS Specific
+ syscall_nr_sendfile64 = 140 ; // adjtime under SunOS
syscall_nr_getpeername = 141 ; // Common
-// syscall_nr_gethostid = 142 SunOS Specific
syscall_nr_futex = 142 ; // gethostid under SunOS
syscall_nr_gettid = 143 ; // ENOSYS under SunOS
syscall_nr_getrlimit = 144 ; // Common
@@ -175,48 +212,52 @@ Const
syscall_nr_inotify_add_watch= 152 ; // Linux specific
syscall_nr_poll = 153 ; // Common
syscall_nr_getdents64 = 154 ; // Linux specific
+{$ifndef CPUSPARC64}
syscall_nr_fcntl64 = 155 ; // Linux sparc32 Specific
+{$endif ndef CPUSPARC64}
syscall_nr_inotify_rm_watch = 156 ; // Linux specific
syscall_nr_statfs = 157 ; // Common
syscall_nr_fstatfs = 158 ; // Common
syscall_nr_umount = 159 ; // Common
-// syscall_nr_async_daemon = 160 SunOS Specific
-// syscall_nr_getfh = 161 SunOS Specific
+ syscall_nr_sched_set_affinity = 160; // Linux specific, async_daemon under SunOS
+ syscall_nr_sched_get_affinity = 161; // Linux specific, getfh under SunOS
syscall_nr_getdomainname = 162 ; // SunOS Specific
syscall_nr_setdomainname = 163 ; // Common
-// syscall_nr_ni_syscall = 164 ENOSYS under SunOS
+{$ifdef CPUSPARC64}
+ syscall_nr_utrap_install = 164 ; // SYSV ABI/v9 required
+{$endif def CPUSPARC64}
syscall_nr_quotactl = 165 ; // Common
-// syscall_nr_exportfs = 166 SunOS Specific
+ syscall_nr_set_tid_address = 166 ; // Linux specific, exportfs under SunOS
syscall_nr_mount = 167 ; // Common
syscall_nr_ustat = 168 ; // Common
-// syscall_nr_semsys = 169 SunOS Specific
-// syscall_nr_msgsys = 170 SunOS Specific
-// syscall_nr_shmsys = 171 SunOS Specific
-// syscall_nr_auditsys = 172 SunOS Specific
-// syscall_nr_rfssys = 173 SunOS Specific
+ syscall_nr_setxattr = 169 ; // SunOS: semsys
+ syscall_nr_lsetxattr = 170 ; // SunOS: msgsys
+ syscall_nr_fsetxattr = 171 ; // SunOS: shmsys
+ syscall_nr_getxattr = 172 ; // SunOS: auditsys
+ syscall_nr_lgetxattr = 173 ; // SunOS: rfssys
syscall_nr_getdents = 174 ; // Common
syscall_nr_setsid = 175 ; // Common
syscall_nr_fchdir = 176 ; // Common
-// syscall_nr_fchroot = 177 SunOS Specific
-// syscall_nr_vpixsys = 178 SunOS Specific
-// syscall_nr_aioread = 179 SunOS Specific
-// syscall_nr_aiowrite = 180 SunOS Specific
-// syscall_nr_aiowait = 181 SunOS Specific
-// syscall_nr_aiocancel = 182 SunOS Specific
+ syscall_nr_fgetxattr = 177 ; // SunOS: fchroot
+ syscall_nr_listxattr = 178 ; // SunOS: vpixsys
+ syscall_nr_llistxattr = 179 ; // SunOS: aioread
+ syscall_nr_flistxattr = 180 ; // SunOS: aiowrite
+ syscall_nr_removexattr = 181 ; // SunOS: aiowait
+ syscall_nr_lremovexattr = 182 ; // SunOS: aiocancel
syscall_nr_sigpending = 183 ; // Common
syscall_nr_query_module = 184 ; // Linux Specific
syscall_nr_setpgid = 185 ; // Common
-// syscall_nr_pathconf = 186 SunOS Specific
+ syscall_nr_fremovexattr = 186 ; // SunOS: pathconf
syscall_nr_tkill = 187 ; // SunOS: fpathconf
syscall_nr_exit_group = 188 ; // SunOS sysconf
syscall_nr_uname = 189 ; // Linux Specific
syscall_nr_init_module = 190 ; // Linux Specific
syscall_nr_personality = 191 ; // Linux Specific
-// syscall_nr_prof = 192 Linux Specific
+ syscall_nr_remap_file_pages = 192 ; // Linux Specific
syscall_nr_epoll_create = 193 ; // Linux Specific - was break
syscall_nr_epoll_ctl = 194 ; // Linux Specific - was lock
syscall_nr_epoll_wait = 195 ; // Linux Specific - was mpx
-// syscall_nr_ulimit = 196 Linux Specific
+ syscall_nr_ioprio_set = 196 ; // Linux Specific
syscall_nr_getppid = 197 ; // Linux Specific
syscall_nr_sigaction = 198 ; // Linux Specific
syscall_nr_sgetmask = 199 ; // Linux Specific
@@ -228,17 +269,17 @@ Const
syscall_nr_readahead = 205 ; // Linux Specific
syscall_nr_socketcall = 206 ; // Linux Specific
syscall_nr_syslog = 207 ; // Linux Specific
-// syscall_nr_olduname = 208 Linux Specific
-// syscall_nr_iopl = 209 Linux Specific - i386 specific, unused
-// syscall_nr_idle = 210 Linux Specific - was sys_idle, now unused
-// syscall_nr_vm86 = 211 Linux Specific - i386 specific, unused
+ syscall_nr_lookup_dcookie = 208 ; // Linux Specific
+ syscall_nr_fadvise64 = 209 ; // Linux Specific
+ syscall_nr_fadvise64_64 = 210 ; // Linux Specific
+ syscall_nr_tgkill = 211 ; // Linux Specific
syscall_nr_waitpid = 212 ; // Linux Specific
syscall_nr_swapoff = 213 ; // Linux Specific
syscall_nr_sysinfo = 214 ; // Linux Specific
syscall_nr_ipc = 215 ; // Linux Specific
syscall_nr_sigreturn = 216 ; // Linux Specific
syscall_nr_clone = 217 ; // Linux Specific
-// syscall_nr_modify_ldt = 218 Linux Specific - i386 specific, unused
+ syscall_nr_ioprio_get = 218 ; // Linux Specific
syscall_nr_adjtimex = 219 ; // Linux Specific
syscall_nr_sigprocmask = 220 ; // Linux Specific
syscall_nr_create_module = 221 ; // Linux Specific
@@ -251,11 +292,13 @@ Const
syscall_nr_setfsuid = 228 ; // Linux Specific
syscall_nr_setfsgid = 229 ; // Linux Specific
syscall_nr__newselect = 230 ; // Linux Specific
+{$ifndef CPUSPARC64}
syscall_nr_time = 231 ; // Linux Specific
-// syscall_nr_oldstat = 232 Linux Specific
+{$endif ndef CPUSPARC64}
+ syscall_nr_splice = 232 ; // Linux Specific
syscall_nr_stime = 233 ; // Linux Specific
-// syscall_nr_oldfstat = 234 Linux Specific
-// syscall_nr_phys = 235 Linux Specific
+ syscall_nr_statfs64 = 234 ; // Linux Specific
+ syscall_nr_fstatfs64 = 235 ; // Linux Specific
syscall_nr__llseek = 236 ; // Linux Specific
syscall_nr_mlock = 237;
syscall_nr_munlock = 238;
@@ -287,7 +330,9 @@ Const
syscall_nr_timer_getoverrun = 264;
syscall_nr_timer_delete = 265;
syscall_nr_timer_create = 266;
- { syscall_nr_vserver 267 Reserved for VSERVER }
+{$ifdef VSERVER}
+ syscall_nr_vserver = 267; // Reserved for VSERVER
+{$endif def VSERVER}
syscall_nr_io_setup = 268;
syscall_nr_io_destroy = 269;
syscall_nr_io_submit = 270;
@@ -332,7 +377,7 @@ Const
syscall_nr_epoll_pwait = 309;
syscall_nr_utimensat = 310;
syscall_nr_signalfd = 311;
- syscall_nr_timerfd = 312;
+ syscall_nr_timerfd_create = 312;
syscall_nr_eventfd = 313;
syscall_nr_fallocate = 314;
syscall_nr_timerfd_settime = 315;
@@ -381,3 +426,5 @@ Const
syscall_nr_preadv2 = 358;
syscall_nr_pwritev2 = 359;
syscall_nr_statx = 360;
+ syscall_nr_io_pgetevents = 361;
+
diff --git a/rtl/linux/t_linux.h2paschk b/rtl/linux/t_linux.h2paschk
new file mode 100644
index 0000000000..bef63a0baa
--- /dev/null
+++ b/rtl/linux/t_linux.h2paschk
@@ -0,0 +1,151 @@
+# OpenBSD RTL-to-C structure compatibility checker description file
+#
+# Use
+# h2paschk t_openbsd.h2paschk
+#
+# ...to generate Pascal and C code, then make sure they both compile and that
+# the Pascal program produces the same output as the C program for each
+# supported architecture.
+
+@Pascal uses baseunix;
+@Pascal begin
+@C #define _LARGEFILE_SOURCE 1
+@C #define _FILE_OFFSET_BITS 64
+## @C #define _USE_FILE_OFFSET64
+
+@C #include <sys/types.h>
+@C #include <sys/stat.h>
+@C #include <sys/statfs.h>
+@C #include <sys/mount.h>
+@C #include <sys/time.h>
+@C #include <sys/times.h>
+@C #include <sys/resource.h>
+@C #include <sys/uio.h>
+@C #include <dirent.h>
+@C #include <poll.h>
+@C #include <utime.h>
+@C #include <fcntl.h>
+@C #include <unistd.h>
+@C #include <stdio.h>
+@C #include <stddef.h>
+@C int main()
+@C {
+
+@record timespec,struct timespec
+.tv_sec
+.tv_nsec
+
+@record stat,struct stat
+.st_dev
+.st_ino
+.st_mode
+#.st_padding0
+.st_nlink
+.st_uid
+.st_gid
+#.st_padding1
+.st_rdev
+.st_size
+.st_blocks
+.st_blksize
+.st_atime,st_atim.tv_sec
+.st_atime_nsec,st_atim.tv_nsec
+.st_mtime,st_mtim.tv_sec
+.st_mtime_nsec,st_mtim.tv_nsec
+.st_ctime,st_ctim.tv_sec
+.st_ctime_nsec,st_ctim.tv_nsec
+@Pascal {$if defined (CPUPOWERPC) or defined(CPUPOWERPC64)}
+@C #ifdef __powerpc__
+.__unused4
+.__unused5
+@Pascal {$ifdef CPU64}
+@C #ifdef __LP64__
+.__unused6
+@C #endif
+@Pascal {$endif CPU64}
+@C #endif
+@Pascal {$endif powerpc}
+#.st_flags
+#.st_gen
+
+@record dirent,struct dirent
+.d_fileno
+.d_off
+.d_reclen
+.d_type
+#.d_pad0
+#.d_namlen
+#.d_pad1
+.d_name
+
+@record TStatFs,struct statfs
+.fstype,f_type
+.bsize,f_bsize
+.blocks,f_blocks
+.bfree,f_bfree
+.bavail,f_bavail
+.files,f_files
+.ffree,f_ffree
+.fsid,f_fsid
+.namelen,f_namelen
+.frsize,f_frsize
+.flags,f_flags
+.spare,f_spare
+
+@record pollfd,struct pollfd
+.fd
+.events
+.revents
+
+@record utimbuf,struct utimbuf
+.actime
+.modtime
+
+@record flock,struct flock
+.l_start
+.l_len
+.l_pid
+.l_type
+.l_whence
+
+@record tms,struct tms
+.tms_utime
+.tms_stime
+.tms_cutime
+.tms_cstime
+
+@record timezone,struct timezone
+.tz_minuteswest
+.tz_dsttime
+
+#@record rusage,struct rusage
+#.ru_utime
+#.ru_stime
+#.ru_maxrss
+#.ru_ixrss
+#.ru_idrss
+#.ru_isrss
+#.ru_minflt
+#.ru_majflt
+#.ru_nswap
+#.ru_inblock
+#.ru_oublock
+#.ru_msgsnd
+#.ru_msgrcv
+#.ru_nsignals
+#.ru_nvcsw
+#.ru_nivcsw
+
+@record TRLimit,struct rlimit
+.rlim_cur
+.rlim_max
+
+@record iovec,struct iovec
+.iov_base
+.iov_len
+
+@C return 0;
+@C }
+
+@Pascal end.
+
diff --git a/rtl/linux/termiosproc.inc b/rtl/linux/termiosproc.inc
index 90c54856da..b2e9ae9fa2 100644
--- a/rtl/linux/termiosproc.inc
+++ b/rtl/linux/termiosproc.inc
@@ -15,7 +15,7 @@ end;
Function TCSetAttr(fd:cint;OptAct:cint;const tios:TermIOS):cint;
var
- nr:culong;
+ nr:TIOCtlRequest;
begin
case OptAct of
TCSANOW : nr:=TCSETS;
diff --git a/rtl/netbsd/termiosproc.inc b/rtl/netbsd/termiosproc.inc
index b18790c2ca..ac04fdd77a 100644
--- a/rtl/netbsd/termiosproc.inc
+++ b/rtl/netbsd/termiosproc.inc
@@ -26,7 +26,7 @@ end;
Function TCSetAttr(fd:cint;OptAct:cint;const tios:TermIOS):cint;
var
- nr:cint;
+ nr:TIOCtlRequest;
begin
case OptAct of
TCSANOW : nr:=TIOCSETA;
diff --git a/rtl/objpas/classes/classesh.inc b/rtl/objpas/classes/classesh.inc
index 2c31a44090..119a777980 100644
--- a/rtl/objpas/classes/classesh.inc
+++ b/rtl/objpas/classes/classesh.inc
@@ -894,13 +894,162 @@ type
procedure SetSize(const NewSize: Int64); virtual;overload;
procedure ReadNotImplemented;
procedure WriteNotImplemented;
+ function ReadMaxSizeData(Var Buffer; aSize,aCount : NativeInt) : NativeInt;
+ Procedure ReadExactSizeData(Var Buffer; aSize,aCount : NativeInt);
+ function WriteMaxSizeData(Const Buffer; aSize,aCount : NativeInt) : NativeInt;
+ Procedure WriteExactSizeData(Const Buffer; aSize,aCount : NativeInt);
public
function Read(var Buffer; Count: Longint): Longint; virtual;
+ function Read(Buffer: TBytes; Count: Longint): Longint; overload;
+ function Read(Buffer : TBytes; aOffset, Count: Longint): Longint; overload;
+
+ function Write(const Buffer: TBytes; Offset, Count: Longint): Longint; overload;
+ function Write(const Buffer: TBytes; Count: Longint): Longint; overload;
function Write(const Buffer; Count: Longint): Longint; virtual;
+
function Seek(Offset: Longint; Origin: Word): Longint; virtual; overload;
function Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; virtual; overload;
+
+ function ReadData(Buffer: Pointer; Count: NativeInt): NativeInt; overload;
+ function ReadData(const Buffer: TBytes; Count: NativeInt): NativeInt; overload;
+ function ReadData(var Buffer: Boolean): NativeInt; overload;
+ function ReadData(var Buffer: Boolean; Count: NativeInt): NativeInt; overload;
+ function ReadData(var Buffer: AnsiChar): NativeInt; overload;
+ function ReadData(var Buffer: AnsiChar; Count: NativeInt): NativeInt; overload;
+ function ReadData(var Buffer: WideChar): NativeInt; overload;
+ function ReadData(var Buffer: WideChar; Count: NativeInt): NativeInt; overload;
+ function ReadData(var Buffer: Int8): NativeInt; overload;
+ function ReadData(var Buffer: Int8; Count: NativeInt): NativeInt; overload;
+ function ReadData(var Buffer: UInt8): NativeInt; overload;
+ function ReadData(var Buffer: UInt8; Count: NativeInt): NativeInt; overload;
+ function ReadData(var Buffer: Int16): NativeInt; overload;
+ function ReadData(var Buffer: Int16; Count: NativeInt): NativeInt; overload;
+ function ReadData(var Buffer: UInt16): NativeInt; overload;
+ function ReadData(var Buffer: UInt16; Count: NativeInt): NativeInt; overload;
+ function ReadData(var Buffer: Int32): NativeInt; overload;
+ function ReadData(var Buffer: Int32; Count: NativeInt): NativeInt; overload;
+ function ReadData(var Buffer: UInt32): NativeInt; overload;
+ function ReadData(var Buffer: UInt32; Count: NativeInt): NativeInt; overload;
+ function ReadData(var Buffer: Int64): NativeInt; overload;
+ function ReadData(var Buffer: Int64; Count: NativeInt): NativeInt; overload;
+ function ReadData(var Buffer: UInt64): NativeInt; overload;
+ function ReadData(var Buffer: UInt64; Count: NativeInt): NativeInt; overload;
+ function ReadData(var Buffer: Single): NativeInt; overload;
+ function ReadData(var Buffer: Single; Count: NativeInt): NativeInt; overload;
+ function ReadData(var Buffer: Double): NativeInt; overload;
+ function ReadData(var Buffer: Double; Count: NativeInt): NativeInt; overload;
+{$IFDEF FPC_HAS_TYPE_EXTENDED}
+ function ReadData(var Buffer: Extended): NativeInt; overload;
+ function ReadData(var Buffer: Extended; Count: NativeInt): NativeInt; overload;
+ function ReadData(var Buffer: TExtended80Rec): NativeInt; overload;
+ function ReadData(var Buffer: TExtended80Rec; Count: NativeInt): NativeInt; overload;
+{$ENDIF}
procedure ReadBuffer(var Buffer; Count: Longint);
+ procedure ReadBuffer(var Buffer: TBytes; Count: NativeInt); overload;
+ procedure ReadBuffer(var Buffer: TBytes; Offset, Count: NativeInt); overload;
+
+ procedure ReadBufferData(var Buffer: Boolean); overload;
+ procedure ReadBufferData(var Buffer: Boolean; Count: NativeInt); overload;
+ procedure ReadBufferData(var Buffer: AnsiChar); overload;
+ procedure ReadBufferData(var Buffer: AnsiChar; Count: NativeInt); overload;
+ procedure ReadBufferData(var Buffer: WideChar); overload;
+ procedure ReadBufferData(var Buffer: WideChar; Count: NativeInt); overload;
+ procedure ReadBufferData(var Buffer: Int8); overload;
+ procedure ReadBufferData(var Buffer: Int8; Count: NativeInt); overload;
+ procedure ReadBufferData(var Buffer: UInt8); overload;
+ procedure ReadBufferData(var Buffer: UInt8; Count: NativeInt); overload;
+ procedure ReadBufferData(var Buffer: Int16); overload;
+ procedure ReadBufferData(var Buffer: Int16; Count: NativeInt); overload;
+ procedure ReadBufferData(var Buffer: UInt16); overload;
+ procedure ReadBufferData(var Buffer: UInt16; Count: NativeInt); overload;
+ procedure ReadBufferData(var Buffer: Int32); overload;
+ procedure ReadBufferData(var Buffer: Int32; Count: NativeInt); overload;
+ procedure ReadBufferData(var Buffer: UInt32); overload;
+ procedure ReadBufferData(var Buffer: UInt32; Count: NativeInt); overload;
+ procedure ReadBufferData(var Buffer: Int64); overload;
+ procedure ReadBufferData(var Buffer: Int64; Count: NativeInt); overload;
+ procedure ReadBufferData(var Buffer: UInt64); overload;
+ procedure ReadBufferData(var Buffer: UInt64; Count: NativeInt); overload;
+ procedure ReadBufferData(var Buffer: Single); overload;
+ procedure ReadBufferData(var Buffer: Single; Count: NativeInt); overload;
+ procedure ReadBufferData(var Buffer: Double); overload;
+ procedure ReadBufferData(var Buffer: Double; Count: NativeInt); overload;
+{$IFDEF FPC_HAS_TYPE_EXTENDED}
+ procedure ReadBufferData(var Buffer: Extended); overload;
+ procedure ReadBufferData(var Buffer: Extended; Count: NativeInt); overload;
+ procedure ReadBufferData(var Buffer: TExtended80Rec); overload;
+ procedure ReadBufferData(var Buffer: TExtended80Rec; Count: NativeInt); overload;
+{$ENDIF}
procedure WriteBuffer(const Buffer; Count: Longint);
+ procedure WriteBuffer(const Buffer: TBytes; Count: NativeInt); overload;
+ procedure WriteBuffer(const Buffer: TBytes; Offset, Count: NativeInt); overload;
+
+ function WriteData(const Buffer: TBytes; Count: NativeInt): NativeInt; overload;
+ function WriteData(const Buffer: Pointer; Count: NativeInt): NativeInt; overload;
+ function WriteData(const Buffer: Boolean): NativeInt; overload;
+ function WriteData(const Buffer: Boolean; Count: NativeInt): NativeInt; overload;
+ function WriteData(const Buffer: AnsiChar): NativeInt; overload;
+ function WriteData(const Buffer: AnsiChar; Count: NativeInt): NativeInt; overload;
+ function WriteData(const Buffer: WideChar): NativeInt; overload;
+ function WriteData(const Buffer: WideChar; Count: NativeInt): NativeInt; overload;
+ function WriteData(const Buffer: Int8): NativeInt; overload;
+ function WriteData(const Buffer: Int8; Count: NativeInt): NativeInt; overload;
+ function WriteData(const Buffer: UInt8): NativeInt; overload;
+ function WriteData(const Buffer: UInt8; Count: NativeInt): NativeInt; overload;
+ function WriteData(const Buffer: Int16): NativeInt; overload;
+ function WriteData(const Buffer: Int16; Count: NativeInt): NativeInt; overload;
+ function WriteData(const Buffer: UInt16): NativeInt; overload;
+ function WriteData(const Buffer: UInt16; Count: NativeInt): NativeInt; overload;
+ function WriteData(const Buffer: Int32): NativeInt; overload;
+ function WriteData(const Buffer: Int32; Count: NativeInt): NativeInt; overload;
+ function WriteData(const Buffer: UInt32): NativeInt; overload;
+ function WriteData(const Buffer: UInt32; Count: NativeInt): NativeInt; overload;
+ function WriteData(const Buffer: Int64): NativeInt; overload;
+ function WriteData(const Buffer: Int64; Count: NativeInt): NativeInt; overload;
+ function WriteData(const Buffer: UInt64): NativeInt; overload;
+ function WriteData(const Buffer: UInt64; Count: NativeInt): NativeInt; overload;
+ function WriteData(const Buffer: Single): NativeInt; overload;
+ function WriteData(const Buffer: Single; Count: NativeInt): NativeInt; overload;
+ function WriteData(const Buffer: Double): NativeInt; overload;
+ function WriteData(const Buffer: Double; Count: NativeInt): NativeInt; overload;
+{$IFDEF FPC_HAS_TYPE_EXTENDED}
+ function WriteData(const Buffer: Extended): NativeInt; overload;
+ function WriteData(const Buffer: Extended; Count: NativeInt): NativeInt; overload;
+ function WriteData(const Buffer: TExtended80Rec): NativeInt; overload;
+ function WriteData(const Buffer: TExtended80Rec; Count: NativeInt): NativeInt; overload;
+{$ENDIF}
+ procedure WriteBufferData(Buffer: Integer); overload;
+ procedure WriteBufferData(Buffer: Integer; Count: NativeInt); overload;
+ procedure WriteBufferData(Buffer: Boolean); overload;
+ procedure WriteBufferData(Buffer: Boolean; Count: NativeInt); overload;
+ procedure WriteBufferData(Buffer: AnsiChar); overload;
+ procedure WriteBufferData(Buffer: AnsiChar; Count: NativeInt); overload;
+ procedure WriteBufferData(Buffer: WideChar); overload;
+ procedure WriteBufferData(Buffer: WideChar; Count: NativeInt); overload;
+ procedure WriteBufferData(Buffer: Int8); overload;
+ procedure WriteBufferData(Buffer: Int8; Count: NativeInt); overload;
+ procedure WriteBufferData(Buffer: UInt8); overload;
+ procedure WriteBufferData(Buffer: UInt8; Count: NativeInt); overload;
+ procedure WriteBufferData(Buffer: Int16); overload;
+ procedure WriteBufferData(Buffer: Int16; Count: NativeInt); overload;
+ procedure WriteBufferData(Buffer: UInt16); overload;
+ procedure WriteBufferData(Buffer: UInt16; Count: NativeInt); overload;
+ procedure WriteBufferData(Buffer: UInt32); overload;
+ procedure WriteBufferData(Buffer: UInt32; Count: NativeInt); overload;
+ procedure WriteBufferData(Buffer: Int64); overload;
+ procedure WriteBufferData(Buffer: Int64; Count: NativeInt); overload;
+ procedure WriteBufferData(Buffer: UInt64); overload;
+ procedure WriteBufferData(Buffer: UInt64; Count: NativeInt); overload;
+ procedure WriteBufferData(Buffer: Single); overload;
+ procedure WriteBufferData(Buffer: Single; Count: NativeInt); overload;
+ procedure WriteBufferData(Buffer: Double); overload;
+ procedure WriteBufferData(Buffer: Double; Count: NativeInt); overload;
+{$IFDEF FPC_HAS_TYPE_EXTENDED}
+ procedure WriteBufferData(Buffer: Extended); overload;
+ procedure WriteBufferData(Buffer: Extended; Count: NativeInt); overload;
+ procedure WriteBufferData(Buffer: TExtended80Rec); overload;
+ procedure WriteBufferData(Buffer: TExtended80Rec; Count: NativeInt); overload;
+{$ENDIF}
function CopyFrom(Source: TStream; Count: Int64): Int64;
function ReadComponent(Instance: TComponent): TComponent;
function ReadComponentRes(Instance: TComponent): TComponent;
@@ -990,6 +1139,7 @@ type
private
FMemory: Pointer;
FSize, FPosition: PtrInt;
+ FSizeBoundsSeek : Boolean;
protected
Function GetSize : Int64; Override;
function GetPosition: Int64; Override;
@@ -1000,6 +1150,7 @@ type
procedure SaveToStream(Stream: TStream);
procedure SaveToFile(const FileName: string);
property Memory: Pointer read FMemory;
+ Property SizeBoundsSeek : Boolean Read FSizeBoundsSeek Write FSizeBoundsSeek;
end;
{ TMemoryStream }
diff --git a/rtl/objpas/classes/streams.inc b/rtl/objpas/classes/streams.inc
index ac842738c9..fe5d7ed0d9 100644
--- a/rtl/objpas/classes/streams.inc
+++ b/rtl/objpas/classes/streams.inc
@@ -30,6 +30,26 @@ begin
Result := 0;
end;
+function TStream.Read(Buffer: TBytes; Count: Longint): Longint;
+begin
+ Result:=Read(Buffer,0,Count);
+end;
+
+function TStream.Read(Buffer: TBytes; aOffset, Count: Longint): Longint;
+begin
+ Result:=Read(Buffer[aOffset],Count);
+end;
+
+function TStream.Write(const Buffer: TBytes; Offset, Count: Longint): Longint;
+begin
+ Result:=Write(Buffer[Offset],Count);
+end;
+
+function TStream.Write(const Buffer: TBytes; Count: Longint): Longint;
+begin
+ Result:=Write(Buffer,0,Count);
+end;
+
function TStream.Write(const Buffer; Count: Longint): Longint;
begin
WriteNotImplemented;
@@ -178,35 +198,728 @@ end;
Result:=Seek(longint(Offset),ord(Origin));
end;
- procedure TStream.ReadBuffer(var Buffer; Count: Longint);
+ function TStream.ReadData(Buffer: Pointer; Count: NativeInt): NativeInt;
+ begin
+ Result:=Read(Buffer^,Count);
+ end;
- Var
- r,t : longint;
+ function TStream.ReadData(const Buffer: TBytes; Count: NativeInt): NativeInt;
+ begin
+ Result:=Read(Buffer,0,Count);
+ end;
+
+ function TStream.ReadData(var Buffer: Boolean): NativeInt;
+ begin
+ Result:=Read(Buffer,sizeOf(Buffer));
+ end;
+
+function TStream.ReadMaxSizeData(Var Buffer; aSize,aCount : NativeInt) : NativeInt;
+
+Var
+ CP : Int64;
+
+begin
+ if aCount<=aSize then
+ Result:=read(Buffer,aCount)
+ else
+ begin
+ Result:=Read(Buffer,aSize);
+ CP:=Position;
+ Result:=Result+Seek(aCount-aSize,soCurrent)-CP;
+ end
+end;
+
+function TStream.WriteMaxSizeData(Const Buffer; aSize,aCount : NativeInt) : NativeInt;
+Var
+ CP : Int64;
+
+begin
+ if aCount<=aSize then
+ Result:=Write(Buffer,aCount)
+ else
+ begin
+ Result:=Write(Buffer,aSize);
+ CP:=Position;
+ Result:=Result+Seek(aCount-aSize,soCurrent)-CP;
+ end
+end;
+
+procedure TStream.WriteExactSizeData(const Buffer; aSize, aCount: NativeInt);
+begin
+ // Embarcadero docs mentions no exception. Does not seem very logical
+ WriteMaxSizeData(Buffer,aSize,ACount);
+end;
+
+procedure TStream.ReadExactSizeData(var Buffer; aSize, aCount: NativeInt);
+begin
+ if ReadMaxSizeData(Buffer,aSize,ACount)<>aCount then
+ Raise EReadError.Create(SReadError);
+end;
+
+
+function TStream.ReadData(var Buffer: Boolean; Count: NativeInt): NativeInt;
+begin
+ Result:=ReadMaxSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+function TStream.ReadData(var Buffer: AnsiChar): NativeInt;
+begin
+ Result:=Read(Buffer,sizeOf(Buffer));
+end;
+
+function TStream.ReadData(var Buffer: AnsiChar; Count: NativeInt): NativeInt;
+begin
+ Result:=ReadMaxSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+function TStream.ReadData(var Buffer: WideChar): NativeInt;
+begin
+ Result:=Read(Buffer,sizeOf(Buffer));
+end;
+
+function TStream.ReadData(var Buffer: WideChar; Count: NativeInt): NativeInt;
+begin
+ Result:=ReadMaxSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+function TStream.ReadData(var Buffer: Int8): NativeInt;
+begin
+ Result:=Read(Buffer,sizeOf(Buffer));
+end;
+
+function TStream.ReadData(var Buffer: Int8; Count: NativeInt): NativeInt;
+begin
+ Result:=ReadMaxSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+function TStream.ReadData(var Buffer: UInt8): NativeInt;
+begin
+ Result:=Read(Buffer,sizeOf(Buffer));
+end;
+
+function TStream.ReadData(var Buffer: UInt8; Count: NativeInt): NativeInt;
+begin
+ Result:=ReadMaxSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+function TStream.ReadData(var Buffer: Int16): NativeInt;
+begin
+ Result:=Read(Buffer,sizeOf(Buffer));
+end;
+
+function TStream.ReadData(var Buffer: Int16; Count: NativeInt): NativeInt;
+begin
+ Result:=ReadMaxSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+function TStream.ReadData(var Buffer: UInt16): NativeInt;
+begin
+ Result:=Read(Buffer,sizeOf(Buffer));
+end;
+
+function TStream.ReadData(var Buffer: UInt16; Count: NativeInt): NativeInt;
+begin
+ Result:=ReadMaxSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+function TStream.ReadData(var Buffer: Int32): NativeInt;
+begin
+ Result:=Read(Buffer,sizeOf(Buffer));
+end;
+
+function TStream.ReadData(var Buffer: Int32; Count: NativeInt): NativeInt;
+begin
+ Result:=ReadMaxSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+function TStream.ReadData(var Buffer: UInt32): NativeInt;
+begin
+ Result:=Read(Buffer,sizeOf(Buffer));
+end;
+
+function TStream.ReadData(var Buffer: UInt32; Count: NativeInt): NativeInt;
+begin
+ Result:=ReadMaxSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+function TStream.ReadData(var Buffer: Int64): NativeInt;
+begin
+ Result:=Read(Buffer,sizeOf(Buffer));
+end;
+
+function TStream.ReadData(var Buffer: Int64; Count: NativeInt): NativeInt;
+begin
+ Result:=ReadMaxSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+function TStream.ReadData(var Buffer: UInt64): NativeInt;
+begin
+ Result:=Read(Buffer,sizeOf(Buffer));
+end;
+
+function TStream.ReadData(var Buffer: UInt64; Count: NativeInt): NativeInt;
+begin
+ Result:=ReadMaxSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+function TStream.ReadData(var Buffer: Single): NativeInt;
+begin
+ Result:=Read(Buffer,sizeOf(Buffer));
+end;
+
+function TStream.ReadData(var Buffer: Single; Count: NativeInt): NativeInt;
+begin
+ Result:=ReadMaxSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+function TStream.ReadData(var Buffer: Double): NativeInt;
+begin
+ Result:=Read(Buffer,sizeOf(Buffer));
+end;
+
+function TStream.ReadData(var Buffer: Double; Count: NativeInt): NativeInt;
+begin
+ Result:=ReadMaxSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+{$IFDEF FPC_HAS_TYPE_EXTENDED}
+function TStream.ReadData(var Buffer: Extended): NativeInt;
+begin
+ Result:=Read(Buffer,sizeOf(Buffer));
+end;
+
+function TStream.ReadData(var Buffer: Extended; Count: NativeInt): NativeInt;
+begin
+ Result:=ReadMaxSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+function TStream.ReadData(var Buffer: TExtended80Rec): NativeInt;
+begin
+ Result:=Read(Buffer,sizeOf(Buffer));
+end;
+
+function TStream.ReadData(var Buffer: TExtended80Rec; Count: NativeInt): NativeInt;
+begin
+ Result:=ReadMaxSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+{$ENDIF}
+
+procedure TStream.ReadBuffer(var Buffer; Count: Longint);
+
+Var
+ r,t : longint;
+
+begin
+ t:=0;
+ repeat
+ r:=Read(PByte(@Buffer)[t],Count-t);
+ inc(t,r);
+ until (t=Count) or (r<=0);
+ if (t<Count) then
+ Raise EReadError.Create(SReadError);
+end;
+
+procedure TStream.ReadBuffer(var Buffer: TBytes; Count: NativeInt);
+begin
+ ReadBuffer(Buffer,0,Count);
+end;
+
+procedure TStream.ReadBuffer(var Buffer: TBytes; Offset, Count: NativeInt);
+begin
+ ReadBuffer(Buffer[OffSet],Count);
+end;
+
+procedure TStream.ReadBufferData(var Buffer: Boolean);
+begin
+ ReadBuffer(Buffer,SizeOf(Buffer));
+end;
+
+procedure TStream.ReadBufferData(var Buffer: Boolean; Count: NativeInt);
+begin
+ ReadExactSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+procedure TStream.ReadBufferData(var Buffer: AnsiChar);
+begin
+ ReadBuffer(Buffer,SizeOf(Buffer));
+end;
+
+procedure TStream.ReadBufferData(var Buffer: AnsiChar; Count: NativeInt);
+begin
+ ReadExactSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+procedure TStream.ReadBufferData(var Buffer: WideChar);
+begin
+ ReadBuffer(Buffer,SizeOf(Buffer));
+end;
+
+procedure TStream.ReadBufferData(var Buffer: WideChar; Count: NativeInt);
+begin
+ ReadExactSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+procedure TStream.ReadBufferData(var Buffer: Int8);
+begin
+ ReadBuffer(Buffer,SizeOf(Buffer));
+end;
+
+procedure TStream.ReadBufferData(var Buffer: Int8; Count: NativeInt);
+begin
+ ReadExactSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+procedure TStream.ReadBufferData(var Buffer: UInt8);
+begin
+ ReadBuffer(Buffer,SizeOf(Buffer));
+end;
+
+procedure TStream.ReadBufferData(var Buffer: UInt8; Count: NativeInt);
+begin
+ ReadExactSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+procedure TStream.ReadBufferData(var Buffer: Int16);
+begin
+ ReadBuffer(Buffer,SizeOf(Buffer));
+end;
+
+procedure TStream.ReadBufferData(var Buffer: Int16; Count: NativeInt);
+begin
+ ReadExactSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+procedure TStream.ReadBufferData(var Buffer: UInt16);
+begin
+ ReadBuffer(Buffer,SizeOf(Buffer));
+end;
+
+procedure TStream.ReadBufferData(var Buffer: UInt16; Count: NativeInt);
+begin
+ ReadExactSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+procedure TStream.ReadBufferData(var Buffer: Int32);
+begin
+ ReadBuffer(Buffer,SizeOf(Buffer));
+end;
+
+procedure TStream.ReadBufferData(var Buffer: Int32; Count: NativeInt);
+begin
+ ReadExactSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+procedure TStream.ReadBufferData(var Buffer: UInt32);
+begin
+ ReadBuffer(Buffer,SizeOf(Buffer));
+end;
+
+procedure TStream.ReadBufferData(var Buffer: UInt32; Count: NativeInt);
+begin
+ ReadExactSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+procedure TStream.ReadBufferData(var Buffer: Int64);
+begin
+ ReadBuffer(Buffer,SizeOf(Buffer));
+end;
+
+procedure TStream.ReadBufferData(var Buffer: Int64; Count: NativeInt);
+begin
+ ReadExactSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+procedure TStream.ReadBufferData(var Buffer: UInt64);
+begin
+ ReadBuffer(Buffer,SizeOf(Buffer));
+end;
+
+procedure TStream.ReadBufferData(var Buffer: UInt64; Count: NativeInt);
+begin
+ ReadExactSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+procedure TStream.ReadBufferData(var Buffer: Single);
+begin
+ ReadBuffer(Buffer,SizeOf(Buffer));
+end;
+
+procedure TStream.ReadBufferData(var Buffer: Single; Count: NativeInt);
+begin
+ ReadExactSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+procedure TStream.ReadBufferData(var Buffer: Double);
+begin
+ ReadBuffer(Buffer,SizeOf(Buffer));
+end;
+
+procedure TStream.ReadBufferData(var Buffer: Double; Count: NativeInt);
+begin
+ ReadExactSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+{$IFDEF FPC_HAS_TYPE_EXTENDED}
+procedure TStream.ReadBufferData(var Buffer: Extended);
+begin
+ ReadBuffer(Buffer,SizeOf(Buffer));
+end;
+
+procedure TStream.ReadBufferData(var Buffer: Extended; Count: NativeInt);
+begin
+ ReadExactSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+procedure TStream.ReadBufferData(var Buffer: TExtended80Rec);
+begin
+ ReadBuffer(Buffer,SizeOf(Buffer));
+end;
+
+procedure TStream.ReadBufferData(var Buffer: TExtended80Rec; Count: NativeInt);
+begin
+ ReadExactSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+{$ENDIF}
+
+procedure TStream.WriteBuffer(const Buffer; Count: Longint);
+
+var
+ r,t : Longint;
begin
- t:=0;
- repeat
- r:=Read(PByte(@Buffer)[t],Count-t);
- inc(t,r);
- until (t=Count) or (r<=0);
+ T:=0;
+ Repeat
+ r:=Write(PByte(@Buffer)[t],Count-t);
+ inc(t,r);
+ Until (t=count) or (r<=0);
if (t<Count) then
- Raise EReadError.Create(SReadError);
+ Raise EWriteError.Create(SWriteError);
end;
- procedure TStream.WriteBuffer(const Buffer; Count: Longint);
+procedure TStream.WriteBuffer(const Buffer: TBytes; Count: NativeInt);
+begin
+ WriteBuffer(Buffer,0,Count);
+end;
- var
- r,t : Longint;
+procedure TStream.WriteBuffer(const Buffer: TBytes; Offset, Count: NativeInt);
+begin
+ WriteBuffer(Buffer[Offset],Count);
+end;
- begin
- T:=0;
- Repeat
- r:=Write(PByte(@Buffer)[t],Count-t);
- inc(t,r);
- Until (t=count) or (r<=0);
- if (t<Count) then
- Raise EWriteError.Create(SWriteError);
- end;
+function TStream.WriteData(const Buffer: TBytes; Count: NativeInt): NativeInt;
+begin
+ Result:=Write(Buffer, 0, Count);
+end;
+
+function TStream.WriteData(const Buffer: Pointer; Count: NativeInt): NativeInt;
+begin
+ Result:=Write(Buffer^, Count);
+end;
+
+function TStream.WriteData(const Buffer: Boolean): NativeInt;
+begin
+ Result:=Write(Buffer,SizeOf(Buffer));
+end;
+
+function TStream.WriteData(const Buffer: Boolean; Count: NativeInt): NativeInt;
+begin
+ Result:=WriteMaxSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+function TStream.WriteData(const Buffer: AnsiChar): NativeInt;
+begin
+ Result:=Write(Buffer,SizeOf(Buffer));
+end;
+
+function TStream.WriteData(const Buffer: AnsiChar; Count: NativeInt): NativeInt;
+begin
+ Result:=WriteMaxSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+function TStream.WriteData(const Buffer: WideChar): NativeInt;
+begin
+ Result:=Write(Buffer,SizeOf(Buffer));
+end;
+
+function TStream.WriteData(const Buffer: WideChar; Count: NativeInt): NativeInt;
+begin
+ Result:=WriteMaxSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+function TStream.WriteData(const Buffer: Int8): NativeInt;
+begin
+ Result:=Write(Buffer,SizeOf(Buffer));
+end;
+
+function TStream.WriteData(const Buffer: Int8; Count: NativeInt): NativeInt;
+begin
+ Result:=WriteMaxSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+function TStream.WriteData(const Buffer: UInt8): NativeInt;
+begin
+ Result:=Write(Buffer,SizeOf(Buffer));
+end;
+
+function TStream.WriteData(const Buffer: UInt8; Count: NativeInt): NativeInt;
+begin
+ Result:=WriteMaxSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+function TStream.WriteData(const Buffer: Int16): NativeInt;
+begin
+ Result:=Write(Buffer,SizeOf(Buffer));
+end;
+
+function TStream.WriteData(const Buffer: Int16; Count: NativeInt): NativeInt;
+begin
+ Result:=WriteMaxSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+function TStream.WriteData(const Buffer: UInt16): NativeInt;
+begin
+ Result:=Write(Buffer,SizeOf(Buffer));
+end;
+
+function TStream.WriteData(const Buffer: UInt16; Count: NativeInt): NativeInt;
+begin
+ Result:=WriteMaxSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+function TStream.WriteData(const Buffer: Int32): NativeInt;
+begin
+ Result:=Write(Buffer,SizeOf(Buffer));
+end;
+
+function TStream.WriteData(const Buffer: Int32; Count: NativeInt): NativeInt;
+begin
+ Result:=WriteMaxSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+function TStream.WriteData(const Buffer: UInt32): NativeInt;
+begin
+ Result:=Write(Buffer,SizeOf(Buffer));
+end;
+
+function TStream.WriteData(const Buffer: UInt32; Count: NativeInt): NativeInt;
+begin
+ Result:=WriteMaxSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+function TStream.WriteData(const Buffer: Int64): NativeInt;
+begin
+ Result:=Write(Buffer,SizeOf(Buffer));
+end;
+
+function TStream.WriteData(const Buffer: Int64; Count: NativeInt): NativeInt;
+begin
+ Result:=WriteMaxSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+function TStream.WriteData(const Buffer: UInt64): NativeInt;
+begin
+ Result:=Write(Buffer,SizeOf(Buffer));
+end;
+
+function TStream.WriteData(const Buffer: UInt64; Count: NativeInt): NativeInt;
+begin
+ Result:=WriteMaxSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+function TStream.WriteData(const Buffer: Single): NativeInt;
+begin
+ Result:=Write(Buffer,SizeOf(Buffer));
+end;
+
+function TStream.WriteData(const Buffer: Single; Count: NativeInt): NativeInt;
+begin
+ Result:=WriteMaxSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+function TStream.WriteData(const Buffer: Double): NativeInt;
+begin
+ Result:=Write(Buffer,SizeOf(Buffer));
+end;
+
+function TStream.WriteData(const Buffer: Double; Count: NativeInt): NativeInt;
+begin
+ Result:=WriteMaxSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+{$IFDEF FPC_HAS_TYPE_EXTENDED}
+function TStream.WriteData(const Buffer: Extended): NativeInt;
+begin
+ Result:=Write(Buffer,SizeOf(Buffer));
+end;
+
+function TStream.WriteData(const Buffer: Extended; Count: NativeInt): NativeInt;
+begin
+ Result:=WriteMaxSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+function TStream.WriteData(const Buffer: TExtended80Rec): NativeInt;
+begin
+ Result:=Write(Buffer,SizeOf(Buffer));
+end;
+
+function TStream.WriteData(const Buffer: TExtended80Rec; Count: NativeInt): NativeInt;
+begin
+ Result:=WriteMaxSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+{$ENDIF}
+
+procedure TStream.WriteBufferData(Buffer: Integer);
+begin
+ WriteBuffer(Buffer,SizeOf(Buffer));
+end;
+
+procedure TStream.WriteBufferData(Buffer: Integer; Count: NativeInt);
+begin
+ WriteMaxSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+procedure TStream.WriteBufferData(Buffer: Boolean);
+begin
+ WriteBuffer(Buffer,SizeOf(Buffer));
+end;
+
+procedure TStream.WriteBufferData(Buffer: Boolean; Count: NativeInt);
+begin
+ WriteExactSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+procedure TStream.WriteBufferData(Buffer: AnsiChar);
+begin
+ WriteBuffer(Buffer,SizeOf(Buffer));
+end;
+
+procedure TStream.WriteBufferData(Buffer: AnsiChar; Count: NativeInt);
+begin
+ WriteExactSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+procedure TStream.WriteBufferData(Buffer: WideChar);
+begin
+ WriteBuffer(Buffer,SizeOf(Buffer));
+end;
+
+procedure TStream.WriteBufferData(Buffer: WideChar; Count: NativeInt);
+begin
+ WriteExactSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+procedure TStream.WriteBufferData(Buffer: Int8);
+begin
+ WriteBuffer(Buffer,SizeOf(Buffer));
+end;
+
+procedure TStream.WriteBufferData(Buffer: Int8; Count: NativeInt);
+begin
+ WriteExactSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+procedure TStream.WriteBufferData(Buffer: UInt8);
+begin
+ WriteBuffer(Buffer,SizeOf(Buffer));
+end;
+
+procedure TStream.WriteBufferData(Buffer: UInt8; Count: NativeInt);
+begin
+ WriteExactSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+procedure TStream.WriteBufferData(Buffer: Int16);
+begin
+ WriteBuffer(Buffer,SizeOf(Buffer));
+end;
+
+procedure TStream.WriteBufferData(Buffer: Int16; Count: NativeInt);
+begin
+ WriteExactSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+procedure TStream.WriteBufferData(Buffer: UInt16);
+begin
+ WriteBuffer(Buffer,SizeOf(Buffer));
+end;
+
+procedure TStream.WriteBufferData(Buffer: UInt16; Count: NativeInt);
+begin
+ WriteExactSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+procedure TStream.WriteBufferData(Buffer: UInt32);
+begin
+ WriteBuffer(Buffer,SizeOf(Buffer));
+end;
+
+procedure TStream.WriteBufferData(Buffer: UInt32; Count: NativeInt);
+begin
+ WriteExactSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+procedure TStream.WriteBufferData(Buffer: Int64);
+begin
+ WriteBuffer(Buffer,SizeOf(Buffer));
+end;
+
+procedure TStream.WriteBufferData(Buffer: Int64; Count: NativeInt);
+begin
+ WriteExactSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+procedure TStream.WriteBufferData(Buffer: UInt64);
+begin
+ WriteBuffer(Buffer,SizeOf(Buffer));
+end;
+
+procedure TStream.WriteBufferData(Buffer: UInt64; Count: NativeInt);
+begin
+ WriteExactSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+procedure TStream.WriteBufferData(Buffer: Single);
+begin
+ WriteBuffer(Buffer,SizeOf(Buffer));
+end;
+
+procedure TStream.WriteBufferData(Buffer: Single; Count: NativeInt);
+begin
+ WriteExactSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+procedure TStream.WriteBufferData(Buffer: Double);
+begin
+ WriteBuffer(Buffer,SizeOf(Buffer));
+end;
+
+procedure TStream.WriteBufferData(Buffer: Double; Count: NativeInt);
+begin
+ WriteExactSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+
+{$IFDEF FPC_HAS_TYPE_EXTENDED}
+procedure TStream.WriteBufferData(Buffer: Extended);
+begin
+ WriteBuffer(Buffer,SizeOf(Buffer));
+end;
+
+procedure TStream.WriteBufferData(Buffer: Extended; Count: NativeInt);
+begin
+ WriteExactSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+procedure TStream.WriteBufferData(Buffer: TExtended80Rec);
+begin
+ WriteBuffer(Buffer,SizeOf(Buffer));
+end;
+
+procedure TStream.WriteBufferData(Buffer: TExtended80Rec; Count: NativeInt);
+begin
+ WriteExactSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+{$ENDIF}
function TStream.CopyFrom(Source: TStream; Count: Int64): Int64;
@@ -447,6 +1160,7 @@ end;
TheSize : Longint;
P : PByte ;
begin
+ Result:='';
ReadBuffer (TheSize,SizeOf(TheSize));
SetLength(Result,TheSize);
// Illegal typecast if no AnsiStrings defined.
@@ -621,6 +1335,8 @@ begin
soFromEnd : FPosition:=FSize+Offset;
soFromCurrent : FPosition:=FPosition+Offset;
end;
+ if SizeBoundsSeek and (FPosition>FSize) then
+ FPosition:=FSize;
Result:=FPosition;
{$IFDEF DEBUG}
if Result < 0 then
@@ -1155,7 +1871,7 @@ begin
sz := sizeof(Buffer)
else
sz := cb;
- sz := FStream.Read(buffer, sz);
+ sz := FStream.Read(buffer[0],sz);
inc(cbRead, sz);
stm.Write(@buffer[0], sz, @sz);
inc(cbWritten, sz);
diff --git a/rtl/openbsd/t_openbsd.h2paschk b/rtl/openbsd/t_openbsd.h2paschk
index 21de631feb..6d98b40c80 100644
--- a/rtl/openbsd/t_openbsd.h2paschk
+++ b/rtl/openbsd/t_openbsd.h2paschk
@@ -13,12 +13,14 @@
@Pascal begin
# Adds support for M_PIl constant inside math.h header
+@C #include <sys/mman.h>
@C #include <sys/types.h>
@C #include <sys/stat.h>
@C #include <sys/time.h>
@C #include <sys/times.h>
@C #include <sys/resource.h>
@C #include <sys/uio.h>
+@C #include <sys/wait.h>
@C #include <dirent.h>
@C #include <poll.h>
@C #include <utime.h>
@@ -74,6 +76,13 @@
.state
.mutex
+@constant F_OK
+@constant R_OK
+@constant W_OK
+@constant X_OK
+@constant SEEK_SET
+@constant SEEK_CUR
+@constant SEEK_END
@constant O_RDONLY
@constant O_WRONLY
@constant O_RDWR
@@ -83,6 +92,60 @@
@constant O_NOCTTY
@constant O_APPEND
@constant O_NONBLOCK
+@constant S_IRUSR
+@constant S_IWUSR
+@constant S_IXUSR
+@constant S_IRGRP
+@constant S_IWGRP
+@constant S_IXGRP
+@constant S_IROTH
+@constant S_IWOTH
+@constant S_IXOTH
+@constant S_IRWXU
+@constant S_IRWXG
+@constant S_IRWXO
+@constant WNOHANG
+@constant WUNTRACED
+@constant F_DUPFD
+@constant F_GETFD
+@constant F_SETFD
+@constant F_GETFL
+@constant F_SETFL
+@constant F_GETOWN
+@constant F_SETOWN
+@constant F_GETLK
+@constant F_SETLK
+@constant F_SETLKW
+@constant F_DUPFD_CLOEXEC
+@constant FD_CLOEXEC
+@constant F_RDLCK
+@constant F_UNLCK
+@constant F_WRLCK
+@constant RLIMIT_CPU
+@constant RLIMIT_FSIZE
+@constant RLIMIT_DATA
+@constant RLIMIT_STACK
+@constant RLIMIT_CORE
+@constant RLIMIT_RSS
+@constant RLIMIT_MEMLOCK
+@constant RLIMIT_NPROC
+@constant RLIMIT_NOFILE
+# @constant RLIMIT_AS alias of RLIMIT_RSS, but not in C headers
+@constant MAP_PRIVATE
+@constant MAP_ANONYMOUS
+@constant POLLIN
+@constant POLLPRI
+@constant POLLOUT
+@constant POLLERR
+@constant POLLHUP
+@constant POLLNVAL
+@constant POLLRDNORM
+@constant POLLRDBAND
+@constant POLLWRNORM
+@constant POLLWRBAND
+
+
+
@floatconstant PI,M_PI
diff --git a/rtl/openbsd/termiosproc.inc b/rtl/openbsd/termiosproc.inc
index 6892e3f7ad..7148d94edf 100644
--- a/rtl/openbsd/termiosproc.inc
+++ b/rtl/openbsd/termiosproc.inc
@@ -26,7 +26,7 @@ end;
Function TCSetAttr(fd:cint;OptAct:cint;const tios:TermIOS):cint;
var
- nr:cint;
+ nr:TIOCtlRequest;
begin
case OptAct of
TCSANOW : nr:=TIOCSETA;
diff --git a/rtl/unix/scripts/check_rtl_types.sh b/rtl/unix/scripts/check_rtl_types.sh
new file mode 100755
index 0000000000..28311b578f
--- /dev/null
+++ b/rtl/unix/scripts/check_rtl_types.sh
@@ -0,0 +1,213 @@
+#!/usr/bin/env bash
+filename="$1"
+shift
+FPC_OPTS="$*"
+
+if [ ! -f "$filename" ] ; then
+ echo "Usage: $0 file.h2paschk"
+ exit
+fi
+
+filebase=${filename/.*/}
+
+filebaseonly=`basename $filebase`
+
+filedir=`dirname $filename`
+if [ -z "$filedir" ] ; then
+ filedir=.
+fi
+
+if [ -z "$MAKE" ] ; then
+ MAKE=`which gmake`
+fi
+
+if [ -z "$MAKE" ] ; then
+ MAKE=`which make`
+fi
+
+if [ -z "$FPC" ] ; then
+ FPC=fpc
+ default_fpc=1
+else
+ default_fpc=0
+fi
+
+if [ -z "$CC" ] ; then
+ CC=`which gcc`
+fi
+
+if [ -z "$CC" ] ; then
+ CC=`which cc`
+fi
+
+if [ -f "{$filebase}.c" ] ; then
+ rm -f ${filebase}.c
+fi
+if [ -f "{$filebase}.pas" ] ; then
+ rm -f ${filebase}.pas
+fi
+
+function check_one ()
+{
+VERSION=$1
+
+echo "Calling h2paschk $filename"
+h2paschk $filename
+res=$?
+if [ $res -ne 0 ] ; then
+ exit
+fi
+
+echo "Calling $CC $CC_OPT -o ${filebase}_c ${filebase}.c"
+$CC $CC_OPT -o ${filebase}_c${VERSION} ${filebase}.c > ${filebase}${VERSION}_c.comp.log 2>&1
+res=$?
+if [ $res -ne 0 ] ; then
+ echo "$CC call failed in $VERSION, res=$res"
+ cat ${filebase}${VERSION}_c.comp.log
+ exit
+fi
+
+./${filebase}_c${VERSION} > ${filebase}_c${VERSION}.out
+res=$?
+if [ $res -ne 0 ] ; then
+ echo "./${filebase}_c${VERSION} failed in $VERSION, res=$res"
+ exit
+fi
+
+echo "Calling $MAKE all OPT=\"-n -gwl $FPC_OPTS\" FPC=$FPC"
+$MAKE all OPT="-n -gwl $FPC_OPTS" FPC=$FPC > ${filebase}${VERSION}_make_all.log 2>&1
+res=$?
+if [ $res -ne 0 ] ; then
+ echo "$MAKE call failed in $VERSION, res=$res"
+ cat ${filebase}${VERSION}_make_all.log
+ exit
+fi
+
+OS_TARGET=`$FPC $FPC_OPTS -iTO`
+CPU_TARGET=`$FPC $FPC_OPTS -iTP`
+echo "Calling $MAKE -C ${filedir} ${filebaseonly} FPC=$FPC OPT=\"-n -gwl $FPC_OPTS\" -Fu../units/$CPU_TARGET-$OS_TARGET"
+$MAKE -C ${filedir} ${filebaseonly} FPC=$FPC OPT="-n -gwl $FPC_OPTS -Fu../units/$CPU_TARGET-$OS_TARGET" > ${filebase}${VERSION}_pas.comp.log 2>&1
+res=$?
+if [ $res -ne 0 ] ; then
+ echo "$FPC call failed in $VERSION, res=$res"
+ cat ${filebase}${VERSION}_pas.comp.log
+ exit
+fi
+mv -f ${filebase} ${filebase}${VERSION}
+
+./${filebase}${VERSION} > ${filebase}_pas${VERSION}.out
+res=$?
+if [ $res -ne 0 ] ; then
+ echo "./${filebase}${VERSION} call failed in $VERSION, res=$res"
+ exit
+fi
+
+diff ${filebase}_c${VERSION}.out ${filebase}_pas${VERSION}.out > ${filebase}${VERSION}.diffs
+res=$?
+if [ $res -eq 0 ] ; then
+ echo "No difference found!"
+else
+ echo "Diffs for ${VERSION} are:"
+ echo "< C results"
+ echo "> Pascal results"
+ cat ${filebase}${VERSION}.diffs
+fi
+# Clean up
+rm -f ${filebase}_c${VERSION}
+rm -f ${filebase}${VERSION}
+rm -f ${filebase}_c${VERSION}.out
+rm -f ${filebase}_pas${VERSION}.out
+rm -f ${filebase}${VERSION}_c.comp.log
+rm -f ${filebase}${VERSION}_pas.comp.log
+rm -f ${filebase}${VERSION}_make_all.log
+rm -f ${filebase}.c
+rm -f ${filebase}.pas
+
+}
+
+function check_64 ()
+{
+ if [ "$FPC64" == "ppca64" ] ; then
+ CC_OPT="-Wall"
+ else
+ CC_OPT="-m64 -Wall"
+ fi
+ if [ $default_fpc -eq 1 ] ; then
+ FPC=$FPC64
+ if [ "$CPU_SOURCE" != "$CPU_TARGET" ] ; then
+ FPC_OPTS="$FPC_OPTS -XP${CPU_TARGET}-${OS_SOURCE}-"
+ fi
+ fi
+ check_one 64bit
+}
+
+function check_32 ()
+{
+ if [ "$CPU_SOURCE" == "aarch64" ] ; then
+ CC=arm-linux-gnueabihf-gcc-4.8
+ export BINUTILSPREFIX=arm-linux-
+ fi
+ if [ "$FPC32" == "ppcarm" ] ; then
+ CC_OPT="-march=armv7-a -Wall"
+ else
+ CC_OPT="-m32 -Wall"
+ fi
+
+ FPC=$FPC32
+ if [ "$CPU_SOURCE" != "$CPU_TARGET" ] ; then
+ FPC_OPTS="$FPC_OPTS -XP${CPU_TARGET}-${OS_SOURCE}-"
+ fi
+ check_one 32bit
+}
+
+function check_gen32 ()
+{
+ CC_OPT="-m32 -Wall"
+
+ check_one gen32bit
+}
+
+OS_SOURCE=`$FPC $FPC_OPTS -iSO`
+CPU_SOURCE=`$FPC $FPC_OPTS -iSP`
+CPU_TARGET=`$FPC $FPC_OPTS -iTP`
+case $CPU_SOURCE in
+ arm|aarch64) FPC32=ppcarm; FPC64=ppca64;;
+ i386|x86_64) FPC32=ppc386; FPC64=ppcx64;;
+ powerpc|powerpc64) FPC32=ppcppc; FPC64=ppcppc64;;
+ sparc|sparc64) FPC32=ppcsparc; FPC64=ppcsparc64;;
+ m68k) FPC32=ppc68k; FPC64=;;
+ mips) FPC32=ppcmips; FPC64=;;
+ mipsel) FPC32=ppcmipsel; FPC64=;;
+ riscv32|riscv64) FPC32=ppcrv32; FPC64=ppcrv64;;
+esac
+
+# No i386<->x86_64 cross-compilation on OpeenBSD
+if [ "$OS_SOURCE" == "openbsd" ] ; then
+ if [ "$CPU_SOURCE" == "i386" ] ; then
+ FPC64=
+ else
+ FPC32=
+ fi
+fi
+
+
+if [ $default_fpc -eq 1 ] ; then
+ if [ -n "$FPC64" ] ; then
+ check_64
+ fi
+
+ if [ -n "$FPC32" ] ; then
+ check_32
+ fi
+else
+ if [ "${FPC}" == "$FPC64" ] ; then
+ check_64
+ fi
+
+ if [ "${FPC}" == "$FPC32" ] ; then
+ check_32
+ fi
+fi
+
+
+
diff --git a/rtl/unix/scripts/check_sys.sh b/rtl/unix/scripts/check_sys.sh
index 1a748b2812..a6be01e82b 100755
--- a/rtl/unix/scripts/check_sys.sh
+++ b/rtl/unix/scripts/check_sys.sh
@@ -7,18 +7,20 @@
syscall_header=/usr/include/syscall.h
fpc_sysnr=./sysnr.inc
-i=0
-for arg in $* ; do
- let i++
+i=1
+while [ $i -le "$#" ] ; do
+ arg="${!i}"
echo "Handling arg $i, \"$arg\""
if [ "${arg//=}" != "$arg" ] ; then
- echo "Evaluating $arg"
- eval $arg
+ echo "Evaluating \"$arg\""
+ arg2="${arg/=*/}=\"${arg/*=/}\""
+ eval "$arg2"
elif [ "$arg" == "-v" ] ; then
verbose=1
else
echo "arg not handled!"
fi
+ let i++
done
start_pwd=`pwd`
@@ -30,6 +32,7 @@ if [ -d "rtl" ] ; then
fi
os=`uname -s | tr [:upper:] [:lower:] `
+os_cpu=`uname -m | tr [:upper:] [:lower:] `
now_pwd=`pwd`
now_dir=`basename $now_pwd`
if [ -d "$os" ] ; then
@@ -70,7 +73,7 @@ fi
if [ -f "$fpc_sysnr" ] ; then
echo "Checking $fpc_sysnr content for Free Pascal syscall numbers"
fpc_sysnr_dir=`dirname $fpc_sysnr `
- sysnr_includes=`grep -o '{\$i *[a-z_A-Z0-9/.]*' $fpc_sysnr | sed 's:.*{\$i *:'$fpc_sysnr_dir/: `
+ sysnr_includes=`grep -o '{\$i *[a-z_A-Z0-9/.-]*' $fpc_sysnr | sed 's:.*{\$i *:'$fpc_sysnr_dir/: `
if [ -n "$sysnr_includes" ] ; then
echo "Found $sysnr_includes include files"
fpc_sysnr="$fpc_sysnr $sysnr_includes"
@@ -103,6 +106,7 @@ if [ -z "$CC" ] ; then
fi
cpu=`$FPC -iTP`
+cpu_source=`$FPC -iSP`
is_16=0
is_32=0
is_64=0
@@ -129,10 +133,25 @@ case $cpu in
esac
if [ $is_64 -eq 1 ] ; then
- CC_OPT="$CC_OPT -m64"
+ if [ "$os_cpu" == "aarch64" ] ; then
+ CC_OPT="$CC_OPT -Wall"
+ else
+ CC_OPT="$CC_OPT -m64 -Wall"
+ fi
CPUBITS=64
elif [ $is_32 -eq 1 ] ;then
- CC_OPT="$CC_OPT -m32"
+ if [ "$os_cpu" == "aarch64" ] ; then
+ CC=arm-linux-gnueabihf-gcc-4.8
+ export BINUTILSPREFIX=arm-linux-
+ fi
+ if [ "${FPC/ppcarm/}" != "$FPC" ] ; then
+ CC_OPT="$CC_OPT -march=armv7-a -Wall"
+ elif [ "${os_cpu/arm/}" != "$os_cpu" ] ; then
+ CC_OPT="$CC_OPT -march=armv5 -Wall"
+ else
+ CC_OPT="$CC_OPT -m32 -Wall"
+ fi
+
CPUBITS=32
elif [ $is_16 -eq 1 ] ; then
CPUBITS=16
@@ -197,18 +216,20 @@ macro="";
incfile="";
cpu= "cpu" proc;
cpubits= "cpu" cpubits;
+list_defines=macros " " cpu " " cpubits " ";
+print "// FPC defined macros used " list_defines;
}
/\{\\\$i / { incfile=\$2;
print "Include file " incfile " found"; }
-/\{\\\$ifdef / { macro=gensub("[^A-Za-z_0-9].*","","",\$2);
- if ( (macro == cpu) || (macro == cpubits)) { enable=1;
+/\{\\\$ifdef / { macro=gensub("[^A-Za-z_0-9].*","",1,\$2) " ";
+ if (list_defines ~ macro) { enable=1;
print "// ifdef " macro " found and accepted at line " FNR;
} else {enable=0;
print "// ifdef " macro " found and rejected at line " FNR;
};
}
-/\{\\\$ifndef / { macro=gensub("[^A-Za-z_0-9].*","","",\$2);
- if ( (macro == cpu) || (macro == cpubits) ) { enable=0;
+/\{\\\$ifndef / { macro=gensub("[^A-Za-z_0-9].*","",1,\$2);
+ if (list_defines ~ macro) { enable=0;
print "// ifndef " macro " found and rejected at line " FNR;
} else {enable=1;
print "// ifndef " macro " found and accepted at line " FNR;
@@ -219,14 +240,14 @@ cpubits= "cpu" cpubits;
wholeline=\$0;
code=gensub("{.*}","","g",\$0);
code=gensub("[(][*].*[*][)]","","g",code);
- comments=gensub(code,"","",\$0);
+ comments=gensub(code,"",1,\$0);
comments1=gensub(".*({.*}).*","\1","g",comments);
if (comments == comments1)
comments1="";
comments2=gensub(".*[(][*].*[*][)]).*","\1","g",comments);
if (comments == comments2)
comments2="";
- comments3=gensub(".*//","","",comments);
+ comments3=gensub(".*//","",1,comments);
if (comments == comments3)
comments3="";
all_comments= comments1 comments2 comments3;
@@ -250,13 +271,13 @@ fi
if [ -n "$AWK" ] ; then
echo "Preprocessing ${fpc_sysnr} to $tmp_fpc_sysnr"
echo "$AWK -v proc=$cpu -v cpubits=$CPUBITS -f $awkfile ${fpc_sysnr} > $tmp_fpc_sysnr"
- $AWK -v proc=$cpu -v cpubits=$CPUBITS -f $awkfile ${fpc_sysnr} > $tmp_fpc_sysnr
+ $AWK -v proc=$cpu -v cpubits=$CPUBITS -v macros="$FPC_MACROS" -f $awkfile ${fpc_sysnr} > $tmp_fpc_sysnr
fpc_sysnr=$tmp_fpc_sysnr
fi
-sed -n "s:^\(.*\)*[ \t]*${fpc_syscall_prefix}\\([_a-zA-Z0-9]*\\)[ \t]*=[ \t]*\\([0-9]*\\)\\(.*\\)$:check_c_syscall_number_from_fpc_rtl \2 \3 \"\1 \4\":p" $fpc_sysnr > check_sys_list.sh
+sed -n "s:^\(.*\)*[ \t]*${fpc_syscall_prefix}\\([_a-zA-Z0-9]*\\)[ \t]*=[ \t]*\\(.*\\);\\(.*\\)$:check_c_syscall_number_from_fpc_rtl \2 \"\3\" \"\1 \4\":p" $fpc_sysnr > check_sys_list.sh
-sed -n "s:^.*#[[:space:]]*define[[:space:]]*${syscall_prefix}\\([_a-zA-Z0-9]*\\)[[:space:]]*\\([0-9]*\\)\\(.*\\)$:check_c_syscall_number_in_fpc_rtl \1 \2 \"\3\":p" ${syscall_header} > check_sys_list_reverse.sh
+sed -n "s:^.*#[[:space:]]*define[[:space:]]*${syscall_prefix}\\([_a-zA-Z0-9]*\\)[[:space:]]*\\([0-9]*\\)\\(.*\\)$:check_c_syscall_number_in_fpc_rtl \1 \"\2\" \"\3\":p" ${syscall_header} > check_sys_list_reverse.sh
forward_count=0
forward_ok_count=0
@@ -266,7 +287,13 @@ function check_c_syscall_number_from_fpc_rtl ()
{
bare_sys=$1
sys=${syscall_prefix}$bare_sys
- value=$2
+ arg_2=\"$2\"
+ if [ "${2:0:1}" == "$" ] ; then
+ echo "Arg \"$arg_2\" needs Pascal To C hexadecimal conversion"
+ let "value=0x${arg_2:2}"
+ else
+ let "value=$2"
+ fi
comment="$3"
if [[ ! ( ( -n "$value" ) && ( $value -ge 0 ) ) ]] ; then
echo "Computing $2 value"
@@ -299,6 +326,7 @@ function check_c_syscall_number_from_fpc_rtl ()
let forward_failure_count++
return
else
+ val=$CC_value
rm -f ./test_c_${bare_sys}
fi
rm -f ./test-${bare_sys}.comp-log
@@ -352,7 +380,12 @@ function check_c_syscall_number_in_fpc_rtl ()
sys=${fpc_syscall_prefix}${bare_sys}
c_sys=${syscall_prefix}${bare_sys}
value=$2
- comment="$3"
+ if [ -z "$value" ] ; then
+ let "value=$3"
+ comment="expression $3"
+ else
+ comment="$3"
+ fi
echo -en "Testing $sys value $value \r"
$CC $CC_OPT -DSYS_MACRO=${c_sys} -o ./test_c_${bare_sys} $c_syscall_source > ./test_${bare_sys}.comp-log 2>&1
C_COMP_RES=$?
diff --git a/rtl/win/syswin.inc b/rtl/win/syswin.inc
index 10a56a87a8..7736adadb4 100644
--- a/rtl/win/syswin.inc
+++ b/rtl/win/syswin.inc
@@ -591,10 +591,13 @@ procedure Win32Ansi2UnicodeMove(source:pchar;cp : TSystemCodePage;var dest:Unico
begin
// retrieve length including trailing #0
// not anymore, because this must also be usable for single characters
- if cp=CP_UTF8 then
- dwFlags:=0
- else
- dwFlags:=MB_PRECOMPOSED;
+ case cp of
+ // Under https://docs.microsoft.com/en-us/windows/desktop/api/stringapiset/nf-stringapiset-multibytetowidechar
+ CP_UTF8, CP_UTF7, 50220, 50221, 50222, 50225, 50227, 50229, 57002..57011, 42:
+ dwFlags:=0
+ else
+ dwFlags:=MB_PRECOMPOSED;
+ end;
destlen:=MultiByteToWideChar(cp, dwFlags, source, len, nil, 0);
// this will null-terminate
setlength(dest, destlen);
diff --git a/rtl/win/wininc/ascdef.inc b/rtl/win/wininc/ascdef.inc
index 76dc8c6cfd..778582d299 100644
--- a/rtl/win/wininc/ascdef.inc
+++ b/rtl/win/wininc/ascdef.inc
@@ -481,6 +481,7 @@ function FindFirstFileTransacted(lpfilename : LPCStr;fInfoLevelId:FINDEX_INFO_LE
external 'kernel32' name 'FindFirstFileTransactedA';
function GetComputerNameEx(NameType:COMPUTER_NAME_FORMAT;lpbuffer:LPSTR;nSize:LPDWORD):BOOL;stdcall;external 'kernel32' name 'GetComputerNameExA';
function QueryFullProcessImageName(hProcess:THandle;dwFlags:DWord; lpexename :lpstr;lpdwsize:pdword):BOOL; stdcall; external 'kernel32.dll' name 'QueryFullProcessImageNameA';
+function RealGetWindowClass(Wnd : HWND;ClassnameBuffer : pansichar;ClassnameBufferSize : DWORD): DWORD; stdcall; external 'user32.dll' name 'RealGetWindowClassA';
{$endif read_interface}
diff --git a/rtl/win/wininc/ascfun.inc b/rtl/win/wininc/ascfun.inc
index b47a4c9174..b34c3211ff 100644
--- a/rtl/win/wininc/ascfun.inc
+++ b/rtl/win/wininc/ascfun.inc
@@ -494,6 +494,7 @@ function GetConsoleAliasesA(AliasBuffer:LPSTR; AliasBufferLength:DWORD; ExeName:
function GetConsoleAliasExesA(ExeNameBuffer:LPSTR; ExeNameBufferLength:DWORD):DWORD;stdcall;external 'kernel32' name 'GetConsoleAliasExesA';
function GetComputerNameExA(NameType:COMPUTER_NAME_FORMAT;lpbuffer:LPSTR;nSize:LPDWORD):BOOL;stdcall;external 'kernel32' name 'GetComputerNameExA';
function QueryFullProcessImageNameA(hProcess:THandle;dwFlags:DWord; lpexename :lpstr;lpdwsize:pdword):BOOL; stdcall; external 'kernel32.dll' name 'QueryFullProcessImageNameA';
+function RealGetWindowClassA(Wnd : HWND;ClassnameBuffer : pansichar;ClassnameBufferSize : DWORD): DWORD; stdcall; external 'user32.dll' name 'RealGetWindowClassA';
{$endif read_interface}
diff --git a/rtl/win/wininc/defines.inc b/rtl/win/wininc/defines.inc
index d7dc5f9d46..54f8a6dc8d 100644
--- a/rtl/win/wininc/defines.inc
+++ b/rtl/win/wininc/defines.inc
@@ -1162,18 +1162,23 @@
KEY_WOW64_64KEY = $0100;
KEY_WOW64_32KEY = $0200;
KEY_WRITE = $20006;
- PROCESS_ALL_ACCESS = $1f0fff;
- PROCESS_CREATE_PROCESS = 128;
- PROCESS_CREATE_THREAD = 2;
- PROCESS_DUP_HANDLE = 64;
- PROCESS_QUERY_INFORMATION = 1024;
+ PROCESS_ALL_ACCESS = $1fFfff;
+ PROCESS_TERMINATE = $0001;
+ PROCESS_CREATE_THREAD = $0002;
+ PROCESS_SET_SESSIONID = $0004;
+ PROCESS_VM_OPERATION = $0008;
+ PROCESS_VM_READ = $0010;
+ PROCESS_VM_WRITE = $0020;
+ PROCESS_DUP_HANDLE = $0040;
+ PROCESS_CREATE_PROCESS = $0080;
+ PROCESS_SET_QUOTA = $0100;
+ PROCESS_SET_INFORMATION = $0200;
+ PROCESS_QUERY_INFORMATION = $0400;
+ PROCESS_SUSPEND_RESUME = $0800;
PROCESS_QUERY_LIMITED_INFORMATION = $1000;
- PROCESS_SET_INFORMATION = 512;
- PROCESS_TERMINATE = 1;
- PROCESS_VM_OPERATION = 8;
- PROCESS_VM_READ = 16;
- PROCESS_VM_WRITE = 32;
- THREAD_ALL_ACCESS = $1f03ff;
+ PROCESS_SET_LIMITED_INFORMATION = $2000;
+
+ THREAD_ALL_ACCESS = $1FFFFF; // vista+, for old systems 0x3FF
THREAD_DIRECT_IMPERSONATION = 512;
THREAD_GET_CONTEXT = 8;
THREAD_IMPERSONATE = 256;
@@ -1183,6 +1188,10 @@
THREAD_SET_THREAD_TOKEN = 128;
THREAD_SUSPEND_RESUME = 2;
THREAD_TERMINATE = 1;
+ THREAD_SET_LIMITED_INFORMATION = $0400;
+ THREAD_QUERY_LIMITED_INFORMATION = $0800;
+ THREAD_RESUME = $1000;
+
{ EditWordBreakProc }
WB_ISDELIMITER = 2;
WB_LEFT = 0;
@@ -2686,7 +2695,6 @@ Type
CAL_SMONTHNAME13 = 33;
CAL_SSHORTDATE = 5;
{ SetProcessWorkingSetSize }
- PROCESS_SET_QUOTA = 256;
{ SetPrinter }
{ SetService }
{ SetStretchBltMode }
@@ -6381,6 +6389,11 @@ const
CONSOLE_WINDOWED_MODE = 2;
PROCESS_NAME_NATIVE = 1;
+ GR_GDIOBJECTS = 0; { Count of GDI objects }
+ GR_USEROBJECTS = 1; { Count of USER objects }
+ GR_GDIOBJECTS_PEAK = 2; { Peak count of GDI objects }
+ GR_USEROBJECTS_PEAK = 4; { Peak count of USER objects }
+
{$endif read_interface}
{$ifdef read_implementation}
diff --git a/rtl/win/wininc/func.inc b/rtl/win/wininc/func.inc
index c3d58a8d97..e86e0db8b9 100644
--- a/rtl/win/wininc/func.inc
+++ b/rtl/win/wininc/func.inc
@@ -1326,6 +1326,10 @@ function CONSOLE_REAL_OUTPUT_HANDLE : HANDLE;
function Wow64RevertWow64FsRedirection(RedirectionState : pointer) : BOOL; stdcall; external 'kernel32.dll' name 'Wow64RevertWow64FsRedirection';
function IsWow64Process(hProcess:THandle; Wow64Process:PBOOL):BOOL;stdcall; external 'kernel32.dll' name 'IsWow64Process';
function GetPhysicallyInstalledSystemMemory(TotalMemoryInKilobytes: PULONGLONG ):BOOL; stdcall; external 'kernel32.dll' name 'GetPhysicallyInstalledSystemMemory';
+ function OpenThread(DesiredAccess : DWORD; InheritHandle : BOOL; ThreadId : DWORD) : THANDLE; stdcall; external 'kernel32.dll' name 'OpenThread';
+ function GetShellWindow:HWND; stdcall; external 'user32.dll' name 'GetShellWindow';
+ function RealChildWindowFromPoint(Parent : HWND; Pt : TPOINT): HWND; stdcall; external 'user32.dll' name 'RealChildWindowFromPoint';
+ function GetGuiResources(ProcessHandle : THANDLE; ResourceType : DWORD): DWORD; stdcall; external 'user32.dll' name 'GetGuiResources';
{$endif read_interface}
diff --git a/rtl/win/wininc/unidef.inc b/rtl/win/wininc/unidef.inc
index b8a260efdb..da566c503c 100644
--- a/rtl/win/wininc/unidef.inc
+++ b/rtl/win/wininc/unidef.inc
@@ -474,6 +474,7 @@ function FindFirstFileEx(lpfilename : LPCWStr;fInfoLevelId:FINDEX_INFO_LEVELS ;l
function FindFirstFileTransacted(lpfilename : LPCWStr;fInfoLevelId:FINDEX_INFO_LEVELS ;lpFindFileData:pointer;fSearchOp : FINDEX_SEARCH_OPS;lpSearchFilter:pointer;dwAdditionalFlags:dword;htransaction : HANDLE):Handle; stdcall; external 'kernel32' name 'FindFirstFileTransactedW';
function GetComputerNameEx(NameType:COMPUTER_NAME_FORMAT;lpbuffer:LPWSTR;nSize:LPDWORD):BOOL;stdcall;external 'kernel32' name 'GetComputerNameExW';
function QueryFullProcessImageName(hProcess:THandle;dwFlags:DWord; lpexename :lpwstr;lpdwsize:pdword):BOOL; stdcall; external 'kernel32.dll' name 'QueryFullProcessImageNameW';
+function RealGetWindowClass(Wnd : HWND;ClassnameBuffer : pwidechar;ClassnameBufferSize : DWORD): DWORD; stdcall; external 'user32.dll' name 'RealGetWindowClassW';
{$endif read_interface}
diff --git a/rtl/win/wininc/unifun.inc b/rtl/win/wininc/unifun.inc
index 8de59c5a8c..9b37aac0af 100644
--- a/rtl/win/wininc/unifun.inc
+++ b/rtl/win/wininc/unifun.inc
@@ -497,6 +497,7 @@ function GetConsoleAliasesW(AliasBuffer:LPWSTR; AliasBufferLength:DWORD; ExeName
function GetConsoleAliasExesW(ExeNameBuffer:LPWSTR; ExeNameBufferLength:DWORD):DWORD;stdcall;external 'kernel32' name 'GetConsoleAliasExesW';
function GetComputerNameExW(NameType:COMPUTER_NAME_FORMAT;lpbuffer:LPWSTR;nSize:LPDWORD):BOOL;stdcall;external 'kernel32' name 'GetComputerNameExW';
function QueryFullProcessImageNameW(hProcess:THandle;dwFlags:DWord; lpexename :lpwstr;lpdwsize:pdword):BOOL; stdcall; external 'kernel32.dll' name 'QueryFullProcessImageNameW';
+function RealGetWindowClassW(Wnd : HWND;ClassnameBuffer : pwidechar;ClassnameBufferSize : DWORD): DWORD; stdcall; external 'user32.dll' name 'RealGetWindowClassW';
{$endif read_interface}