diff options
author | florian <florian@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2021-01-31 17:12:39 +0000 |
---|---|---|
committer | florian <florian@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2021-01-31 17:12:39 +0000 |
commit | 72eead0a789665c75922b359447d0c39a24c3015 (patch) | |
tree | bfb491b8b6788701f3f7bf3475d36ae7fd084a48 /rtl/linux | |
parent | b37efc828557c8bd9d5df3c462eb4cb2afd79a52 (diff) | |
download | fpc-72eead0a789665c75922b359447d0c39a24c3015.tar.gz |
+ futimens syscall
* make use of futimens syscall in sysutils unit
+ tests
git-svn-id: https://svn.freepascal.org/svn/fpc/trunk@48472 3ad0048d-3df7-0310-abae-a5850022a9f2
Diffstat (limited to 'rtl/linux')
-rw-r--r-- | rtl/linux/linux.pp | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/rtl/linux/linux.pp b/rtl/linux/linux.pp index 72c2c9ad36..7625370e39 100644 --- a/rtl/linux/linux.pp +++ b/rtl/linux/linux.pp @@ -555,7 +555,8 @@ Type tkernel_timespecs = array[0..1] of kernel_timespec; - Function fputimensat(dfd: cint; path:pchar;const times:tkernel_timespecs;flags:cint):cint; {$ifdef FPC_USE_LIBC} cdecl; external name 'statx'; {$ENDIF} +Function fputimensat(dfd: cint; path:pchar;const times:tkernel_timespecs;flags:cint):cint; {$ifdef FPC_USE_LIBC} cdecl; external name 'statx'; {$ENDIF} +Function fpfutimens(fd: cint; const times:tkernel_timespecs):cint; {$ifdef FPC_USE_LIBC} cdecl; external name 'futimens'; {$ENDIF} implementation @@ -893,4 +894,25 @@ begin {$endif sizeof(clong)<=4} end; + +Function fpfutimens(fd: cint; const times:tkernel_timespecs):cint; +var + tsa: Array[0..1] of timespec; +begin +{$if sizeof(clong)<=4} + fpfutimens:=do_syscall(syscall_nr_utimensat_time64,fd,TSysParam(nil),TSysParam(@times),0); + if (fpfutimens>=0) or (fpgeterrno<>ESysENOSYS) then + exit; + { try 32 bit fall back } + tsa[0].tv_sec := times[0].tv_sec; + tsa[0].tv_nsec := times[0].tv_nsec; + tsa[1].tv_sec := times[1].tv_sec; + tsa[1].tv_nsec := times[1].tv_nsec; + fpfutimens:=do_syscall(syscall_nr_utimensat,fd,TSysParam(nil),TSysParam(@tsa),0); +{$else sizeof(clong)<=4} + fpfutimens:=do_syscall(syscall_nr_utimensat,fd,TSysParam(nil),TSysParam(@times),0); +{$endif sizeof(clong)<=4} +end; + end. + |