code wiki / (root) / nx_fio_write_gate.nx

nx_fio_write_gate.nx source

↩ module page · 48 lines · 3232 B

1// Real-kernel controls for the shared write/sync/close boundary. 2// argv[1] is an exclusive private fixture pathname; successful fixtures remain evidence. 3import "nx_fio.nx" 4import "nx_gate_verdict.nx" 5func fw_same(a: *u8,b: *u8) -> i64 { var i: i64=0;while a[i]!=(0 as u8) { if a[i]!=b[i] { return 0 };i=i+1 };return b[i]==(0 as u8) } 6func main(argc: i64,argv: *i64) -> i64 { 7 if argc!=2 { return 2 } 8 let ctr: *i64=gv_ctr() 9 let result: *NxFileWriteResult=sys_mmap(__size_of(NxFileWriteResult)) as *NxFileWriteResult 10 let fds: *i64=sys_mmap(16) as *i64 11 let got: *u8=sys_mmap(16) 12 if (result as i64)<0 || (fds as i64)<0 || (got as i64)<0 { return 3 } 13 let payload: *u8="proof" 14 let fd: i64=sys_openat_exclusive(argv[1] as *u8,384) 15 gv_check("exclusive-fixture-created",fd>=0,ctr) 16 if fd<0 { return 3 } 17 let rc: i64=fio_write_sync_fd(fd,payload,5,result) 18 gv_check("regular-file-write-sync-close",rc==0 && result.written==5 && result.close_code==0 && fw_same(result.stage,"complete")==1,ctr) 19 gv_check("successful-helper-consumed-descriptor",sys_close(fd)==(0-9),ctr) 20 let rd: i64=sys_openat_rd(argv[1] as *u8) 21 if rd<0 { return 3 } 22 let count: i64=sys_read(rd,got,16) 23 gv_check("retained-payload-exact",count==5 && got[0]==(112 as u8) && got[1]==(114 as u8) && got[2]==(111 as u8) && got[3]==(111 as u8) && got[4]==(102 as u8),ctr) 24 let bad: i64=fio_write_sync_fd(rd,payload,5,result) 25 gv_check("read-only-write-failure-preserved",bad==(0-9) && fw_same(result.stage,"write")==1 && result.written==0 && result.close_code==0,ctr) 26 gv_check("failed-write-consumed-descriptor",sys_close(rd)==(0-9),ctr) 27 let pipe_rc: i64=sys_pipe2(fds,0) 28 gv_check("pipe-created",pipe_rc==0,ctr) 29 if pipe_rc!=0 { return 3 } 30 let reader: i64=fds[0]&0xffffffff 31 let writer: i64=(fds[0]>>32)&0xffffffff 32 let sync_rc: i64=fio_write_sync_fd(writer,payload,5,result) 33 gv_check("actual-pipe-fsync-failure-preserved",sync_rc==FIO_EINVAL && fw_same(result.stage,"fsync")==1 && result.written==5 && result.close_code==0,ctr) 34 gv_check("fsync-failure-consumed-descriptor",sys_close(writer)==(0-9),ctr) 35 let received: i64=sys_read(reader,got,16) 36 gv_check("failed-sync-still-reports-written-bytes",received==5,ctr) 37 sys_close(reader) 38 let inputfd:i64=sys_openat_rd(argv[1] as *u8) 39 let inputrc:i64=fio_write_sync_fd(inputfd,payload,0-1,result) 40 gv_check("invalid-length-closes-valid-descriptor",inputrc==FIO_EINVAL && result.written==0 && result.close_code==0 && fw_same(result.stage,"input")==1 && sys_close(inputfd)==(0-9),ctr) 41 let nullfd:i64=sys_openat_rd(argv[1] as *u8) 42 let nullrc:i64=fio_write_sync_fd(nullfd,0 as *u8,1,result) 43 gv_check("null-positive-body-closes-valid-descriptor",nullrc==FIO_EINVAL && result.close_code==0 && fw_same(result.stage,"input")==1 && sys_close(nullfd)==(0-9),ctr) 44 let invalid: i64=fio_write_sync_fd(0-1,payload,5,result) 45 gv_check("primary-and-close-errors-both-retained",invalid==(0-9) && result.code==(0-9) && result.close_code==(0-9) && fw_same(result.stage,"write")==1,ctr) 46 sys_munmap(result as *u8,__size_of(NxFileWriteResult));sys_munmap(fds as *u8,16);sys_munmap(got,16) 47 return gv_verdict("nx_fio_write_gate",ctr,"real file/read-only/pipe controls; isolated close failure after successful fsync not simulated") 48}