| posix_write#(FD, BUF, USER, ROOT; N, ERR, FS, OFH; PSYNCED) {if N ≤ # BUF then {choose E with pre-write(FD, BUF, N, E, USER, ROOT, FS, OFH) in ERR := E; if ERR = ESUCCESS then let FH = OFH[FD] in let FDATA = FS[FH.fid] in choose N0 with N0 ≤ N in {N := N0; FDATA.content := splice(BUF, 0, FDATA.content, FH.pos, N); FS[FH.fid] := FDATA; OFH[FD].pos := FH.pos + N} else N := ?; PSYNCED := ?} else abort } |