diff options
Diffstat (limited to 'rtl')
-rw-r--r-- | rtl/beos/termiosproc.inc | 2 | ||||
-rw-r--r-- | rtl/darwin/aarch64/sighnd.inc | 4 | ||||
-rw-r--r-- | rtl/darwin/arm/sighnd.inc | 4 | ||||
-rw-r--r-- | rtl/darwin/ppcgen/ppchnd.inc | 4 | ||||
-rw-r--r-- | rtl/darwin/termiosproc.inc | 2 | ||||
-rw-r--r-- | rtl/darwin/x86/x86hnd.inc | 6 | ||||
-rw-r--r-- | rtl/haiku/termiosproc.inc | 2 | ||||
-rw-r--r-- | rtl/inc/systemh.inc | 10 | ||||
-rw-r--r-- | rtl/linux/sparcgen/sysnr.inc | 109 | ||||
-rw-r--r-- | rtl/linux/t_linux.h2paschk | 151 | ||||
-rw-r--r-- | rtl/linux/termiosproc.inc | 2 | ||||
-rw-r--r-- | rtl/netbsd/termiosproc.inc | 2 | ||||
-rw-r--r-- | rtl/objpas/classes/classesh.inc | 151 | ||||
-rw-r--r-- | rtl/objpas/classes/streams.inc | 760 | ||||
-rw-r--r-- | rtl/openbsd/t_openbsd.h2paschk | 63 | ||||
-rw-r--r-- | rtl/openbsd/termiosproc.inc | 2 | ||||
-rwxr-xr-x | rtl/unix/scripts/check_rtl_types.sh | 213 | ||||
-rwxr-xr-x | rtl/unix/scripts/check_sys.sh | 71 | ||||
-rw-r--r-- | rtl/win/syswin.inc | 11 | ||||
-rw-r--r-- | rtl/win/wininc/ascdef.inc | 1 | ||||
-rw-r--r-- | rtl/win/wininc/ascfun.inc | 1 | ||||
-rw-r--r-- | rtl/win/wininc/defines.inc | 37 | ||||
-rw-r--r-- | rtl/win/wininc/func.inc | 4 | ||||
-rw-r--r-- | rtl/win/wininc/unidef.inc | 1 | ||||
-rw-r--r-- | rtl/win/wininc/unifun.inc | 1 |
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} |