| err = err0, fd = ino0, ofh = abs-of(of), root.dir?, dom of < ino, abs(root, ROOT_INO)(dirs), afs-cons(dirs, files), fids-cons(root, abs-files(files), abs-of(of)), of-cons(of, dirs, files), psynced → asynced ⊦ [vfs_open#(path, mode, user, dirs, files, asynced; fd, err, of, ino)] ( of-cons(of, dirs, files) ∧ dom of < ino → ⟨posix_open#(path, mode, user, root, abs-files(files); ino0, err0, ofh)⟩ (ofh = abs-of(of) ∧ (psynced → asynced) ∧ fd = ino0 ∧ err = err0)) |
err = err0, fd = ino1, ino0 = ino, ofh = abs-of(of), root.dir?, dom of < ino, abs(root, ROOT_INO)(dirs), afs-cons(dirs, files), fids-cons(root, abs-files(files), abs-of(of)), of-cons(of, dirs, files), psynced → asynced ⊦ [let ino = ROOT_INO, inode = ? in {vfs_walk#(path, user, dirs, files, asynced; ino, err); if err = ESUCCESS then let isdir = false in vfs_may_open#(ino, isdir, mode, user, dirs, files, asynced; inode, err); if err = ESUCCESS then {of[ino0] := mkfile(ino, mode, 0); fd := ino0; ino0 := ino0 + 1}}] ( of-cons(of, dirs, files) ∧ dom of < ino0 → ⟨posix_open#(path, mode, user, root, abs-files(files); ino1, err0, ofh)⟩ (ofh = abs-of(of) ∧ (psynced → asynced) ∧ fd = ino1 ∧ err = err0))
Used simplifier rules: vfs_open#(PATH, MODE, USER, DIRS, FILES, ASYNCED; FD, ERR, OF, MAXINO) {let INO = ROOT_INO, INODE = ? in {vfs_walk#(PATH, USER, DIRS, FILES, ASYNCED; INO, ERR); if ERR = ESUCCESS then let ISDIR = false in vfs_may_open# (INO, ISDIR, MODE, USER, DIRS, FILES, ASYNCED; INODE, ERR); if ERR = ESUCCESS then {OF[MAXINO] := mkfile(INO, MODE, 0); FD := MAXINO; MAXINO := MAXINO + 1}} };