mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-18 21:49:15 +02:00
parent
9e530ac2c8
commit
d425a85f8d
1
.gitattributes
vendored
1
.gitattributes
vendored
@ -15557,6 +15557,7 @@ tests/test/units/fpwidestring/twide2fpwidestring.pp svneol=native#text/pascal
|
|||||||
tests/test/units/fpwidestring/twide6fpwidestring.pp svneol=native#text/pascal
|
tests/test/units/fpwidestring/twide6fpwidestring.pp svneol=native#text/pascal
|
||||||
tests/test/units/fpwidestring/twide7fpwidestring.pp svneol=native#text/pascal
|
tests/test/units/fpwidestring/twide7fpwidestring.pp svneol=native#text/pascal
|
||||||
tests/test/units/lineinfo/tlininfo.pp svneol=native#text/plain
|
tests/test/units/lineinfo/tlininfo.pp svneol=native#text/plain
|
||||||
|
tests/test/units/linux/tstatx.pp svneol=native#text/pascal
|
||||||
tests/test/units/math/tcmpnan.pp svneol=native#text/plain
|
tests/test/units/math/tcmpnan.pp svneol=native#text/plain
|
||||||
tests/test/units/math/tdivmod.pp svneol=native#text/plain
|
tests/test/units/math/tdivmod.pp svneol=native#text/plain
|
||||||
tests/test/units/math/tmask.inc svneol=native#text/plain
|
tests/test/units/math/tmask.inc svneol=native#text/plain
|
||||||
|
@ -29,8 +29,17 @@ interface
|
|||||||
uses
|
uses
|
||||||
BaseUnix, unixtype;
|
BaseUnix, unixtype;
|
||||||
|
|
||||||
Const
|
const
|
||||||
O_CLOEXEC = $80000;
|
O_CLOEXEC = $80000;
|
||||||
|
|
||||||
|
type
|
||||||
|
{ used by newer Linux headers }
|
||||||
|
__u16 = Word;
|
||||||
|
__s16 = Smallint;
|
||||||
|
__u32 = DWord;
|
||||||
|
__s32 = Longint;
|
||||||
|
__u64 = QWord;
|
||||||
|
__s64 = Int64;
|
||||||
|
|
||||||
type
|
type
|
||||||
TSysInfo = record
|
TSysInfo = record
|
||||||
@ -472,6 +481,64 @@ function clock_settime(clk_id : clockid_t; tp : ptimespec) : cint; {$ifdef FPC_U
|
|||||||
function setregid(rgid,egid : uid_t): cint; {$ifdef FPC_USE_LIBC} cdecl; external name 'setregid'; {$ENDIF}
|
function setregid(rgid,egid : uid_t): cint; {$ifdef FPC_USE_LIBC} cdecl; external name 'setregid'; {$ENDIF}
|
||||||
function setreuid(ruid,euid : uid_t): cint; {$ifdef FPC_USE_LIBC} cdecl; external name 'setreuid'; {$ENDIF}
|
function setreuid(ruid,euid : uid_t): cint; {$ifdef FPC_USE_LIBC} cdecl; external name 'setreuid'; {$ENDIF}
|
||||||
|
|
||||||
|
Const
|
||||||
|
STATX_TYPE = $00000001;
|
||||||
|
STATX_MODE = $00000002;
|
||||||
|
STATX_NLINK = $00000004;
|
||||||
|
STATX_UID = $00000008;
|
||||||
|
STATX_GID = $00000010;
|
||||||
|
STATX_ATIME = $00000020;
|
||||||
|
STATX_MTIME = $00000040;
|
||||||
|
STATX_CTIME = $00000080;
|
||||||
|
STATX_INO = $00000100;
|
||||||
|
STATX_SIZE = $00000200;
|
||||||
|
STATX_BLOCKS = $00000400;
|
||||||
|
STATX_BASIC_STATS = $000007ff;
|
||||||
|
STATX_BTIME = $00000800;
|
||||||
|
STATX_ALL = $00000fff;
|
||||||
|
STATX__RESERVED = $80000000;
|
||||||
|
STATX_ATTR_COMPRESSED = $00000004;
|
||||||
|
STATX_ATTR_IMMUTABLE = $00000010;
|
||||||
|
STATX_ATTR_APPEND = $00000020;
|
||||||
|
STATX_ATTR_NODUMP = $00000040;
|
||||||
|
STATX_ATTR_ENCRYPTED = $00000800;
|
||||||
|
STATX_ATTR_AUTOMOUNT = $00001000;
|
||||||
|
|
||||||
|
Type
|
||||||
|
statx_timestamp = record
|
||||||
|
tv_sec : __s64;
|
||||||
|
tv_nsec : __u32;
|
||||||
|
__reserved : __s32;
|
||||||
|
end;
|
||||||
|
pstatx_timestamp = ^statx_timestamp;
|
||||||
|
|
||||||
|
statx = record
|
||||||
|
stx_mask : __u32;
|
||||||
|
stx_blksize : __u32;
|
||||||
|
stx_attributes : __u64;
|
||||||
|
stx_nlink : __u32;
|
||||||
|
stx_uid : __u32;
|
||||||
|
stx_gid : __u32;
|
||||||
|
stx_mode : __u16;
|
||||||
|
__spare0 : array[0..0] of __u16;
|
||||||
|
stx_ino : __u64;
|
||||||
|
stx_size : __u64;
|
||||||
|
stx_blocks : __u64;
|
||||||
|
stx_attributes_mask : __u64;
|
||||||
|
stx_atime : statx_timestamp;
|
||||||
|
stx_btime : statx_timestamp;
|
||||||
|
stx_ctime : statx_timestamp;
|
||||||
|
stx_mtime : statx_timestamp;
|
||||||
|
stx_rdev_major : __u32;
|
||||||
|
stx_rdev_minor : __u32;
|
||||||
|
stx_dev_major : __u32;
|
||||||
|
stx_dev_minor : __u32;
|
||||||
|
__spare2 : array[0..13] of __u64;
|
||||||
|
end;
|
||||||
|
pstatx = ^statx;
|
||||||
|
|
||||||
|
function Fpstatx(dfd: cint; filename: pchar; flags,mask: cuint; var buf: statx):cint; {$ifdef FPC_USE_LIBC} cdecl; external name 'statx'; {$ENDIF}
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
|
|
||||||
|
|
||||||
@ -770,5 +837,12 @@ begin
|
|||||||
setreuid:=do_syscall(syscall_nr_setreuid,ruid,euid);
|
setreuid:=do_syscall(syscall_nr_setreuid,ruid,euid);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
function Fpstatx(dfd: cint; filename: pchar; flags,mask: cuint; var buf: statx):cint;
|
||||||
|
begin
|
||||||
|
Fpstatx:=do_syscall(syscall_nr_statx,TSysParam(dfd),TSysParam(filename),TSysParam(flags),TSysParam(mask),TSysParam(@buf));
|
||||||
|
end;
|
||||||
|
|
||||||
{$endif}
|
{$endif}
|
||||||
|
|
||||||
end.
|
end.
|
||||||
|
@ -292,9 +292,19 @@ CONST
|
|||||||
{$endif not (cpusparc or cpusparc64)}
|
{$endif not (cpusparc or cpusparc64)}
|
||||||
|
|
||||||
AT_FDCWD = -100;
|
AT_FDCWD = -100;
|
||||||
|
AT_SYMLINK_NOFOLLOW = $100;
|
||||||
AT_REMOVEDIR = $200;
|
AT_REMOVEDIR = $200;
|
||||||
|
AT_SYMLINK_FOLLOW = $400;
|
||||||
|
AT_NO_AUTOMOUNT = $800;
|
||||||
|
AT_EMPTY_PATH = $1000;
|
||||||
|
AT_STATX_SYNC_TYPE = $6000;
|
||||||
|
AT_STATX_SYNC_AS_STAT = $0000;
|
||||||
|
AT_STATX_FORCE_SYNC = $2000;
|
||||||
|
AT_STATX_DONT_SYNC = $4000;
|
||||||
|
AT_RECURSIVE = $8000;
|
||||||
|
|
||||||
|
{ SIGCHLD or CLONE_CHILD_CLEARTID or CLONE_CHILD_SETTID }
|
||||||
clone_flags_fork = $01200011;
|
clone_flags_fork = $01200011;
|
||||||
{ SIGCHLD | CLONE_CHILD_CLEARTID | CLONE_CHILD_SETTID }
|
|
||||||
|
|
||||||
{$if defined(cpuarm) or defined(cpualpha) or defined(cpublackfin) or defined(cpum68k) or defined(aarch64) or defined(riscv32) or defined(riscv64)}
|
{$if defined(cpuarm) or defined(cpualpha) or defined(cpublackfin) or defined(cpum68k) or defined(aarch64) or defined(riscv32) or defined(riscv64)}
|
||||||
O_LARGEFILE = $20000;
|
O_LARGEFILE = $20000;
|
||||||
@ -338,6 +348,9 @@ CONST
|
|||||||
S_IFREG = 32768; { regular }
|
S_IFREG = 32768; { regular }
|
||||||
S_IFLNK = 40960; { symbolic link }
|
S_IFLNK = 40960; { symbolic link }
|
||||||
S_IFSOCK= 49152; { socket }
|
S_IFSOCK= 49152; { socket }
|
||||||
|
S_ISUID = &4000;
|
||||||
|
S_ISGID = &2000;
|
||||||
|
S_ISVTX = &1000;
|
||||||
|
|
||||||
{ Constansts for MMAP }
|
{ Constansts for MMAP }
|
||||||
{$IFDEF FPC_IS_SYSTEM}
|
{$IFDEF FPC_IS_SYSTEM}
|
||||||
|
@ -1837,7 +1837,7 @@ fpc_shared:
|
|||||||
ifdef HASSHAREDLIB
|
ifdef HASSHAREDLIB
|
||||||
$(MAKE) all CREATESHARED=1 LINKSHARED=1 CREATESMART=1
|
$(MAKE) all CREATESHARED=1 LINKSHARED=1 CREATESMART=1
|
||||||
ifneq ($(SHARED_BUILD),n)
|
ifneq ($(SHARED_BUILD),n)
|
||||||
$(PPUMOVE) -q $(SHARED_LIBUNITS) -i$(COMPILER_UNITTARGETDIR) -o$(SHARED_FULLNAME) -d$(COMPILER_UNITTARGETDIR)
|
$(PPUMOVE) -q $(SHARED_LIBUNITS) -i$(COMPILER_UNITTARGETDIR) -o$(SHARED_FULLNAME) -d$(COMPILER_UNITTARGETDIR) -P$(BINUTILSPREFIX)
|
||||||
endif
|
endif
|
||||||
else
|
else
|
||||||
@$(ECHO) Shared Libraries not supported
|
@$(ECHO) Shared Libraries not supported
|
||||||
@ -2238,7 +2238,7 @@ export LOG:=$(TEST_OUTPUTDIR)/log
|
|||||||
endif
|
endif
|
||||||
LOGFILES=$(TEST_OUTPUTDIR)/log $(TEST_OUTPUTDIR)/longlog $(TEST_OUTPUTDIR)/faillist
|
LOGFILES=$(TEST_OUTPUTDIR)/log $(TEST_OUTPUTDIR)/longlog $(TEST_OUTPUTDIR)/faillist
|
||||||
LOGEXT=.testlog .tbslog .tbflog .webtbslog .webtbflog
|
LOGEXT=.testlog .tbslog .tbflog .webtbslog .webtbflog
|
||||||
TESTUNITDIRS=system dos crt objects strings sysutils math sharemem strutils matrix lineinfo ucomplex fpwidestring cpu fmtbcd windows classes character dateutil fpcunit softfpu variants sortbase sortalgs
|
TESTUNITDIRS=system dos crt objects strings sysutils math sharemem strutils matrix lineinfo ucomplex fpwidestring cpu fmtbcd windows classes character dateutil fpcunit softfpu variants sortbase sortalgs linux
|
||||||
TESTDIRECTDIRS=
|
TESTDIRECTDIRS=
|
||||||
TESTSUBDIRS=cg cg/variants cg/cdecl cpu16 cpu16/i8086 library opt $(addprefix units/,$(TESTUNITDIRS))
|
TESTSUBDIRS=cg cg/variants cg/cdecl cpu16 cpu16/i8086 library opt $(addprefix units/,$(TESTUNITDIRS))
|
||||||
TESTPACKAGESDIRS=win-base webtbs hash fcl-registry fcl-process zlib fcl-db fcl-xml cocoaint bzip2
|
TESTPACKAGESDIRS=win-base webtbs hash fcl-registry fcl-process zlib fcl-db fcl-xml cocoaint bzip2
|
||||||
|
@ -154,7 +154,7 @@ LOGFILES=$(TEST_OUTPUTDIR)/log $(TEST_OUTPUTDIR)/longlog $(TEST_OUTPUTDIR)/faill
|
|||||||
LOGEXT=.testlog .tbslog .tbflog .webtbslog .webtbflog
|
LOGEXT=.testlog .tbslog .tbflog .webtbslog .webtbflog
|
||||||
|
|
||||||
# Subdirs available in the test subdir
|
# Subdirs available in the test subdir
|
||||||
TESTUNITDIRS=system dos crt objects strings sysutils math sharemem strutils matrix lineinfo ucomplex fpwidestring cpu fmtbcd windows classes character dateutil fpcunit softfpu variants sortbase sortalgs
|
TESTUNITDIRS=system dos crt objects strings sysutils math sharemem strutils matrix lineinfo ucomplex fpwidestring cpu fmtbcd windows classes character dateutil fpcunit softfpu variants sortbase sortalgs linux
|
||||||
TESTDIRECTDIRS=
|
TESTDIRECTDIRS=
|
||||||
TESTSUBDIRS=cg cg/variants cg/cdecl cpu16 cpu16/i8086 library opt $(addprefix units/,$(TESTUNITDIRS))
|
TESTSUBDIRS=cg cg/variants cg/cdecl cpu16 cpu16/i8086 library opt $(addprefix units/,$(TESTUNITDIRS))
|
||||||
TESTPACKAGESDIRS=win-base webtbs hash fcl-registry fcl-process zlib fcl-db fcl-xml cocoaint bzip2
|
TESTPACKAGESDIRS=win-base webtbs hash fcl-registry fcl-process zlib fcl-db fcl-xml cocoaint bzip2
|
||||||
|
27
tests/test/units/linux/tstatx.pp
Normal file
27
tests/test/units/linux/tstatx.pp
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
{ %target=linux }
|
||||||
|
uses
|
||||||
|
ctypes,baseunix,linux;
|
||||||
|
|
||||||
|
var
|
||||||
|
mystatx : statx;
|
||||||
|
res : cint;
|
||||||
|
f : text;
|
||||||
|
|
||||||
|
begin
|
||||||
|
assign(f,'test.txt');
|
||||||
|
rewrite(f);
|
||||||
|
write(f,'ccccc');
|
||||||
|
close(f);
|
||||||
|
res:=fpstatx(AT_FDCWD,'test.txt',AT_SYMLINK_NOFOLLOW,STATX_ALL,mystatx);
|
||||||
|
erase(f);
|
||||||
|
if res<>0 then
|
||||||
|
begin
|
||||||
|
halt(1);
|
||||||
|
end;
|
||||||
|
writeln('statx.stx_mask = %',binstr(mystatx.stx_mask,32));
|
||||||
|
writeln('statx.size = ',mystatx.stx_size);
|
||||||
|
if mystatx.stx_size<>5 then
|
||||||
|
halt(1);
|
||||||
|
writeln('statx.mode = %',binstr(mystatx.stx_mode,16));
|
||||||
|
writeln('ok');
|
||||||
|
end.
|
Loading…
Reference in New Issue
Block a user