| of1[fd] = mkfile(m, mode, m0), err = err0, files = files1, n = n1, of = of1, afs-cons(dirs, files1), of-cons(of1, dirs, files1), fd ∈ of1, n1 ≤ # buf, ⌊err0⌋ ⊦ [skip; file := of1[fd]] (err = ESUCCESS ⊃ (files[file.ino].content.stream to files[file.ino].size).buf = splice(buf, 0, (files1[file.ino].content.stream to files1[file.ino].size).buf, file.pos, n) ∧ of = of1[fd, file.pos:= (file.pos + n)] ∧ n ≤ n1 ∧ file.ino ∈ files1 ∧ file.ino ∈ files ∧ files[file.ino].meta = files1[file.ino].meta ∧ files -- file.ino = files1 -- file.ino ∧ (file.mode = MODE_W ∨ file.mode = MODE_RW) ;files ~ files1 ∧ of1 = of ∧ (err = EBADFD ∧ (fd ∈ of → file.mode ≠ MODE_W ∧ file.mode ≠ MODE_RW) ∨ ⌊err⌋ ) ), n1 = 0, mode ≠ MODE_W ∧ mode ≠ MODE_RW |
of1[fd] = mkfile(m, mode, m0), err = err0, files = files1, n = n1, of = of1, afs-cons(dirs, files1), of-cons(of1, dirs, files1), fd ∈ of1, n1 ≤ # buf, ⌊err0⌋ ⊦ [file := of1[fd]] (err = ESUCCESS ⊃ (files[file.ino].content.stream to files[file.ino].size).buf = splice(buf, 0, (files1[file.ino].content.stream to files1[file.ino].size).buf, file.pos, n) ∧ of = of1[fd, file.pos:= (file.pos + n)] ∧ n ≤ n1 ∧ file.ino ∈ files1 ∧ file.ino ∈ files ∧ files[file.ino].meta = files1[file.ino].meta ∧ files -- file.ino = files1 -- file.ino ∧ (file.mode = MODE_W ∨ file.mode = MODE_RW) ;files ~ files1 ∧ of1 = of ∧ (err = EBADFD ∧ (fd ∈ of → file.mode ≠ MODE_W ∧ file.mode ≠ MODE_RW) ∨ ⌊err⌋ ) ), n1 = 0, mode ≠ MODE_W ∧ mode ≠ MODE_RW