code wiki / _hdl_build / nx_descriptor_canonical_gate_t188.nx
nx_descriptor_canonical_gate_t188.nx source
↩ module page · 26 lines · 1642 B
1import "nx_syscalls.nx"
2import "nx_gate_verdict.nx"
3func main()->i64{
4 let c:*i64=gv_ctr();let stat:*u8=sys_mmap(NX_STAT_X64_BYTES)
5 let name:*u8="knowledge/gates/fd-mode-t188.fixture"
6 let moved:*u8="knowledge/gates/fd-mode-t188.moved"
7 let fd:i64=sys_openat_wr(name,MODE_0600)
8 gv_check("fixture descriptor opened",fd>=0,c);if fd<0{return 1}
9 gv_check("descriptor metadata syscall80",sys_fstat_fd(fd,stat)==0,c)
10 gv_check("descriptor mode0600",sys_stat_permissions(stat)==MODE_0600,c)
11 gv_check("rename original descriptor target",sys_renameat(name,moved)==0,c)
12 let second:i64=sys_openat_wr(name,MODE_0600)
13 gv_check("replacement path created",second>=0,c)
14 gv_check("descriptor chmod52 succeeds",sys_fchmod_fd(fd,MODE_0755)==0,c)
15 gv_check("moved descriptor metadata succeeds",sys_fstat_fd(fd,stat)==0,c)
16 gv_check("moved inode mode0755",sys_stat_permissions(stat)==MODE_0755,c)
17 gv_check("replacement descriptor metadata succeeds",sys_fstat_fd(second,stat)==0,c)
18 gv_check("replacement path remains0600",sys_stat_permissions(stat)==MODE_0600,c)
19 gv_check("special privilege bits refused",sys_fchmod_fd(fd,4095)==NX_FILE_DESCRIPTOR_INVALID,c)
20 gv_check("negative fd refused",sys_fchmod_fd(0-1,MODE_0600)==NX_FILE_DESCRIPTOR_INVALID,c)
21 gv_check("metadata null refused",sys_fstat_fd(fd,0 as *u8)==NX_FILE_DESCRIPTOR_INVALID,c)
22 gv_check("descriptor close checked",sys_close(fd)==0,c)
23 gv_check("closed descriptor reports EBADF",sys_fchmod_fd(fd,MODE_0600)==(0-9),c)
24 gv_check("replacement descriptor close checked",sys_close(second)==0,c)
25 return gv_verdict("descriptor",c,"Filesystem fixture only; no service or live artifact changed")
26}