code wiki / _hdl_build / nx_descriptor_candidate_t188.nx

nx_descriptor_candidate_t188.nx source

↩ module page · 25 lines · 1056 B

1import "nx_syscalls.nx" 2// Ordinary permission bits only. Special privilege bits are never copied by staging. 3const NX_FILE_PERMISSION_MASK:i64=511 4const NX_FILE_DESCRIPTOR_INVALID:i64=0-22 5func sys_fchmod_fd(fd:i64,mode:i64)->i64{ 6 if fd<0 || mode<0 || mode>NX_FILE_PERMISSION_MASK {return NX_FILE_DESCRIPTOR_INVALID} 7 return __syscall(52,fd,mode,0,0,0,0) 8} 9// Portable descriptor syscall; consumers below use the x86-64 stat ABI layout. 10const NX_STAT_X64_BYTES:i64=144 11const NX_STAT_X64_MODE_OFFSET:i64=24 12const NX_STAT_X64_BLOCK_OFFSET:i64=56 13const NX_STAT_X64_SIZE_OFFSET:i64=48 14const NX_STAT_X64_DEVICE_OFFSET:i64=0 15const NX_STAT_X64_INODE_OFFSET:i64=8 16const NX_STAT_TYPE_MASK:i64=61440 17const NX_STAT_REGULAR_FILE:i64=32768 18func sys_fstat_fd(fd:i64,stat:*u8)->i64{ 19 if fd<0 || (stat as i64)==0{return NX_FILE_DESCRIPTOR_INVALID} 20 return __syscall(80,fd,stat,0,0,0,0) 21} 22func sys_stat_permissions(stat:*u8)->i64{ 23 let mode:i64=(stat[NX_STAT_X64_MODE_OFFSET] as i64)+((stat[NX_STAT_X64_MODE_OFFSET+1] as i64)<<8) 24 return mode & NX_FILE_PERMISSION_MASK 25}